Генерация запроса в неправильном формате

#java #sql #jooq

#java #sql #jooq

Вопрос:

У меня проблема с фрагментом кода, который генерируется (выводится) в неправильном формате и не запрашиваемой форме:

Я хотел сгенерировать запрос / sql с внешним ключом без «ALTER TABLE NameOfTab ADD», поэтому я использовал этот фрагмент кода:

 DSL.constraint(DSL.name("fk_example"))
   .foreignKey("id1","id2")
   .references("referecnedTableName", "referencedColumn1", "referencedColumn2");
  

И здесь возникает проблема, потому что он возвращает в виде строки эту форму:

 constraint "fk_example"
foreign key (
"id1", 
"id2"
)
references "referecnedTableName" (
"referencedColumn1", 
"referencedColumn2"
)
  

Ожидаемый результат:

 constraint fk_example foreign key (id1, id2) 
references referecnedTableName (referencedColumn1, referencedColumn2)
  

Что-то подобное в правильном формате ИЗМЕНЯЕТ таблицу:

 ctx.alterTable(tableName)
   .add(
      DSL.constraint(DSL.name("fk_example"))
         .foreignKey("id1","id2")
         .references("referecnedTableName","referencedColumn1","referencedColumn2"))
   .getSQL(ParamType.INLINED));
  

Но он возвращает его с «alter table t3 add … » и я не хочу часть «alter table».

Ответ №1:

Вы должны использовать DSLContext.render(QueryPart) вместо QueryPart.toString() . toString() Поведение по умолчанию заключается в вызове render() с некоторым неопределенным значением по умолчанию Settings , включая генерацию этих идентификаторов в двойных кавычках, которые, как я подозреваю, вы не хотите иметь.

Комментарии:

1. Это то, чего я хотел 😉 спасибо, я уже делаю это, удаляя часть alter table с совпадениями регулярных выражений : D но это лучше 🙂