jOOQ: как посмотреть поле с псевдонимом?

1

Я играл с jOOQ (в Scala) и был бы признателен за ответ (казалось бы, простой) вопрос: как я могу просмотреть поле, которое было псевдонимом?

Надеюсь, следующий пример иллюстрирует мою проблему:

import org.jooq.impl._
import org.jooq.impl.DSL._

val a = field("a", SQLDataType.DOUBLE)
val b = a.as("b")

// prints "b" 
println(b)

// however, I would like it to print a "b" as in
select(b)

Редактировать:

Я нашел случай, когда ответ, предоставленный @Lukas Eder, не работает. Модифицированный ответ ниже, для которого будет рассмотрен следующий случай: (приветствия):

val f = field("amount", SQLDataType.DOUBLE)
val p = field("partition", SQLDataType.INTEGER)
val o = field("order_by", SQLDataType.DATE)

// prints as expected
val r = coalesce(sum(f).over().partitionBy(p).orderBy(o), 0)

// coalesce(
//   sum(amount) over (partition by partition order by order_by asc), 
//   0)

val a = r.as("test")

// question mark instead of 0
println(
  DSL.using(SQLDialect.POSTGRES)
   .renderContext()
   .declareFields(true)
   .render(a)
)

//  coalesce(sum(amount) over (partition by partition order by order_by asc), ?) as "test"
Теги:
jooq

1 ответ

1

"Обычный" способ генерации SQL для поля с псевдонимом - это то, что вы видели. Способ ссылки на поле, например, когда он помещен в предложение ORDER BY.

"Исключительный" способ генерации SQL для поля с псевдонимом - это когда он помещается в предложение SELECT, то есть когда он объявляет себя.

Все реализации QueryPart.toString() генерируют "нормальную" строку SQL. Если вы явно хотите сгенерировать объявление поля, как в предложении SELECT, вы можете напрямую использовать API-интерфейс jOOQ:

println(
  DSL.using(SQLDialect.ORACLE)
     .renderContext()
     .declareFields(true)
     .render(b)
)
  • 0
    Спасибо Лукас - очень полезно :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню