问题标签 [esqueleto]

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 投票
1 回答
731 浏览

haskell - 用 esqueleto 计算行数

我正在尝试使用 Esqueleto(版本 2.1.2.1)计算内部连接的行数。不幸的是,我的代码无法编译,我不明白为什么。我查看了以下有关如何执行此操作的示例,但无法弄清楚我做错了什么:example1example2

我的架构看起来像这样(简化):

用户可以在网站上注册玩游戏。无需注册也可以玩。因此,有一个单独的表Player。游戏有状态。它可以是Ongoing,或某种形式的游戏结束。我现在想计算用户正在玩的所有正在进行的游戏。

下面的 SQL 查询可以做到这一点(对于 1 的固定 userId):

但是,以下 Esqueleto 查询无法编译:

错误消息如下所示:

但是,如果我删除countRows. 即以下代码编译并执行我想要它执行的操作。

我究竟做错了什么?

0 投票
1 回答
448 浏览

haskell - 简化 Persistent & Esqueleto 代码

我有一个相当简单的查询,它执行两个外连接。(一顿饭有许多食谱,而食谱又包含许多食物)。

这个查询很棒,它说明了它需要什么,没有更多内容。但是,由于 SQL 的工作方式,它为我返回了一个包含大量重复膳食的表,对于每个匹配的外部连接。

例如,一顿饭有两个食谱,每个食谱有两种食物,变成 4 个元组。

我想将这些回滚为单一Meal数据类型。(此处简化以显示结构,其他字段当然存储在数据库中)。

我似乎必须完全手动进行此合并,而对于这个单个查询,它最终变成了 2 页左右的代码。

忽略不应该像这样使用类型类的事实,它看起来像一个(愚蠢的)类型类的很多实例DeserializeDb

剪辑了许多复杂性的实例(代码: https ://gist.github.com/cschneid/2989057ec4bb9875e2ae )

问题:

我唯一要公开的是查询签名。其余的都是实施垃圾。有没有我没有注意到的使用 Persistent 的技巧?我是否必须手动将连接合并回haskell类型?

0 投票
1 回答
820 浏览

haskell - 如何使用 Persistent 启用自动记录 SQL 语句

我已经搜索了这个问题的明确答案,但还没有找到 - 如何启用持久执行的 SQL 语句的自动日志记录?有人可以给我一个小示例程序吗?

以下是当前没有日志记录的示例程序。如何启用登录?

0 投票
0 回答
125 浏览

postgresql - 在 Esqueleto/Persistent 中指定 Postgres 表模式

我将 Esqueleto 与 Postgres 一起使用,但看不到指定表所在架构的方法。目前我正在发出以下 sql 来设置架构:

这允许我使用我想要的表,只要它们位于模式 foo 或模式栏中。有没有办法为每个表设置架构?

0 投票
2 回答
241 浏览

haskell - 在 esqueleto 中将 Int 和 double 值相乘?

我面临的问题非常简单:基本上我正在尝试计算 Int 和 Double 的乘积。在普通的 Haskell 中,我会跑

但是我无法弄清楚如何在 esqueleto 中做到这一点。我有一个表 B 有一个 Int 类型的列“数量”和一个表 C 有一个 Double 类型的列“价格”。当尝试提取两者并计算产品时,像这样

我收到类型错误(如预期的那样):

我在文档中找不到任何对我有帮助的东西,而且我实际上不知道如何继续。(有关更多代码,请参见下面的完整示例)。

可能的解决方案:我当然可以将价格存储为 Int,但如果可以使用 esqueleto 来完成,我很感兴趣。

完整示例

数据库:

表 A:ID|名称

表 B:Id|AId|BId|Amount 其中 Amount 是 Int,AId 和 BId 是对表 A 和 B 的引用。

表 C: Id|Name|Price ,这里是 Price a Double

我写的查询如下:

编辑

我尝试过使用fmapfromIntegral喜欢这样:

这会导致两个错误: No instance for (Functor SqlExpr)No instance for (Num (Value Double))

正如评论中所建议的(@Thomas M. DuBuisson),我尝试了:

这解决了第二个问题,但我仍然得到No instance for (Functor SqlExpr).

编辑 2

我在 Yesod 邮件列表上问过这个问题。可以在这里找到讨论。

0 投票
0 回答
30 浏览

haskell - Yesod Esqueleto 在加入时不知道 ModelId

在 esqueleto 上编译我的代码时遇到问题。出于某种原因,我的 fpcomplete IDE 说现在有一个错误。但是,当我构建它时,它说 My ModelId 是未知的。

这是我的代码:

错误信息是这样的:

也许这也会有所帮助:我使用 FpComplete 作为 Esqueleto 2.0.1 的 IDE(我认为这是 IDE 支持的版本。)

谢谢。

0 投票
1 回答
369 浏览

database - Haskell persistent w/ esqueleto:读取整个表并计算记录

我有以下架构:

现在说我想admin_chan[AdminChan]. 我怎样才能做到这一点?我有这个功能:

1)但是我如何[AdminChan]SqlPersistT IO堆栈中取出?(请注意,我没有使用yesod.)

2)另外,是否可以重写上述函数,使其成为多态并且也可以与BanHost表一起使用?

3) 我如何编写一个函数,使用esqueleto,将返回表中的记录数?

谢谢!

0 投票
1 回答
178 浏览

sql - 如何在 Esqueleto 查询中使用除非(或何时)?

我构建了一个查询,该查询连接了几个表并进一步限制了结果,除非一个名为IncludeAllequals的字段True

我正在尝试这样写

但我收到以下错误

无法将预期类型与第一个参数中的Bool实际类型匹配Database.Esqueleto.Internal.Language.Value Boolunless

所以unValue不知何故不能解决问题。事实上,类似的东西b ^. BIncludeAll有 type expr (Value a)

查看源代码中的定义对SqlExpr我也没有帮助:

这是一个ADT:

PS:我使用 SQL 后端,但理想情况下这不重要,对吧?

0 投票
0 回答
39 浏览

haskell - 关于 == 的 Database.Esqueleto 之谜。真值

在调试一个意外返回空列表的查询时,我意识到我写了一些愚蠢的东西:

...因为您可以附加== True到任何布尔值。用以下内容替换它意外地解决了我的问题,结果不再是空列表。

任何人都可以告诉我两者之间的实际区别吗?为什么会有?

编辑:数据库后端是 sqlite。

0 投票
2 回答
137 浏览

database - 如何在 esqueleto 查询中进行比较之前应用函数

对于这样简单的查询

我想在将字段值与“x”进行比较之前应用一个函数。原因是单元格代码在数据库中有尾随空格,没有什么比将它们修剪掉更容易的了,例如使用strip from Data.Text。但是,我最初使用fmap(两次)的方法导致

我知道 Esqueleto 提供了一些功能,例如just,专门完成类似的事情(虽然我找不到 的实现just)。

有没有办法对打包值应用任何函数?

写作时:在我的具体情况下,我可能只想使用like.

编辑:添加了我要应用的特定功能。