问题标签 [doobie]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
525 浏览

scala - Doobie 流式查询导致无效操作

杜比

在 Scala 或 Doobie 方面没有太多经验的情况下,我正在尝试从 DB2 数据库中选择数据。以下查询工作正常并按预期打印 5 名员工。

问题

当我想读取所有选定的行并删除take(5)时,我有.process.list而不是.process.take(5).list,我得到以下错误。(一世)

我想知道take(5)它不会返回错误的变化。为了获取有关无效操作的更多信息,我尝试启用日志记录。(ii) 不幸的是,流式传输不支持日志记录。如何获取有关导致此错误的操作的更多信息?

普通 JDBC

下面,在我看来,普通的 JDBC 查询按预期工作并返回所有 10 行。

环境

从错误消息中可以看出,我正在使用db2jcc.jarversion 3.64.133。DB2 在版本 11 中使用。

0 投票
1 回答
232 浏览

scala - Scala(doobie):类型是不变的

我正在使用 Scala 和doobie开展一个项目。我正在尝试实现一个可以由MacWire注入并与不同的 Task/Future monads 一起使用的交易者特征(例如,用于测试)。

但我得到这个错误:

它之所以有效Task,是因为它被定义为Task[+A],但 doobie 的定义IOLiteIOLite[A]。有什么办法可以使这项工作?还是我必须使用不同的 Monad 类型而不是TaskIOLitedoobie 测试需要更改)?

0 投票
2 回答
2251 浏览

postgresql - 如何使用 Doobie 正确处理 Hikari 连接池

我一直在使用 doobie (cats) 从 scalatra 应用程序连接到 postgresql 数据库。最近我注意到该应用程序正在为每个事务创建一个新的连接池。我最终解决了它 - 见下文,但这种方法与 doobie 书的“管理连接”部分中采用的方法完全不同,我希望有人能确认它是否明智或是否有更好的设置方法建立连接池。

这是我最初所拥有的 - 这可以工作,但会在每个连接上创建一个新的连接池:

我最初的假设是ensuring xa.shutdown每个请求都有问题,但是删除它会导致连接很快被用完,直到没有剩余。

这是解决问题的尝试-使我能够删除ensuring xa.shutdown,但仍然导致连接池被反复打开和关闭:

最后,我通过创建一个HikariDataSource对象然后将其传递给HikariTransactor构造函数来获得所需的行为:

0 投票
3 回答
1088 浏览

sql - 具有泛型类型参数的 Scala doobie 片段

我正在尝试将不同类型的对象抽象到类似结构的 sql 表中。这是我正在尝试做的事情:

但我得到这个编译错误:

我可以在文档中找到的是:

doobie 允许您使用 Meta 实例插入任何类型的值(及其选项),其中包括...

但在这种情况下似乎还不够;我需要什么正确的类型/导入/转换?

0 投票
1 回答
712 浏览

scala - 在没有显式匹配的情况下转换 Doobie ConnectionIO[Option[Int]]

我有一个ConnectionIO[Option[Int]]和映射Option来产生ConnectionIO[Option[String]]一个查询,Some[Int]否则保持Nones. I was able to do this with a匹配comprehension and a`:

我知道我被ConnectionIO容器绊倒了,但我找不到更干净的映射方法来转换ConnectionIO[Option[Int]]ConnectionIO[Option[String]].

0 投票
1 回答
2394 浏览

mysql - 带有 Hikari 设置的 Doobie

我想让 hikari 交易者设置就像标准交易者一样

不幸的是,这给了我:

关于如何才能使其正常工作的任何想法?

请注意,以前的解决方案每次都使用单个连接并且可以正常工作:

但我真的可以使用连接池。

0 投票
2 回答
1369 浏览

scala - 在 doobie 中编写用于理解的可选查询?

我想使用 doobie 中的 for-comprehension 在一个事务中运行多个查询。就像是:

我刚开始使用 doobie(和猫),所以我对 FreeMonads 不太熟悉。我一直在尝试不同的解决方案,但为了便于理解,看起来两个块都需要返回 cat.free.Free[doobie.free.connection.ConnectionOp,?]。

如果这是真的,有没有办法将我的 ConnectionIO[Image] (来自 addImage 调用)转换为 cat.free.Free[doobie.free.connection.ConnectionOp,Option[Image]] ?

0 投票
2 回答
895 浏览

scala - 创建案例类实例列表

我有 3 个 val,每个类型Array[String]

它们的长度都相等

val1.length == val2.length // 真

接下来,我创建了一个案例类,如下所示:

我想创建一个列表,List[resource]这个列表的每个对象都是从vals 的相应元素创建的,即val1, val2,val3

像这样的东西:

我不确定如何进行。我是使用 flatMap、foreach、for-loops 还是其他东西?

我们的想法是创建上述newList内容,并将其与使用 doobie 从 SQL 数据库获得的结果进行比较。

0 投票
1 回答
3451 浏览

scala - 1 个事务中的 Doobie 和 DB 访问组合

Doobie 书说,从存储库层返回 ConnectionIO 是一个好习惯。它提供了链接调用并在一个事务中执行它们的能力。好看又清晰。

现在让我们假设我们正在开发 REST API 服务,我们的场景是:

  1. 在数据库中查找对象
  2. 对这个对象执行一些异步操作(使用cats.effect.IO 或monix.eval.Task)。
  3. 将对象存储在数据库中。

我们希望在 1 个事务中执行所有这些步骤。问题是,如果没有transactor.trans()我们在 2 个 monads 中工作的自然转换 -TaskConnectionIO. 那是不可能的。

问题是 - 如何ConnectionIO在 1 个组合中将 doobie 与任何效果 monad 混合,例如我们正在处理 1 个事务并能够在世界末日提交/回滚所有 DB 突变?

谢谢!

UPD:小例子

UPD2:@oleg-pyzhcov 提供的正确答案是将您的效果数据类型提升为ConnectionIO如下所示:

0 投票
1 回答
354 浏览

sql - Scala Doobie 查询硬编码值

在 Doobie 中编写以下查询时:

我有数据列表,例如 List(1,2,3,4) ,它是可变大小的。如何使用 Doobie 将值列表插入 SQL VALUES CLAUSE?