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

haskell - 使用 Esqueleto 和 Template Haskell 动态构建 SQL 查询?

我正在编写一个带有 Yesod 和 Persistent 的 webapp。我有一个带有多个表的 SQL 数据库,其中包含我的“项目”的特征。我有一个主表和与 id 链接的具有多个值的附加表的选项。

用户应该能够选择他想要过滤的那些特征并指定过滤值。如果用户过滤操作系统,SQL-Query 的许可证和编码将如下所示:

但我不想总是加入所有表,因为当有很多表但用户只过滤少数表时,这对性能非常不利。但我也不想为每个可查询功能组合编写一个查询,因为这意味着编写 N² 大部分相同的查询。

'on' 和 'where' 子句可以根据我们是否要过滤而动态完成。但是连接在 Lambda 函数的参数范围内。我发现没有办法建立这个依赖于外部变量。

所以我认为 Template Haskell 可能会成功……我开始学习 TH 并将查询的核心转换为 TH。但是现在我被卡住了,不确定 TH 是否可以帮助我以及它是否是正确的方法?

所以这是我使用 Template Haskell 的进展:

所以我希望你能得到帮助:

  • 我可以/应该使用 Template Haskell 来做到这一点吗?
  • 如果是这样:我怎样才能用参数调用函数 foo ?
  • 如果不是:什么是正确的解决方案?
0 投票
2 回答
53 浏览

haskell - 在 Esqueleto 中更新具有特定 ID 的行

我可以entryId像这样在 Esqueleto 中更改一行的字段:

但是,一直写它会很烦人。我希望能够写出这样的东西:

我尝试自己编写这个助手,但发现我不知道如何以^. EntryId通用方式编写(即适用于任何条目类型的方式)。可能吗?还是我错过了一些东西并且updateById已经存在于 Esqueleto 中?

0 投票
1 回答
364 浏览

haskell - 从子查询中选择并加入 Esqueleto 中的子查询

select ... from (select ...) join (select ...)在 Esqueleto我该怎么做?

我知道我可以rawSql从 Persistent 使用,但我想避免这种情况。

作为记录,这里是完整的查询:

0 投票
1 回答
85 浏览

haskell - esqueleto:外部连接无法编译

这是我的模型的一个子集:

我无法构建此查询:

我不明白构建错误:

和:

我不明白我哪里出错了?

编辑 我是从这段代码开始的,它确实有效:

0 投票
1 回答
93 浏览

haskell - 如何过滤 Esqueleto 中的 Just 字段?

使用以下持久模式,

我想查询SELECT id, desc FROM picture WHERE desc IS NOT NULL。但

我如何实现previews'签名?

0 投票
2 回答
212 浏览

string - 如何比较相等 Data.Text.Internal.Lazy.Text 和 [Char]?

esqueleto 返回的previousLogItem数据类型包含Data.Text.Internal.Lazy.Text

后来我尝试使用以下方法进行previousLogItem比较exampleCharList

但这不起作用,因为类型仍然不同:

0 投票
1 回答
156 浏览

haskell - Haskell Esqueleto 项目到记录列表而不是元组

在我看到的所有示例中,esqueleto的结果都被投影到一个元组列表中。由于缺少标签,这使得编码和维护变得更加困难。

例如:

有没有办法让 esqueleto 将结果投影到记录列表中?

0 投票
1 回答
393 浏览

haskell - Haskell Esqueleto 项目列子集到自定义记录列表

在所有示例中,我看到esqueleto的结果被投影到元组列表或实体记录中。

例如:

esqueleto 有什么方法可以将列的子集投影到自定义记录(不同于实体)而不是元组?这是在没有从元组到自定义记录的额外投影的情况下完成的。

例如,假设从数据库中获取所有数据效率低下,因此我们只想将数据库中的 WindowTitle 和 BeginTime 列投影到为这些列提供足够名称的自定义记录中。

更新

无效代码示例:

错误:

更新

无效代码示例:

错误:

0 投票
0 回答
236 浏览

haskell - 具有许多列的原始 sql

我正在构建一个 CRUD 应用程序,它使用 Persistent 提取数据并执行一些相当复杂的查询,例如使用窗口函数。由于 Persistent 或 Esqueleto 都不支持这些,我需要使用原始 sql。

一个很好的例子是,我想选择值不会与前一个值有很大偏差的行,所以在伪 sql 中条件是WHERE val - lag(val) <= x. 我需要在 SQL 中运行此选择,而不是提取所有数据然后在 Haskell 中过滤,否则我将有办法处理大量数据。

这些查询返回许多列。但是,该RawSql实例在具有 8 个元素的元组中达到最大值。所以现在我正在编写附加功能from9, to9, from10, to10等等。之后,所有这些都使用 type 的函数进行转换(Single a, Single b, ...) -> DesiredType。尽管这可以通过代码生成来缩短,但这种方法很简单,而且显然感觉不像是好的 Haskell。这让我很担心,因为我认为我的大多数查询都需要rawSql.

您对如何改善这一点有什么建议吗?目前,我的主要想法是取消规范化数据库和重复数据,例如通过将滞后值包含为列,以便我可以使用 Esqueleto 查询数据。

0 投票
0 回答
105 浏览

sql - 从 Esqueleto 查询中的时间戳字段中提取年份

我正在尝试使用unsafeSqlExtractSubField来自 Esqueleto 的方法来创建一个从日期中提取年份的方法,例如:

但我收到错误:

我是否需要在这里定义一个UnsafeSqlFunctionArgumentfor的实例,UTCTime或者我是否试图将一个方形钉安装到一个圆孔中?

我不是在回答说我可以在haskell级别提取日期的答案之后,我想在查询中获取年份,以便我可以在查询中执行SQL GROUP BY