В нашем приложении пользователь может ввести код SQL для извлечения данных из базы данных NexusDB.Мы хотим определить метаданные результата такого запроса, фактически не выполняя запрос.Мы используем метаданные, чтобы определить количество полей и тип данных каждого результирующего поля.
[дополнение] Мы используем эту функцию как часть пользовательского процесса преобразования.Фактическое преобразование выполняется позже в процессе, подобном пакетному, но нам нужны метаданные заранее, чтобы пользователь мог указать при преобразовании дополнительные характеристики или модификации поля, такие как применение плагинов, создание родительско-дочерних отношений и т. Д. [/ Дополнение]
До сих пор мы делали это, просто добавляя WHERE FALSE
к запросу SQL или заменяя все уже существующие операторы WHERE
на WHERE FALSE AND
.Но, конечно, мы должны проанализировать весь SQL, чтобы определить точное местоположение правильного предложения where для корректировки, принимая во внимание комментарии, вложенные SELECTS, JOINs и другие предложения.Это становится довольно сложно :-(
И еще один недостаток в том, что большую часть времени выполнение запроса может все еще занимать много времени, хотя мы заранее знаем, что набор результатов будет пустым.
Нам было интересно, есть ли другой способ достижения этого.
т.е. объект TQuery должен иметь собственный синтаксический анализатор, разделяющий оператор SQL на его различные предложения. Если бы мы могли изменитьпредложение where непосредственно перед выполнением, нам не нужно было бы выполнять синтаксический анализ самим, но мы немного беспокоимся о том, чтобы погрузиться во внутренности объекта TQuery, просто чтобы узнать, что нет способа использовать его так, как мы хотим.
Кто-нибудь может посоветовать это?