如何使用 quill 在运行时定义 table 名称
How to define table name at runtime using quill
我是 quill 的新手,我试图在运行时定义 table,但我遇到了编译错误。有什么解决方法吗?或者它根本不可能使用 quill ?
代码示例是:
case class ExampleCaseClass(id : String, version : String)
class Example (db: CassandraAsyncContext[SnakeCase] , table : String ) {
import db._
def selectByVarId = quote {
(id: String, version: String) =>
querySchema[ExampleCaseClass](table).filter(example => (example.id == id) && (example.version == version))
}
}
和错误:
Error:(114, 36) Tree Error:(124, 25) Tree 'Example.this.db.querySchema[***.ExampleCaseClass](Example.this.table)' can't be parsed to 'Ast'
def selectById = quote {
从 quill 3.+ 使用 dynamicQuerySchema[Person]("Person")
dynamic-query-api
import io.getquill.{Literal, MirrorSqlDialect, SqlMirrorContext}
import java.time.LocalDate
final case class PersonId(value: Int) extends AnyVal
final case class Person(
id: PersonId,
firstName: String,
lastName: String,
birthDate: LocalDate)
val context = new SqlMirrorContext(MirrorSqlDialect, Literal)
val person = "Person"
val person2 = "Person2"
import context._
val personContext = dynamicQuerySchema[Person](person)
val person2Context = dynamicQuerySchema[Person](person2)
val query = translate(personContext.filter(_.id == lift(PersonId(1))))
val query2 = translate(person2Context.filter(_.id == lift(PersonId(1))))
println(s"$query")
println(s"$query2")
输出
SELECT v0.id, v0.firstName, v0.lastName, v0.birthDate, v0.addressId FROM Person v0 WHERE v0.id = 1
SELECT v0.id, v0.firstName, v0.lastName, v0.birthDate, v0.addressId FROM Person2 v0 WHERE v0.id = 1
我是 quill 的新手,我试图在运行时定义 table,但我遇到了编译错误。有什么解决方法吗?或者它根本不可能使用 quill ? 代码示例是:
case class ExampleCaseClass(id : String, version : String)
class Example (db: CassandraAsyncContext[SnakeCase] , table : String ) {
import db._
def selectByVarId = quote {
(id: String, version: String) =>
querySchema[ExampleCaseClass](table).filter(example => (example.id == id) && (example.version == version))
}
}
和错误:
Error:(114, 36) Tree Error:(124, 25) Tree 'Example.this.db.querySchema[***.ExampleCaseClass](Example.this.table)' can't be parsed to 'Ast'
def selectById = quote {
从 quill 3.+ 使用 dynamicQuerySchema[Person]("Person")
dynamic-query-api
import io.getquill.{Literal, MirrorSqlDialect, SqlMirrorContext}
import java.time.LocalDate
final case class PersonId(value: Int) extends AnyVal
final case class Person(
id: PersonId,
firstName: String,
lastName: String,
birthDate: LocalDate)
val context = new SqlMirrorContext(MirrorSqlDialect, Literal)
val person = "Person"
val person2 = "Person2"
import context._
val personContext = dynamicQuerySchema[Person](person)
val person2Context = dynamicQuerySchema[Person](person2)
val query = translate(personContext.filter(_.id == lift(PersonId(1))))
val query2 = translate(person2Context.filter(_.id == lift(PersonId(1))))
println(s"$query")
println(s"$query2")
输出
SELECT v0.id, v0.firstName, v0.lastName, v0.birthDate, v0.addressId FROM Person v0 WHERE v0.id = 1
SELECT v0.id, v0.firstName, v0.lastName, v0.birthDate, v0.addressId FROM Person2 v0 WHERE v0.id = 1