Встроенные функции — различия между версиями

Материал из DevelopmenOnTheEdge
Перейти к: навигация, поиск
(Новая страница: «Для удобства работы предопределены некоторые функции:<br> * ''''''addDays''': '''создаёт SQL-предлож…»)
 
(Функции для DDL-манипуляций)
 
(не показано 6 промежуточных версии 2 участников)
Строка 1: Строка 1:
Для удобства работы предопределены некоторые функции:<br>
+
=== Основные функции ===
* ''''''addDays''': '''создаёт SQL-предложение для получения даты,  
+
Для удобства работы предопределены некоторые функции:
отличающейся от заданной на указанное количество дней. Требуется два  
+
* '''addDays''': создаёт SQL-предложение для получения даты, отличающейся от заданной на указанное количество дней. Требуется два параметра: дата и количество дней
параметра: дата и количество дней
+
* '''addMillis''': создаёт SQL-предложение для получения даты, отличающейся от заданной на указанное количество миллисекунд. Требуется два параметра: дата и количество миллисекунд.
* ''''''addMillis''': '''создаёт SQL-предложение для получения даты,  
+
* '''addMonths''': создаёт SQL-предложение для получения даты, отличающейся от заданной на указанное количество месяцев. Требуется два параметра: дата и количество месяцев.
отличающейся от заданной на указанное количество миллисекунд. Требуется два  
+
* '''chr''': создаёт SQL-предложение для нахождения символа по коду (обычно пригождаться не должно, сейчас используется для идентичных метаданных со старым BE).
параметра: дата и количество миллисекунд.
+
* '''addMonths''': создаёт SQL-предложение для получения даты, отличающейся от заданной на указанное количество месяцев. Требуется два параметра: дата и количество месяцев.<br>
+
* '''chr''': создаёт SQL-предложение для нахождения символа по коду (обычно пригождаться не должно, сейчас используется для идентичных метаданных со старым BE).<br>
+
 
* '''coalesce''': создаёт SQL-предложение COALESCE.
 
* '''coalesce''': создаёт SQL-предложение COALESCE.
 
* '''concat''': создаёт SQL-предложения для конкатенации переданных строк. Пример:
 
* '''concat''': создаёт SQL-предложения для конкатенации переданных строк. Пример:
** <code>SELECT ${concat('name', ' = '?str, 'value')} FROM myDictionary </code>-> (в MySQL) SELECT CONCAT( name, ' = ', value ) FROM myDictionary
+
** <code>SELECT ${concat('name', ' = '?str, 'value')} FROM myDictionary</code> -> <br/> (в MySQL) <code>SELECT CONCAT( name, ' = ', value ) FROM myDictionary</code>
 
* '''genericRef''': создаётся generic-ссылка. Требуется два аргумента: entity и колонка-идентификатор.
 
* '''genericRef''': создаётся generic-ссылка. Требуется два аргумента: entity и колонка-идентификатор.
 
* '''if''': создаёт SQL-предложение IF. Требуется три аргумента: условие, значение, если условие истинно, и значение, если условие ложно. Если третий опущен, предполагается пустая строка.
 
* '''if''': создаёт SQL-предложение IF. Требуется три аргумента: условие, значение, если условие истинно, и значение, если условие ложно. Если третий опущен, предполагается пустая строка.
* '''indexOf''': создаёт SQL-предложение для поиска подстроки в строке. Требуется два аргумента: строка и подстрока.<br>
+
* '''indexOf''': создаёт SQL-предложение для поиска подстроки в строке. Требуется два аргумента: строка и подстрока.
* ''''''joinGenericRef'''''': создаёт JOIN-предложение для подключения таблицы  
+
* '''joinGenericRef''': создаёт JOIN-предложение для подключения таблицы через generic reference. Требудется три аргумента: целевая таблица, алиас для неё и колонка-идентификатор.
через generic reference. Требудется три аргумента: целевая таблица,  
+
* '''length''': создаёт SQL-предложение для подсчёта количества символов в строке. Не путайте со стандартным Freemarker-суффиксом ?length, который вычислит длину поданной строки во время выполнения скрипта.
алиас для неё и колонка-идентификатор.
+
* '''limit''': создаёт SQL-предложение для ограничения числа строк в запросе (если это позволяет СУБД)
* '''length''': создаёт SQL-предложение для подсчёта количества  
+
* '''lpad''': создаёт SQL-предложение LPAD. Требудется три аргумента: исходная строка, требуемая длина и строка-заполнитель, которая будет использована для удлиннения исходной строки слева в случае необходимости.
символов в строке. Не путайте со стандартным Freemarker-суффиксом  
+
* '''replace''': создаёт SQL-предложение REPLACE. Требуется три аргумента: исходная строка, искомая подстрока, строка замены.
?length, который вычислит длину поданной строки во время выполнения  
+
скрипта.
+
* '''limit''': создаёт SQL-предложение для ограничения числа строк в запросе (если это позволяет СУБД)<br>
+
* '''lpad''': создаёт SQL-предложение LPAD. Требудется три аргумента:
+
исходная строка, требуемая длина и строка-заполнитель, которая будет  
+
использована для удлиннения исходной строки слева в случае  
+
необходимости.
+
* '''replace''': создаёт SQL-предложение REPLACE. Требуется три аргумента: исходная строка, искомая подстрока, строка замены.<br>
+
 
* '''substring''': создаёт SQL-предложение SUBSTRING. Требуется три аргумента: исходная строка, номер начального символа, количество символов.
 
* '''substring''': создаёт SQL-предложение SUBSTRING. Требуется три аргумента: исходная строка, номер начального символа, количество символов.
  
==== Функции для DDL-манипуляций ====
+
=== Функции для DDL-манипуляций ===
Обычно таблицы задаются в BE4 в декларативном стиле в файле structure.yaml, и новые таблицы добавляются автоматически при синхронизации. DDL-манипуляции из FTL-скриптов могут потребоваться для обновления таблиц, определённых в старых m4-модулях. В целом манипулировать схемой таблиц из FTL не рекомендуется.<br>
+
Обычно таблицы задаются в BE4 в декларативном стиле в файлах [[entity|сущностей]], и новые таблицы добавляются автоматически при синхронизации. DDL-манипуляции из FTL-скриптов могут потребоваться для обновления таблиц, определённых в старых m4-модулях. В целом манипулировать схемой таблиц из FTL не рекомендуется.
 +
 
 
* '''columnDef(columnName, columnDefinition)''': создаёт фрагмент SQL-предложения CREATE TABLE или ALTER TABLE для определения колонки. Первый параметр — имя колонки, второй — хэш с её свойствами. Свойства в точности такие же, как в structure.yaml. Пример:
 
* '''columnDef(columnName, columnDefinition)''': создаёт фрагмент SQL-предложения CREATE TABLE или ALTER TABLE для определения колонки. Первый параметр — имя колонки, второй — хэш с её свойствами. Свойства в точности такие же, как в structure.yaml. Пример:
** <code>ALTER TABLE test ADD COLUMN ${columnDef('myCol', {'type': 'BOOL', 'canBeNull': true})}</code> -> (в Postgres)<br>
+
** <code>ALTER TABLE test ADD COLUMN ${columnDef('myCol', {'type': 'BOOL', 'canBeNull': true})}</code> -> <br/> (в Postgres) <code>ALTER TABLE test ADD COLUMN mycol VARCHAR(3) CHECK(mycol IN ('no', 'yes') )</code>
ALTER TABLE test ADD COLUMN mycol VARCHAR(3) CHECK(mycol IN ('no', 'yes') )
+
 
* '''tableDef(tableName, columns[, indices])''': создаёт SQL-предложение для создания новой таблицы (если таблица уже существовала, старая удаляется). Первый параметр — имя таблицы, второй — хэш, где ключи — имена колонок, а значения — хэш со свойствами колонок (как в columnDef). Необязательный третий параметр: список индексов (ключи — имена индексов, значения — хэш, описывающий индекс так же, как в structure.yaml). Пример:
 
* '''tableDef(tableName, columns[, indices])''': создаёт SQL-предложение для создания новой таблицы (если таблица уже существовала, старая удаляется). Первый параметр — имя таблицы, второй — хэш, где ключи — имена колонок, а значения — хэш со свойствами колонок (как в columnDef). Необязательный третий параметр: список индексов (ключи — имена индексов, значения — хэш, описывающий индекс так же, как в structure.yaml). Пример:
** <code>${tableDef('uiSocialBlocks', {</code><br>
+
**
<code>  'CODE': {'type': 'VARCHAR(2)', 'primaryKey': true},</code><br>
+
${tableDef('uiSocialBlocks', {
<code>  'name': {'type': 'VARCHAR(250)'},</code><br>
+
'CODE': {'type': 'VARCHAR(2)', 'primaryKey': true},
<code>  'parentCode': {'type': 'VARCHAR(2)', 'canBeNull': true}</code><br>
+
'name': {'type': 'VARCHAR(250)'},
<code>})}</code>
+
'parentCode': {'type': 'VARCHAR(2)', 'canBeNull': true}
*** Результат в '''Postgres''':<br>
+
})}
DROP TABLE IF EXISTS uisocialblocks;<br>
+
*** Результат в '''Postgres''':
CREATE TABLE uisocialblocks (<br>
+
DROP TABLE IF EXISTS uisocialblocks;
code VARCHAR(2) NOT NULL PRIMARY KEY,<br>
+
CREATE TABLE uisocialblocks (
name VARCHAR(250) NOT NULL,<br>
+
code VARCHAR(2) NOT NULL PRIMARY KEY,
parentcode VARCHAR(2));
+
name VARCHAR(250) NOT NULL,
*** Результат в '''Oracle''':<br>
+
parentcode VARCHAR(2));
call drop_if_exists( 'uiSocialBlocks' );<br>
+
*** Результат в '''Oracle''':
CREATE TABLE UISOCIALBLOCKS (<br>
+
call drop_if_exists( 'uiSocialBlocks' );
CODE VARCHAR2(2 CHAR) NOT NULL PRIMARY KEY,<br>
+
CREATE TABLE UISOCIALBLOCKS (
NAME VARCHAR2(250 CHAR) NOT NULL,<br>
+
CODE VARCHAR2(2 CHAR) NOT NULL PRIMARY KEY,
PARENTCODE VARCHAR2(2 CHAR));<br>
+
NAME VARCHAR2(250 CHAR) NOT NULL,
 +
PARENTCODE VARCHAR2(2 CHAR));<br/>
 +
 
 +
[[Категория:Freemarker]]

Текущая версия на 15:31, 2 ноября 2015

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

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

  • 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));