gpt4 book ai didi

scala - 从表访问数据库列名?

转载 作者:行者123 更新时间:2023-12-04 07:54:33 27 4
gpt4 key购买 nike

假设我有 a table :

object Suppliers extends Table[(Int, String, String, String)]("SUPPLIERS") {
def id = column[Int]("SUP_ID", O.PrimaryKey)
def name = column[String]("SUP_NAME")
def state = column[String]("STATE")
def zip = column[String]("ZIP")
def * = id ~ name ~ state ~ zip
}

表的数据库名称

可以通过以下方式访问表的数据库名称: Suppliers.tableName这是由 Scaladoc on AbstractTable 支持的.

例如,上表的数据库名称是“SUPPLIERS”。

列的数据库名称

翻阅 AbstractTable , getLinearizedNodesindexes看起来很有希望。但是,它们的字符串表示中没有列名。

我认为 * 表示 "all the columns I'm usually interested in." *MappedProjection , 具有以下签名:
final case class MappedProjection[T, P <: Product](
child: Node,
f: (P) ⇒ T,
g: (T) ⇒ Option[P])(proj: Projection[P])
extends ColumnBase[T] with UnaryNode with Product with Serializable
*.getLinearizedNodes包含一个巨大的数字序列,我意识到此时我只是在对 API 中的所有内容进行蛮力检查,以便可能找到 String 中的列名。

以前是否有人也遇到过这个问题,或者有人能让我更好地了解 MappedProjection 的工作原理吗?

最佳答案

它要求您依赖 Slick 内部结构,这可能会在不同版本之间发生变化,但这是可能的。以下是 Slick 1.0.1 的工作原理:您必须通过 FieldSymbol .然后你可以像 columnInfo(driver: JdbcDriver, column: FieldSymbol): ColumnInfo 一样提取你想要的信息可以。

获取 FieldSymbol来自 Column您可以使用 fieldSym(node: Node): Option[FieldSymbol] fieldSym(column: Column[_]): FieldSymbol .

关于scala - 从表访问数据库列名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19991542/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com