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

时间:2016-10-10 16:08:50

标签: mysql haskell yesod esqueleto

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

我有一个遗留数据库,我必须与之交互,它需要连接30-40列的表,然后挑选出我需要的80个可能的20个列中的20个,这样我就不会拉出列了大,除非需要。似乎有esqueleto我限于16列?没有孤儿实例,有没有办法克服这个问题?

提前致谢!

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

更新

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

FYI

如果您查看SqlSelect的文档,如果您查看实例,那么请向右查看,您会看到'提示'这就是帮助我知道我可以做元组元组的原因。

1 个答案:

答案 0 :(得分:2)

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

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

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

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