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

Материал из DevelopmenOnTheEdge
Перейти к: навигация, поиск
Строка 10: Строка 10:
 
* replace(...) — REPLACE()
 
* replace(...) — REPLACE()
 
* substring(...) — SUBSTR() или SUBSTRING()
 
* substring(...) — SUBSTR() или SUBSTRING()
 +
* ?dateFromat — FORMAT_DATE()
 +
* ?dateTimeFormat — FORMAT_DATETIME()
 
* ?asInt — CAST(x AS BIGINT), TO_NUMBER(x)
 
* ?asInt — CAST(x AS BIGINT), TO_NUMBER(x)
 
* ?asVarChar — CAST(x AS CHAR), CAST(x AS VARCHAR), TO_CHAR(x)
 
* ?asVarChar — CAST(x AS CHAR), CAST(x AS VARCHAR), TO_CHAR(x)
Строка 26: Строка 28:
  
 
  CONCAT, COALESCE (IFNULL), COUNT, SUM, MAX, MIN, SUBSTR (SUBSTRING), LENGTH (LEN), UPPER, LOWER, CHR (CHAR), TO_CHAR, TO_NUMBER,  
 
  CONCAT, COALESCE (IFNULL), COUNT, SUM, MAX, MIN, SUBSTR (SUBSTRING), LENGTH (LEN), UPPER, LOWER, CHR (CHAR), TO_CHAR, TO_NUMBER,  
  REPLACE, LPAD, ROUND, TRUNC (TRUNCATE), IF, NOW.
+
  REPLACE, LPAD, ROUND, TRUNC (TRUNCATE), IF, NOW, FORMAT_DATE (=TO_CHAR(x, 'YYYY-MM-DD')), FORMAT_DATETIME (=TO_CHAR(x, 'YYYY-MM-DD HH24:MI:SS')).
  
 
=== Список всех поддерживаемых операций ===
 
=== Список всех поддерживаемых операций ===
Строка 36: Строка 38:
 
Использование этих возможностей скорее всего приведёт к ошибке валидации. В некоторых случаях к некорректному переформатированию в другом движке.
 
Использование этих возможностей скорее всего приведёт к ошибке валидации. В некоторых случаях к некорректному переформатированию в другом движке.
  
* Форматирование даты
+
* Форматирование даты на русском
 
* Функции для извлечения полей из даты
 
* Функции для извлечения полей из даты
 
* BE-теги <if>/<unless> не в списке колонок
 
* BE-теги <if>/<unless> не в списке колонок
 
* ?asPK, genericRef, joinGenericRef, indexOf
 
* ?asPK, genericRef, joinGenericRef, indexOf

Версия 17:45, 25 ноября 2015

BE-SQL — диалект SQL, который поддерживается BeanExplorer SQL Parser. Поддерживаются только запросы SELECT. Больше всего он похож на PostgreSQL, но некоторые конструкции из других диалектов тоже поддерживаются. Он также должен понимать различные BE-специфичные теги вроде <if>, <unless> и т. д. В данный момент находится в разработке: не все реальные запросы из проектов успешно разбираются BE-SQL.

Соответствие FreeMarker-конструкций и BE-SQL конструкций:

  • chr(...) — CHR() или CHAR()
  • concat(...) — CONCAT() или ||
  • coalesce(...) — COALESCE() или IFNULL()
  • length(...) — LENGTH() или LEN()
  • lpad(...) — LPAD()
  • replace(...) — REPLACE()
  • substring(...) — SUBSTR() или SUBSTRING()
  •  ?dateFromat — FORMAT_DATE()
  •  ?dateTimeFormat — FORMAT_DATETIME()
  •  ?asInt — CAST(x AS BIGINT), TO_NUMBER(x)
  •  ?asVarChar — CAST(x AS CHAR), CAST(x AS VARCHAR), TO_CHAR(x)
  •  ?lower — LOWER()
  •  ?upper — UPPER()
  •  ?quote — просто пишите в "двойных кавычках" или в `обратных кавычках`, оба варианта должны сработать и транслироваться при необходимости
  • currentDateTime — CURRENT_DATETIME
  • currentDate — CURRENT_DATE
  • fromFakeTable — FROM DUAL или можно не писать FROM вообще

Для ограничения количества записей можно просто писать SELECT ... LIMIT 1: это транслируется в соответствующий диалект SQL.

Список всех поддерживаемых SQL-функций

В скобках указываются синонимы

CONCAT, COALESCE (IFNULL), COUNT, SUM, MAX, MIN, SUBSTR (SUBSTRING), LENGTH (LEN), UPPER, LOWER, CHR (CHAR), TO_CHAR, TO_NUMBER, 
REPLACE, LPAD, ROUND, TRUNC (TRUNCATE), IF, NOW, FORMAT_DATE (=TO_CHAR(x, 'YYYY-MM-DD')), FORMAT_DATETIME (=TO_CHAR(x, 'YYYY-MM-DD HH24:MI:SS')).

Список всех поддерживаемых операций

+, -, *, /, >, <, >=, <=, = (или ==), != (или <>), || (конкатенация строк), OR, AND (или &&), NOT (или !), XOR, LIKE.

Что точно не работает пока

Использование этих возможностей скорее всего приведёт к ошибке валидации. В некоторых случаях к некорректному переформатированию в другом движке.

  • Форматирование даты на русском
  • Функции для извлечения полей из даты
  • BE-теги <if>/<unless> не в списке колонок
  •  ?asPK, genericRef, joinGenericRef, indexOf