Встроенные функции

Материал из DevelopmenOnTheEdge
Перейти к: навигация, поиск

Основные функции

Для удобства работы предопределены некоторые функции:

  • addDays: создаёт SQL-предложение для получения даты, отличающейся от заданной на указанное количество дней. Требуется два параметра: дата и количество дней
  • addMillis: создаёт SQL-предложение для получения даты, отличающейся от заданной на указанное количество миллисекунд. Требуется два параметра: дата и количество миллисекунд.
  • addMonths: создаёт SQL-предложение для получения даты, отличающейся от заданной на указанное количество месяцев. Требуется два параметра: дата и количество месяцев.
  • chr: создаёт SQL-предложение для нахождения символа по коду (обычно пригождаться не должно, сейчас используется для идентичных метаданных со старым BE).
  • coalesce: создаёт SQL-предложение COALESCE.
  • concat: создаёт SQL-предложения для конкатенации переданных строк. Пример:
    • SELECT ${concat('name', ' = '?str, 'value')} FROM myDictionary ->
      (в MySQL) SELECT CONCAT( name, ' = ', value ) FROM myDictionary
  • genericRef: создаётся generic-ссылка. Требуется два аргумента: entity и колонка-идентификатор.
  • if: создаёт SQL-предложение IF. Требуется три аргумента: условие, значение, если условие истинно, и значение, если условие ложно. Если третий опущен, предполагается пустая строка.
  • indexOf: создаёт SQL-предложение для поиска подстроки в строке. Требуется два аргумента: строка и подстрока.
  • joinGenericRef: создаёт JOIN-предложение для подключения таблицы через generic reference. Требудется три аргумента: целевая таблица, алиас для неё и колонка-идентификатор.
  • length: создаёт SQL-предложение для подсчёта количества символов в строке. Не путайте со стандартным Freemarker-суффиксом ?length, который вычислит длину поданной строки во время выполнения скрипта.
  • limit: создаёт SQL-предложение для ограничения числа строк в запросе (если это позволяет СУБД)
  • lpad: создаёт SQL-предложение LPAD. Требудется три аргумента: исходная строка, требуемая длина и строка-заполнитель, которая будет использована для удлиннения исходной строки слева в случае необходимости.
  • replace: создаёт SQL-предложение REPLACE. Требуется три аргумента: исходная строка, искомая подстрока, строка замены.
  • substring: создаёт SQL-предложение SUBSTRING. Требуется три аргумента: исходная строка, номер начального символа, количество символов.

Функции для DDL-манипуляций

Обычно таблицы задаются в BE4 в декларативном стиле в файлах сущностей, и новые таблицы добавляются автоматически при синхронизации. DDL-манипуляции из FTL-скриптов могут потребоваться для обновления таблиц, определённых в старых m4-модулях. В целом манипулировать схемой таблиц из FTL не рекомендуется.

  • columnDef(columnName, columnDefinition): создаёт фрагмент SQL-предложения CREATE TABLE или ALTER TABLE для определения колонки. Первый параметр — имя колонки, второй — хэш с её свойствами. Свойства в точности такие же, как в structure.yaml. Пример:
    • ALTER TABLE test ADD COLUMN ${columnDef('myCol', {'type': 'BOOL', 'canBeNull': true})} ->
      (в Postgres) ALTER TABLE test ADD COLUMN mycol VARCHAR(3) CHECK(mycol IN ('no', 'yes') )
  • tableDef(tableName, columns[, indices]): создаёт SQL-предложение для создания новой таблицы (если таблица уже существовала, старая удаляется). Первый параметр — имя таблицы, второй — хэш, где ключи — имена колонок, а значения — хэш со свойствами колонок (как в columnDef). Необязательный третий параметр: список индексов (ключи — имена индексов, значения — хэш, описывающий индекс так же, как в structure.yaml). Пример:
${tableDef('uiSocialBlocks', {
'CODE': {'type': 'VARCHAR(2)', 'primaryKey': true},
'name': {'type': 'VARCHAR(250)'},
'parentCode': {'type': 'VARCHAR(2)', 'canBeNull': true}
})}
      • Результат в Postgres:
DROP TABLE IF EXISTS uisocialblocks;
CREATE TABLE uisocialblocks (
code VARCHAR(2) NOT NULL PRIMARY KEY,
name VARCHAR(250) NOT NULL,
parentcode VARCHAR(2));
      • Результат в Oracle:
call drop_if_exists( 'uiSocialBlocks' );
CREATE TABLE UISOCIALBLOCKS (
CODE VARCHAR2(2 CHAR) NOT NULL PRIMARY KEY,
NAME VARCHAR2(250 CHAR) NOT NULL,
PARENTCODE VARCHAR2(2 CHAR));