Built-ins — различия между версиями

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

Текущая версия на 17:34, 9 октября 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
  • ?dateFormatRus — добавит SQL для форматирования даты в виде DD.MM.YYYY
  • ?dateTimeFormat — добавит SQL для форматирования даты и времени в виде YYYY-MM-DD HH:MM:SS
  • ?year — создаёт SQL для извлечения года из даты
  • ?month — создаёт SQL для извлечения месяца из даты
  • ?day — создаёт 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

Тут дело вкуса.