SQL `NULL` 在第 1 列读取(JDBC 类型 null),但映射到非选项类型

Nic*_*yan 4 scala quill quill.io doobie

我想使用此查询选择最大值(表中的所有字段都不为空):

dc.run(quote {
    query[SchemaInfo]
      .filter(_.subjectName == lift(subject))
      .map(_.version)
      .max
  }).map(_.map(_ + 1).getOrElse(1))
Run Code Online (Sandbox Code Playgroud)

我知道,该表可能是空的,所以我使用这个:map(_.map(_ + 1).getOrElse(1))

问题是此查询会产生以下错误:

SQLNULL在第 1 列读取(JDBC 类型为 null),但映射到非选项类型;在这里使用选项。请注意,JDBC 列索引是从 1 开始的。doobie.util.invariant$NonNullableColumnRead:在第 1 列读取 SQL NULL(JDBC 类型为 null),但映射到非选项类型;在这里使用选项。请注意,JDBC 列索引是从 1 开始的。

如何修复它?没有鹅毛笔(使用纯 doobie)相同的查询可以正常工作

pez*_*tem 7

我知道您可能已经得到了答案,但我会在这里留下我的评论,希望它能帮助将来的人。

所以问题是一致的 query[SchemaInfo] ,因为记录可能不存在,应该将其映射到 query[Option[SchemaInfo]].unique