Как заключить значения параметров в скобки при использовании jOOq?

Я использую jOOq для написания запросов, за исключением того, что я использую конкретный тип SQL поставщика ... чтобы быть конкретным гибким поиском. Основное различие между SQL и flexiSearch заключается в том, что значения параметров заключены в фигурные скобки. например

SELECT * FROM {Product} WHERE {code} LIKE ‘%al%’

Итак, я пытаюсь заставить jOOq автоматически перехватывать процедуру построения запроса, чтобы включить скобки.

Просматривая документы, кажется, что я должен реализовать какой-то прослушиватель выполнения? Но я не уверен, что делать после этого. Спасибо


person user1272052    schedule 12.11.2018    source источник
comment
Кроме того, вам необходимо: 1. Поместите фигурные скобки вокруг таблиц и их соединений. 2. Закрепите подзапрос двойными фигурными скобками. чтобы обеспечить соответствие формата запросов.   -  person Farrukh Chishti    schedule 13.11.2018


Ответы (1)


Вы действительно могли бы реализовать ExecuteListener, который заменяет

  • каждый нечетный " на { и каждый четный " на } с использованием любого диалекта (будьте осторожны с синтаксической двусмысленностью)
  • каждый нечетный ` на { и каждый четный ` на } с использованием диалекта MySQL
  • каждые [ по { и каждые ] по } с использованием диалекта SQL Server

Но из того, что я могу сказать, это не единственное, что вы будете исправлять в сгенерированном SQL, так что вы можете также форкнуть jOOQ Open Source Edition и самостоятельно исправить соответствующий код.

Остерегайтесь, jOOQ на самом деле не поддерживает этот диалект. Это не единственное, с чем вы столкнетесь. Например, вы можете попытаться объединить подзапросы сопоставления с шаблоном в ExecuteListener и заключить их в {{ ... }}, но этого также было бы намного проще достичь, установив патч jOOQ напрямую.

person Lukas Eder    schedule 13.11.2018
comment
Привет, @Lukas, спасибо за ответ, это было действительно проницательно. Я попытался переопределить DefaultVisitLister (мне нужно отобразить строку sql), но я изо всех сил пытаюсь заменить кавычки скобками с использованием контекста рендеринга. Это то, что я пробовал _2 _], [); `но я получаю NullPointer - person user1272052; 15.11.2018
comment
@ user1272052: Я буду рад ответить на новые вопросы с примерами, показывающими, что вы сделали, и дополнительной информацией о проблеме, с которой вы столкнулись. - person Lukas Eder; 16.11.2018