2016-07-22 4 views
0

У меня есть база данных, которая использует движок plv8 и хранит процедуры, написанные в coffescript.Как вызвать дополнительный SQL перед каждым запросом?

Когда я использую jDBI, чтобы вызвать эти процедуры, после того, как я открываю соединение я должен работать:

SET plv8.start_proc = 'plv8_init'; 

Могу ли я сделать подобную вещь при использовании JOOQ с javax.sql.DataSource?

ответ

0

Один из вариантов - использовать ExecuteListener. Вы можете подключить в жизненный цикл выполнения запроса путем реализации методы executeStart():

new DefaultExecuteListener() { 
    @Override 
    public void executeStart(ExecuteContext ctx) { 
     DSL.using(ctx.connection()).execute("SET plv8.start_proc = 'plv8_init'"); 
    } 
} 

Теперь, поставить выше ExecuteListener ваши Configuration, и вы сделали.

Смотрите также руководство: http://www.jooq.org/doc/latest/manual/sql-execution/execute-listeners

+0

Спасибо Попробую что. Еще кое-что. Когда я просто делаю выборку («SET plv8.start_proc =« plv8_init »; select * from my_stored_proc()»), он генерирует и исключает, как я бы не добавил, что plv8.start_proces. Другими словами, он ведет себя так, как будто бы разделил оператор; и запускать каждый отдельно. В любом случае, я попробую сегодня ваше решение. – bodziec

+0

@bodziec: вы можете добиться желаемого поведения, используя [анонимные кодовые блоки PostgreSQL] (https://www.postgresql.org/docs/9.4/static/sql-do.html), но я подозреваю, что это будет довольно немного навязчивым и, возможно, изменить исход ваших запросов –

Смежные вопросы