Выполнять оператор SQL после каждого удаления - PullRequest
0 голосов
/ 02 мая 2019

Есть ли способ заставить jOOQ выполнять оператор SQL (в моем случае CHECKPOINT) после каждого DELETE?

В идеале был бы также способ указать таблицы, для которых это происходит.

СУБД, которую я использую (HSQLDB), не допускает этот оператор внутри триггера, в противном случае я бысделал это таким образом.

Ответы [ 2 ]

2 голосов
/ 02 мая 2019

Есть ли способ заставить jOOQ выполнять оператор SQL (в моем случае CHECKPOINT) после каждого удаления?

Самый простой способ продвижения вперед - использовать ExecuteListener, который проверяет, является ли текущий оператор оператором DELETE. Вы можете сделать это:

  • Либо с помощью регулярного выражения в сгенерированном SQL, если у вас также есть простые операторы SQL, которые не генерируются с помощью jOOQ DSL
  • Или с помощью проверки instanceof Delete на ExecuteContext.query(), если вы уверены, что используете только операторы jOOQ DSL.

Это для обнаружения выполнения такого оператора. Конечно, ваше последующее заявление может быть выполнено по-разному.

В идеале должен быть способ указать таблицы, для которых это происходит.

Это немного сложнее. Вы можете реализовать свой собственный VisitListener, который находит все операторы удаления в определенных таблицах.

Это работает, только если вы используете DSL API, если вы не хотите запустить VisitListener для запроса jOOQ, который вы анализируете на основе ваших простых операторов SQL, в случае чего вы могли бы также сделайте это для произвольных других утверждений. Предполагая, что анализатор может анализировать ваш SQL.

1 голос
/ 02 мая 2019

Вы должны иметь возможность выполнить «контрольную точку» изнутри jOOQ, используя оператор Execute, например:

//create connection

String sql = "use [MyDatabase] checkpoint ";
connection.createStatement().executeQuery(sql);

Сказав это, зачем запускать контрольную точку после каждой удаленной записи?Если вы беспокоитесь о том, что данные записываются на диск, просто запустите «контрольную точку», в которой вы выполняете все операции удаления.

...