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 的实体定义准引号来定义结果。您将希望以一种不会尝试为此生成迁移的方式使用该定义。
基本上可以归结为是否可以在 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 的实体定义准引号来定义结果。您将希望以一种不会尝试为此生成迁移的方式使用该定义。