问题标签 [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.
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 ?
- 如果不是:什么是正确的解决方案?
haskell - 在 Esqueleto 中更新具有特定 ID 的行
我可以entryId
像这样在 Esqueleto 中更改一行的字段:
但是,一直写它会很烦人。我希望能够写出这样的东西:
我尝试自己编写这个助手,但发现我不知道如何以^. EntryId
通用方式编写(即适用于任何条目类型的方式)。可能吗?还是我错过了一些东西并且updateById
已经存在于 Esqueleto 中?
haskell - 从子查询中选择并加入 Esqueleto 中的子查询
select ... from (select ...) join (select ...)
在 Esqueleto我该怎么做?
我知道我可以rawSql
从 Persistent 使用,但我想避免这种情况。
作为记录,这里是完整的查询:
haskell - esqueleto:外部连接无法编译
这是我的模型的一个子集:
我无法构建此查询:
我不明白构建错误:
和:
我不明白我哪里出错了?
编辑 我是从这段代码开始的,它确实有效:
haskell - 如何过滤 Esqueleto 中的 Just 字段?
使用以下持久模式,
我想查询SELECT id, desc FROM picture WHERE desc IS NOT NULL
。但
我如何实现previews
'签名?
string - 如何比较相等 Data.Text.Internal.Lazy.Text 和 [Char]?
esqueleto 返回的previousLogItem
数据类型包含Data.Text.Internal.Lazy.Text
后来我尝试使用以下方法进行previousLogItem
比较exampleCharList
:
但这不起作用,因为类型仍然不同:
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 查询数据。
sql - 从 Esqueleto 查询中的时间戳字段中提取年份
我正在尝试使用unsafeSqlExtractSubField
来自 Esqueleto 的方法来创建一个从日期中提取年份的方法,例如:
但我收到错误:
我是否需要在这里定义一个UnsafeSqlFunctionArgument
for的实例,UTCTime
或者我是否试图将一个方形钉安装到一个圆孔中?
我不是在回答说我可以在haskell级别提取日期的答案之后,我想在查询中获取年份,以便我可以在查询中执行SQL GROUP BY
。