基本上它可以归结为是否有可能在esqueleto中返回超过16列的查询?
我有一个遗留数据库,我必须与之交互,它需要连接30-40列的表,然后挑选出我需要的80个可能的20个列中的20个,这样我就不会拉出列了大,除非需要。似乎有esqueleto我限于16列?没有孤儿实例,有没有办法克服这个问题?
提前致谢!
PS如果需要一个人为的例子,我会提供一个。
更新
我在文档中发现你可以做元组的元组,它基本上允许我获得更多的16列,然后在结果上采用那些嵌套的元组和模式匹配,将其转换为我需要的数据类型或使用个体值根据需要。
FYI
如果您查看SqlSelect
的文档,如果您查看实例,那么请向右查看,您会看到'提示'这就是帮助我知道我可以做元组元组的原因。
答案 0 :(得分:2)
您可以创建自定义数据类型来表示该查询的结果,该查询将包含您想要的任意数量的字段。然后,您需要为该数据实现相关的类型类(PersistEntity似乎是主要的类型)。这使您有机会为字段提供相关/有意义的名称,以帮助防止潜在的错误。
data MyResult
= MyResult
{ fieldOne :: SomeType
, fieldTwo :: OtherType
, ...
, fieldSixteen :: Text
}
而不是返回(a, b, c, ..., e)
,而是返回MyResult a b c ... e
。
为方便起见,您可能希望使用Persistent的实体定义quasiquoter来定义结果。您将希望以不尝试为其生成迁移的方式使用该定义。