QueryParser не анализирует оператор sql с указанными в кавычках идентификаторами, отличными от ansi-quoted - PullRequest
0 голосов
/ 25 марта 2020

Я использую org.teiid.query.parser.QueryParser для анализа строки SQL в объекте Query. Он отлично работает для идентификаторов в кавычках (двойные кавычки). Однако, это вызывает ошибку при разборе идентификаторов, заключенных в квадратные скобки, одинарные кавычки и обратные кавычки.

Получение приведенной ниже ошибки: java .lang.Exception: org.teiid.api.exception.query.QueryParserException: TEIID31100 Ошибка синтаксического анализа: Обнаружено "select [*] [[*] dbo.empid]" в строке 1, столбец 8. Ожидал: «символ» | "дата" | "время" | "метка времени" | "литой" | "конвертировать" | "все" | "любой" | "массив" | "array_agg" ...

Вот как я его использую: Query query = (Query) QueryParser.getQueryParser (). parseCommand (sqlString, new ParseInfo ());

The ParseInfo Параметр в приведенном выше операторе имеет свойство ANSI_QUOTED_DEFAULT как true, благодаря чему он может анализировать строку sql с идентификаторами в двойных кавычках. Например: выберите «dbo.empid» из «dbo». «Emp» «Ex»

Мое приложение требует для анализа SQL строк с другими типами цитирования, как указано ниже.

  • Квадратные скобки: выберите [dbo.empid] из [dbo]. [Emp] [Ex]

  • Одинарные кавычки: выберите 'dbo.empid' From 'dbo '.'Emp' 'Ex'

  • Backticks: Выбрать dbo.empid Из dbo. Emp Ex

Анализатор запросов не выполняет синтаксический анализ трех вышеприведенных операторов sql.

Есть ли какая-либо настройка свойства teiid или любая другая конфигурация teiid, необходимая в коде для разрешения любого типа цитирования?

1 Ответ

0 голосов
/ 26 марта 2020

Есть ли какая-либо настройка свойства teiid или любая другая конфигурация teiid, необходимая в коде, чтобы разрешить любой тип цитирования?

Краткий ответ в настоящее время - нет. Поддержка парсинга идентификаторов в кавычках - это просто стандартные двойные кавычки ANSI. Для строковых литералов, как вы уже видели, это одинарная кавычка по умолчанию или свойство, которое допускает двойные кавычки.

Если есть определенный диалект sql, который вы пытаетесь получить поддержку Teiid, вы можете увидеть, есть ли проблема JIRA уже открыта для этого - https://issues.redhat.com/projects/TEIID/issues

Скорее всего, вам потребуется больше синтаксиса, чем просто альтернативное цитирование.

...