问题标签 [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 回答
352 浏览

haskell - 加入 Maybe Fields

我有一张带有可能外键的表。我正在尝试加入,但无法编译。

我的查询:

我收到这种类型的错误:

我尝试了不同的组合,^.?.没有运气。也尝试删除或添加just。在这一点上,我只是在猜测,不了解如何解决该错误。因此,感谢有关如何加入 Maybe 领域的任何意见。我假设这groupBy可能会使它复杂化,因为它不是 CatTable 中的 Maybe,但一旦加入它就会是。

0 投票
1 回答
2691 浏览

sql - 使用 Esqueleto 处理列表类型

我的数据类型定义为:

现在,就目前而言,我有一个持久模型定义为:

使用 Esqueleto,我可以很容易地创建一个查询来填充委员会视图。它会是这样的:

现在,考虑填充问题CommitteesView。原则上,我们通过在上述查询中运行子查询来获得足够的数据来填充。好吧,够公平的。现在如何像group by在 SQL 中一样使用“按 Haskell-list 分组”?如何折叠行以便最终得到人员列表?

我得到的印象是esqueleto无法处理这种情况(即,它没有可以做到的组合器)。而且我的底层数据库显然不支持将 Haskell 列表作为列。但是,当然,我不能是唯一一个面对这个问题的人。什么是有效的策略?将列表的n列表折叠成n列表?还是运行n+1查询?还有其他选择吗?

0 投票
1 回答
349 浏览

haskell - 与 Esqueleto 的外连接

我对外部连接如何与 esqueleto 一起使用有点困惑。

我创建了以下查询(简化):

据我所知,在 SQL 端,此查询将搜索可能具有关联事件的代表。如果它们没有关联的事件,则事件字段(如 EventSeconds)将为“null”。在 Haskell 方面,这些应该被翻译成 Maybe Seconds (嗯,整数,但你明白了)。

那么当我运行这个查询并且没有任何东西可以连接到我的代表关系时,实际上会发生什么?如何解构元组以粘贴默认值?

目前,我有一些类似的东西:

(请注意,我在此处打开了 ViewPatterns)。这种类型的检查。但如果我使用 (?.) 和 (fromMaybe 360​​0) 会失败。模式分析中的 unValue。

0 投票
2 回答
646 浏览

haskell - 在 Esqueleto 和 Yesod 中执行 COUNT(id) 的正确方法是什么

我试图弄清楚如何使用 Esqueleto 编写以下查询

这是我的模型的定义方式

我已经设法得到了几乎所有东西,除了那COUNT部分

我设法找到了一个countRows函数,但是我还没有设法找到一种以类型检查的方式将这两者结合起来的方法。

我也不确定是否需要p ^.where 子句的每个分支中的所有这些,或者是否可以以某种方式将它们折叠在一起?

0 投票
1 回答
490 浏览

haskell - 聚合函数作为选择结果

是否可以写

作为esqueleto查询?

更新

我发现了这个min_功能。然而,代码

显然有一些模棱两可的类型:

0 投票
1 回答
101 浏览

haskell - 在 esqueleto 中加入视图

我有一个 sql 视图 V,它与表 X 具有 0:1 对应关系。我想将此视图连接到另一个表 Y 上,该表具有对 X(类型 XId)的引用。我已经指定了视图,就像我在持久性中指定的任何其他表一样。V 的 id 列是对 X 的引用,但是在持久化中将视图声明为表自然会给它类型 VId 而不是 XId。所以我不能将视图加入到 Y 上,因为类型不匹配。

我意识到我可以用 rawSQL 做到这一点,但我的查询也有一个 IN 子句,它似乎不能很好地处理值列表(使用 rawSQL)。另一种选择是在视图中选择 XId 列两次,并在模型定义中将额外的列指定为具有 XId 类型。最后,我可以退回到内联插入视图查询或完全使用原始 sql 进行查询,跳过持久性的插值。

有没有办法在不诉诸上述方法的情况下做到这一点?如果可能的话,我更喜欢使用 esqueleto。

0 投票
1 回答
804 浏览

haskell - 用 Persistent 和 Esqueleto 连接表示 sql 中的总和类型

我一直在尝试找出一种明智的方法来使用持久性在 SQL 后端表示 Haskell 总和类型。

我的目标 Haskell 数据类型是

我正在使用以下持久数据类型对它们进行建模:

每个元素只会有一个 Foo 或一个 Bar ,永远不会两者都有。

我想使用 aLeft Outer Join来选择我的所有元素和相应的 Foo OR Bar。我的 Esqueleto 表达是:

但是,当我执行代码时,出现错误:

如果我删除第二个加入,给出:

代码运行没有错误。我确定这很明显,但我看不出我做错了什么。


编辑:我发现了问题所在;来自文档:

请注意,ON 子句的顺序是颠倒的!您需要以相反的顺序编写您的 ons,因为这有助于可组合性(有关更多详细信息,请参阅 on 的文档)。

以下代码有效(on表达式的顺序颠倒了):


谢谢,

迈克尔

0 投票
1 回答
405 浏览

haskell - 在 Esqueleto 中获取聚合函数的结果

假设我有以下模型:

使用 Esqueleto (& Yesod),假设我想获得 Stack Overflow 用户的平均年龄。我想用类型签名制作一个函数:

到目前为止,我有以下内容:

这让我 [Value (Maybe Int)],但我需要深入了解“Maybe Int”。我试着做

但是由于某种原因,这样做会引发类型错误,给我 [Maybe ()] 而不是 [Maybe Int]... 此外,我认为上述代码中的最后一行应该有:

而不是

因为 PersonAge 可以为 NULL,但更改它会给我一个类型错误,因为:

这可能比我想象的要容易,但我无法在网上任何地方找到在 Esqueleto 中使用聚合函数的示例,而且我对 Haskell 很陌生,所以我很难弄清楚。

我想我可以只使用原始 SQL,但如果可能的话,我想使用 Esqueleto 来做到这一点。

0 投票
1 回答
188 浏览

haskell - 尝试使用我的模型设置 Esqueleto 时出错

今天早上我开始在 Yesod 应用程序中设置 Esqueleto。我真的在尝试做一个 LeftOuterJoin,但我已经将查询简化了很多,以便让基础工作正常。我什至无法理解。为了确保与 Database.Persist.Query 没有冲突,我遵循了 Github 问题中的一些建议,将我的查询提取到不导入 Yesod 的单独文件中。在配置 Esqueleto 时我缺少什么吗?

FWIW,我正在使用 Yesod 1.4.0、Persistent 2.1 和 Esqueleto 2.1。

这是我遇到的错误:

这是我的模型:

这是我的查询:

0 投票
1 回答
318 浏览

haskell - 无法使用 Esqueleto 编写双左连接

我有一个包含教师、学校和学区的数据库模式。该TEACHERS表有一个可以为空的SCHOOL_ID列(教师可能属于也可能不属于学校),并且该SCHOOLS表有一个可以为空的DISTRICT_ID列(学校可能属于也可能不属于某个学区)。

使用 Esqueleto,我想要一个教师列表,每个教师都有一所学校(如果他们属于一个学校)和一个学区(如果他们属于一个属于某个学区的学校)。花了一点时间才为老师->学校左连接找出正确的表达方式,但我最终还是正确的:

DISTRICTS我尝试使用类似的表达式添加另一个左连接:

但我收到一个错误:

这个双重连接可以用 Esqueleto 来表达吗?如果是这样,怎么做?