Built-ins

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

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

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