Slick 提供 table 架构名称参数

Slick provide table schema name parameter

如果我对模式名称进行硬编码,我可以创建一个 Slick table,但是我如何将它作为参数传递?

下面的代码有效,但架构名称是硬编码的。由于我使用一个模式作为我的开发环境,并使用不同的模式进行生产,所以我想传入模式名称作为参数。但是如果我在构造函数中添加第二个参数,我就不能再实例化class,因为我不知道如何获取slick.lifted.Tag的实例。 (当构造函数只有一个参数 - Tag - 值由宏自动提供。)

class SomeTableTbl(tag: Tag) extends Table[SomeRecord](tag, _schemaName = Some("MY_DEV_SCHEMA"), _tableName = "SOME_TABLE") {
  def record_id: Rep[Long] = column[Long]("RECORD_ID", O.PrimaryKey, O.AutoInc)

  def column_one: Rep[String] = column[String]("COLUMN_ONE")

  def column_two: Rep[String] = column[String]("COLUMN_TWO")

  def column_six: Rep[String] = column[String]("COLUMN_SIX")

  override def * : ProvenShape[SomeRecord] = (record_id, column_one, column_two, column_six) <> (SomeRecord.tupled, SomeRecord.unapply)
}

// works, "tag: slick.lifted.Tag" param is provided by some macro
lazy val tblQuery: TableQuery[SomeTableTbl] = TableQuery[SomeTableTbl]
// Now add constructor parameter: SomeTableTbl(tag: Tag, schemaName: String)
lazy val tblQuery: TableQuery[SomeTableTbl] = TableQuery[SomeTableTbl]("some_other_schema_name")
// Error: not enough arguments for constructor

如何向构造函数提供 schemaName 参数并创建此 class 的实例? 使用 Scala 2.12、Slick 3.3.0

对象 TableQuery 有两种方法变体 applyOne of them accepts a function from a tag to an instance of a table,所以以下应该有效:

lazy val tblQuery: TableQuery[SomeTableTbl] =
  TableQuery(tag => new SomeTableTbl(tag, "other_schema_name"))