2016-10-10 11 views
1

基本的には、esqueletoで16列以上を返すクエリを持つことは可能ですか?Esqueleto:16列以上のクエリを実行する方法は?

私は対話しなければならないレガシーなデータベースを持っています。それは30-40列のテーブルを結合し、必要な80-100個の列のうち20個を選ぶ必要があります。必要な場合を除きます。 esqueletoでは16列に制限されているようですね。孤立したインスタンスなしでこれを克服する方法はありますか?

ありがとうございます!

PS実際の例が必要な場合は、PSを提供します。私はあなたにそれを変換するために、結果にそれらのネストされたタプルとパターンマッチを取り、その後、基本的に16列をより多く得るために私を可能タプルのタプルを行うことができますドキュメントで見つかった

UPDATE

データ型私は必要に応じて個々の値を必要とするか、使用します。

FYI

あなたがインスタンスを見れば、その後右にすべての方法を見てSqlSelectの資料を見れば、あなたは私が、私はタプルを行うことができます知って助けたものです「ヒント」を表示されますタプルの数。

+0

'persistent'ライブラリから' rawSql'関数をいつでも使うことができます。別の方法は、約20のタプルを返すEsqueleto用のPRを作成することです。しかし、私はこれがあなたが探している答えではないと思います。 :) – Sibi

+0

私が間違っていない限り(私はこの質問をしばらく掘り下げています) – sbditto85

+0

唯一の8 https://hackage.haskell.org/package/persistent-2.2.4 rawSqlは8列の制限があるようでした/docs/Database-Persist-Sql.html#t:RawSql – sbditto85

答えて

2

カスタムデータ型を作成して、必要な数のフィールドを持つクエリの結果を表すことができます。そのデータに関連する型クラスを実装する必要があります(PersistEntityが主要なようです)。これにより、潜在的なエラーを防止するために、関連性のある/意味のある名前をフィールドに提供する機会が与えられます。

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

、代わりの(a, b, c, ..., e)を返す、あなたはMyResult a b c ... eを返すと思います。

便宜上、Persistent's Entity定義の準クォータを使用して結果を定義することをお勧めします。その定義を、それに対するマイグレーションを生成しようとしない方法で使用したいと思うでしょう。

+0

"便宜上、Persistent's Entity定義の準クォータを使用して結果を定義することをお勧めします。その定義を、そのために移行を生成しようとしないでください。 私はその意味がわかりません。私はむしろ、haskell/yesod/persistentに新しいです...それは 'share [mkPersist sqlSettings、mkMigrate" migrateAll "] $(persistFileWith lowerCaseSettings" config/models ")' yesodの部分ですか? Model.hsで? – sbditto85

+0

はい、しかし、これはテーブル定義ではなく、クエリの戻り値型の定義であるため、 'mkMigrate'を望んでいません。だからあなたは 'share [mkPersist sqlSettings] [persistLowerCase | { - あなたのモデル定義 - } |] 'それに加えて。 – ephrion

+0

クール、私はそれを試して、最も可能性が正しいとあなたの答えをマークします。うまくいけば私はそれを働かせる。 – sbditto85

関連する問題