Built-ins — различия между версиями
Материал из DevelopmenOnTheEdge
								
												
				Asko  (обсуждение | вклад)  | 
				Asko  (обсуждение | вклад)   | 
				||
| Строка 1: | Строка 1: | ||
| − | [http://freemarker.org/docs/ref_builtins_alphaidx.html Built-ins] во Freemarker — это встроенные суффиксы к значениям (через вопросительный знак), которые выполняют какие-либо преобразования. К примеру, ${"<test>"?[http://freemarker.org/docs/ref_builtins_string.html#ref_builtin_html html]} вернёт   | + | [http://freemarker.org/docs/ref_builtins_alphaidx.html Built-ins] во Freemarker — это встроенные суффиксы к значениям (через вопросительный знак), которые выполняют какие-либо преобразования. К примеру, ${"<test>"?[http://freemarker.org/docs/ref_builtins_string.html#ref_builtin_html html]} вернёт <code><test></code>.  | 
Мы определили ряд дополнительных built-ins (хотя разработчики Freemarker против этого) для упрощения работы именно в контексте BeanExplorer.  | Мы определили ряд дополнительных built-ins (хотя разработчики Freemarker против этого) для упрощения работы именно в контексте BeanExplorer.  | ||
Версия 15:57, 22 августа 2014
Built-ins во Freemarker — это встроенные суффиксы к значениям (через вопросительный знак), которые выполняют какие-либо преобразования. К примеру, ${"<test>"?html} вернёт <test>.
Мы определили ряд дополнительных built-ins (хотя разработчики Freemarker против этого) для упрощения работы именно в контексте BeanExplorer.
-  ?str — превратит строку в sql-строку, используя особенности текущего sql-диалекта. Если аргумент — специальный объект null, то результатом будет строка NULL. Аналог Utils.safestr(connector, text, true). Примеры (для MySQL, в других СУБД результат может отличаться):
-  
${"test"}-> test -  
${"test"?str}-> 'test' -  
${null?str}-> NULL -  
${"test'quotes'"?str}-> 'test''quotes''' -  
${concat('col1', ' - '?str, 'col2')}-> CONCAT( col1, ' - ', col2 ) 
 -  
 -  ?quote — обернёт в кавычки идентификатор, если это необходимо. Пример (для MySQL):
-  
SELECT ${'___whoModified'?quote} FROM myTable-> SELECT `___whoModified` FROM myTable 
 -  
 
-  ?asVarchar — добавит преобразование SQL-числа к строке. Примеры (для MySQL):
-  
${"ID"?asVarchar}-> CAST( ID AS CHAR ) -  
${concat('ID = '?str, 'ID'?asVarchar)}-> CONCAT( 'ID = ', CAST (ID AS CHAR) ) 
 -  
 - ?asDate — добавит преобразование SQL-строки к дате.
 - ?asInt — добавит преобразование SQL-строки к числу.
 -  ?asPK — добавит преобразование к типу Primary Key. Пример (для MySQL):
-  
${'mycolumn'?asPK}-> CAST( mycolumn AS BIGINT ) 
 -  
 - ?upper — добавит SQL для преобразования в верхний регистр
 - ?upperFirst — добавит SQL для преобразования первого символа в верхний регистр, а последующих — в нижний.
 - ?lower — добавит SQL для преобразования в нижний регистр
 - ?idCase — добавит SQL для преобразования в регистр идентификаторов базы данных (если требуется)
 - ?dateFormat — добавит SQL для форматирования даты в виде YYYY-MM-DD
 - ?dateTimeFormat — добавит SQL для форматирования даты и времени в виде YYYY-MM-DD HH:MM:SS
 - ?year — создаёт SQL для извлечения года из даты
 - ?yearStart — создаёт SQL для получения первого дня года
 - ?monthStart — создаёт SQL для получения первого дня месяца
 -  ?orEmpty — сокращённый вариант для coalesce(arg, ''?str). Пример (для MySQL):
-  
${concat('nameSpace'?orEmpty, 'name'?orEmpty)}-> CONCAT( COALESCE(nameSpace,''),COALESCE(name,'') ) 
 -  
 
-  ?roles — развернёт список ролей и групп ролей в просто список ролей через запятую без повторов. Пусть в проекте определены группы @Managers (Manager, Admin) и @Users (User, Manager). Тогда:
-  
${'@Managers,@Users,Guest'?roles}-> 'Admin,Guest,Manager,User' 
 -  
 
Совет: используйте скобки, если хотите применить суффикс к сложному выражению. Например, для запросов второго уровня:
SELECT ${('SELECT '+concat('name', ' = '?str, 'value') + ' FROM table1')?str} AS "Data;<sql/>" FROM table2
Альтернатива такому синтаксису: использовать предопределённый макрос <@str>:
SELECT <@_str>SELECT ${concat('name', ' = '?str, 'value')} FROM table1</@> AS "Data;<sql/>" FROM table2
Тут дело вкуса.