Как пропустить неподдерживаемые синтаксические/коммерческие функции с помощью парсера JOOQ?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как пропустить неподдерживаемые синтаксические/коммерческие функции с помощью парсера JOOQ?

Сообщение Anonymous »

Я использую синтаксический анализатор JOOQ SQL для обработки некоторых операторов CREATE TABLE в файлах DDL, которые я не могу изменить самостоятельно. Эти файлы содержат различные операторы, такие как CREATE FUNCTION, которые мне не нужны.
Я пробовал использовать базу данных H2 для выполнения указанных файлов DDL, а затем получать информацию через мета / информационную схему, но некоторые из этих файлов DDL используют неподдерживаемый синтаксис для H2.
В настоящее время я использую такой синтаксический анализатор:

Код: Выделить всё

String sql = """
create function fn_1(
param1 text,
param2 text
) returns boolean as $$
select true
$$ language sql immutable;

create table if not exists example (
id bigint not null
);

create or replace function fn_2(
param1 numeric,
param2 numeric
) returns boolean as $$
select true
$$ language sql immutable;
"""
Settings settings = new Settings();
settings.setParseIgnoreCommercialOnlyFeatures(true);
settings.setParseUnsupportedSyntax(ParseUnsupportedSyntax.IGNORE);
Parser parser = DSL.using(dialect, settings).parser();
parser.parse(sql);
Я понимаю, что синтаксический анализ функции создания является коммерческой функцией, поэтому я установил для ParseIgnoreCommercialOnlyFeatures значение true, но parser.parse(sql) по-прежнему выдает ошибку, сообщая, что он не может проанализировать fn_1:

Код: Выделить всё

org.jooq.impl.ParserException: ALIAS, FUNCTION, GENERATOR, GLOBAL TEMPORARY TABLE, INDEX, OR ALTER, OR REPLACE, PRIVATE SYNONYM, PROCEDURE, PUBLIC ALIAS, PUBLIC SYNONYM, SCHEMA, SEQUENCE, SYNONYM, TABLE, TEMPORARY TABLE, TRIGGER, TYPE, UNIQUE INDEX, or VIEW expected: [1:8] create [*]function fn_1(
param1 text,
param2 text
) returns boolean as $$
select tru...
Я хотел бы спросить, есть ли способ использовать синтаксический анализатор для извлечения только операторов создания таблицы, игнорируя все остальное. Я прочитал здесь документацию DDLDatabase, в которой упоминается пропуск неподдерживаемого контента через комментарии, но мне понадобится другой механизм для пропуска неподдерживаемого контента, потому что, как уже было сказано, я не могу изменять эти файлы DDL.
Заранее спасибо

Подробнее здесь: https://stackoverflow.com/questions/797 ... ooq-parser
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»