如何使用新的 Slick 2.0 HList 克服 22 列限制?

2024-02-04

我目前正在编写 Slick 代码来针对具有两个表 > 22 列的旧模式。我如何使用新的 HList 代码 http://slick.typesafe.com/doc/2.0.0-M3/api/#scala.slick.collection.heterogenous.HList?我已经让 2.0-M3 在 Scala 2.10.3 下的其他方面工作得很好。 这是我当前在案例类/元组中使用的语法。我会做什么使用文档中提到的新 HList? http://slick.typesafe.com/doc/2.0.0-M3/lifted-embedding.html

  case class Joiner(
      id: Int,
      name: Option[String],
      contact: Option[String]
  )

  class Joiners(tag: Tag) extends Table[Joiner](tag, "joiner") {
    def id = column[Int]("id", O.PrimaryKey, O.AutoInc, O.DBType("int(11)"))
    def name = column[Option[String]]("name", O.DBType("varchar(255)"))
    def contact = column[Option[String]]("contact", O.DBType("text"))
    def * = (id, name.?, contact.?) <> (Joiner.tupled, Joiner.unapply)
  }
  val joiners = TableQuery[Joiners]

我在示例中没有看到任何内容,只有在新更新的文档中简短提及。我是 Scala 和 Slick 的新手。


定义

对于 Scala >= 2.10.4-RC2(也由 Slick 2.0.0 代码生成器生成):

import scala.slick.collection.heterogenous._
import syntax._
class Joiners(tag: Tag) extends Table[
    Int :: Option[String] :: Option[String] :: HNil
](tag, "joiner") {
  ...
  def * = id :: name :: contact :: HNil
}

上述情况导致 Scala 2.10.3 / 2.10.4-RC1 中的编译时间呈指数级增长。由于编译时间极长,对于超过 26 列不可行。

Scala

import scala.slick.collection.heterogenous._
import syntax._
class Joiners(tag: Tag) extends Table[
    HCons[Int, HCons[Option[String], HCons[Option[String], HNil]]]
](tag, "joiner") {
  ...
  def * = id :: name :: contact :: HNil
}

我们用 30-40 根色谱柱进行测试,没有出现任何问题。

目前 Scala 2.10.4-RC2 中似乎仍然存在偶尔出现编译错误的问题,看起来会在即将发布的 2.10.4-RC3 中得到修复。看https://issues.scala-lang.org/browse/SI-8146 https://issues.scala-lang.org/browse/SI-8146

用法示例

Joiners.run.map( r => r(2) ) // Gets column contact. It's typesafe. .apply is a macro. Only works for literals not for variables as positions.

使用 22,而不映射到案例类(Scala 2.10 中的最大字段限制为 22)。

另外:不要使用 O.Nullable。使用column[Option[String]]反而。它推断可为空性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用新的 Slick 2.0 HList 克服 22 列限制? 的相关文章

