jOOQ:如何查看已有别名的字段?

时间:2015-04-01 19:12:35

标签: java scala jooq

我一直在玩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"

1 个答案:

答案 0 :(得分:1)

"正常"为您的别名字段生成SQL的方法是您已经看到的方式。引用字段的方式,例如当放入ORDER BY条款时。

"特殊"为别名字段生成SQL的方法是将它放在SELECT子句中,即当它声明自己时。

所有QueryPart.toString()实施都会生成"正常" SQL字符串。如果您明确要在SELECT子句中生成字段声明,则可以直接使用jOOQ's rendering API

println(
  DSL.using(SQLDialect.ORACLE)
     .renderContext()
     .declareFields(true)
     .render(b)
)