Я играл с 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"
"Обычный" способ генерации SQL для поля с псевдонимом - это то, что вы видели. Способ ссылки на поле, например, когда он помещен в предложение ORDER BY
.
"Исключительный" способ генерации SQL для поля с псевдонимом - это когда он помещается в предложение SELECT
, то есть когда он объявляет себя.
Все реализации QueryPart.toString()
генерируют "нормальную" строку SQL. Если вы явно хотите сгенерировать объявление поля, как в предложении SELECT
, вы можете напрямую использовать API-интерфейс jOOQ:
println(
DSL.using(SQLDialect.ORACLE)
.renderContext()
.declareFields(true)
.render(b)
)