Esqueleto:如何执行超过 16 列的查询?

Esqueleto: How to execute a query with more then 16 columns?

基本上可以归结为是否可以在 esqueleto 中查询 returns 超过 16 列?

我有一个必须与之交互的遗留数据库,它需要连接具有 30-40 列的表,然后从可能的 80-100 列中挑选出我需要的 20 列,所以我不会提取列大除非需要。似乎使用 esqueleto 我仅限于 16 列?有没有办法在没有孤儿实例的情况下克服这个问题?

提前致谢!

PS如果需要一个人为的例子,我会提供一个。

更新

我在文档中发现你可以做元组的元组,这基本上允许我获得更多的 16 列,然后对结果进行嵌套元组和模式匹配,将其转换为我需要或使用的数据类型根据需要的个人价值。

仅供参考

如果你查看 SqlSelect 的文档,如果你查看实例,然后一直向右看,你会看到一个 'hint',这帮助我知道我可以做元组元组。

您可以创建一个自定义数据类型来表示该查询的结果,它可以包含任意数量的字段。然后,您需要为该数据实现相关类型 类(PersistEntity 似乎是主要类型)。这也让您有机会为字段提供 relevant/meaningful 名称,以帮助防止潜在的错误。

data MyResult
    = MyResult
    { fieldOne :: SomeType
    , fieldTwo :: OtherType
    , ...
    , fieldSixteen :: Text
    }

而不是 returning (a, b, c, ..., e),你 return MyResult a b c ... e.

为方便起见,您可能希望使用 Persistent 的实体定义准引号来定义结果。您将希望以一种不会尝试为此生成迁移的方式使用该定义。