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