随机推荐

  • 如何检查对象是否具有存储的属性?

    我需要检查对象的类是否有可用于赋值的成员 假设有一个类 class MyClass NSObject var myVar AnyObject 我尝试了这种 objC 风格 但 Swift 中的属性是不同的野兽 第二行总是返回 false l
  • 使用 Gradle 选择带有 Branchname 的版本作为分类器

    我正在评估我们项目的 gradle 我们有多个包含小型实用程序库的小项目 大多数项目都位于额外的存储库中 无法使用共享的构建脚本 当跨多个项目工作时 使用相同的功能分支 我已经设法让 gradle 将分支名称作为分类器放入创建的 Maven
  • Tree 实现 Foldable FoldMap 时,Foldr/Foldl 是免费的吗?

    我是 Haskell 的初学者 正在从 Learn You a Haskell 学习 有件事我不明白Tree实施Foldable instance F Foldable Tree where foldMap f Empty mempty f
  • 使用 Visual Studio 2008 使用 C++ 连接到 MS Access 数据库

    我需要一些认真的帮助来尝试使用 VS 2008 的 C 连接到 Access 数据库 我已经在 C 中做到了这一点 但我无法在 C 中弄清楚这一点 我需要使用 C 进行连接 因为我正在使用预编译的 C 代码获取数据 我真的很感激一些帮助 谢
  • 在WPF应用程序中动态创建按钮列表[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我即将开发我的第一个 WPF 我想获得按钮列表 这些按钮由 WPF 顶部的一个 添加 按钮生成 因此 当我按 添加 时 列表中会出现一
  • 任务控制选项 - 自定义条件 - 在先前失败或超时时运行任务

    是否有一个选项可以设置自定义条件来测试上一个任务是否失败或超时 目前 我正在使用Only when a previous task has failed当任务失败时它会起作用 如果任务超时 则不会将其视为错误并会跳过 那么我需要一个自定义条
  • Dart 确保类中的可选布尔值不为空

    由于它是一个可选值 有时会为空 那么如何避免它抛出错误呢 这是唯一的方法吗 class QText extends StatelessWidget QText this text this size this bold final Stri
  • 将第二个项目添加到堆栈窗格时,第一个项目会丢失其 Event/MouseOn。为什么?我该如何修复? JavaFX

    我有一个堆栈窗格 当我将第二个项目添加到堆栈窗格时 两者都会显示 但我无法再单击第一个项目 它变得 不可点击 我在 setonmouse 中定义的内容不起作用 它适用于我的第二个项目 如果我切换它们在堆栈窗格中的顺序 则另一个可以工作 但不
  • 在 OS X 中创建目录硬链接的 Unix 命令是什么?

    如何在 OS X 中创建指向目录的硬链接 而不是符号链接或 Mac OS 别名 我已经知道命令 ln target destination 但仅当目标是文件时才有效 我知道 Mac OS 与其他 Unix 环境不同 允许硬链接到文件夹 例如
  • JMS事务

    数据库事务是一个熟悉的概念 try updateDB commit catch error rollback 如果发生任何错误 updateDB 所做的任何更改都将被丢弃 我想知道消息队列事务回滚将撤消什么 try EDIT swapped
  • 角度引导模式在输入点击时打开

    在我的控制器中我有方法 scope openJukeboxesModalToGroup 打开模式弹出窗口 scope search Jukeboxes 在页面上搜索 scope keyPressed 捕获按键 在带有表格的部分
  • Git 包文件被截断

    当尝试将 Egit 与 Eclipse 一起使用时 我随机收到错误 包文件被截断 我不知道这是如何以及为何发生的 即使再次导入项目也没有帮助 这里有什么问题 我遇到了同样的错误 并认识到当我尝试在 Eclipse 中导入并打开本地 git
  • Maven读取属性文件中的环境变量

    如何读取属性文件中的系统环境变量 我正在使用 MyBatis maven 插件进行数据库迁移 MyBatis 根据环境使用属性文件 我正在尝试读取属性文件中的环境变量 例如 开发 property username env username
  • 在 Firefox 中使用 morris.js 脚本不再回答任何错误

    我正在使用 morris js 库http www oesmith co uk morris js http www oesmith co uk morris js 为了为网站创建图表 它适用于 Opera Internet Explore
  • 如何在Python中使用subprocess.call杀死一个调用的子进程? [复制]

    这个问题在这里已经有答案了 我正在使用调用命令 subprocess call cmd shell True 该命令不会自动终止 怎么杀掉它呢 Since subprocess call等待命令完成 您无法以编程方式终止它 您唯一的办法是通
  • suPHP 有安全性吗?

    我不久前问过这个问题 尽管我提供了一些赏金 但我从未得到太多答案 请参阅here https stackoverflow com questions 8032140 implementing log in alongside suphp 更
  • App.config 似乎被忽略

    作为重构操作的结果 我有了这个类库 我添加了一个 App config 文件并添加了如下内容
  • Spring Websockets STOMP - 获取客户端IP地址

    有没有办法获取STOMP客户端IP地址 我正在拦截入站通道 但我看不到任何方法来检查 IP 地址 任何帮助表示赞赏 您可以在握手期间将客户端 IP 设置为 WebSocket 会话属性HandshakeInterceptor public
  • 检查是否启用了锁定

    我必须检查设置中是否启用了系统锁定 我使用下面的代码行 boolean b android provider Settings System getInt getContentResolver Settings System LOCK PA
  • 如何使用新的 Slick 2.0 HList 克服 22 列限制?

    我目前正在编写 Slick 代码来针对具有两个表 gt 22 列的旧模式 我如何使用新的 HList 代码 http slick typesafe com doc 2 0 0 M3 api scala slick collection he