1

好吧,基本上它归结为是否有可能在 esqueleto 中返回超过 16 列的查询?

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

提前致谢!

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

更新

我在文档中发现您可以执行元组的元组,这基本上可以让我获得更多的 16 列,然后将这些嵌套元组和模式匹配结果用于将其转换为我需要的数据类型或根据需要使用单个值.

供参考

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

4

1 回答 1

2

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

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

而不是返回(a, b, c, ..., e), 你会返回MyResult a b c ... e.

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

于 2016-10-10T17:33:55.157 回答