問題タブ [esqueleto]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - メイビー・フィールズとの結合
多分外部キーを持つテーブルがあります。参加しようとしていますが、コンパイルできません。
私のクエリ:
そして、私はこのタイプのエラーを受け取ります:
と のさまざまな組み合わせを試しましたが、うまく^.
いき?.
ませんでした。また、削除または追加just
も試みました。この時点で、これはエラーを解決する方法を理解せずに推測しているだけです。メイビーのフィールドに参加する方法についてのご意見をお待ちしております。CatTablegroupBy
の Maybe ではないため、おそらく複雑になっていると思いますが、結合されるとそうなります。
sql - Esqueleto でのリスト型の処理
次のように定義されたデータ型があります。
さて、現状では、次のように定義された永続モデルがあります。
Esqueleto を使用して、CommitteeView に入力するクエリを簡単に作成できます。次のようになります。
ここで、人口問題を考えてみましょうCommitteesView
。原則として、上記のクエリでサブクエリを実行することにより、入力するのに十分なデータを取得します。わかりました、十分に公平です。group by
SQLのように「Haskell-listによるグループ」を使用するにはどうすればよいですか? 人のリストのリストになるように行を折りたたむにはどうすればよいですか?
esqueleto
そのようなケースを処理できない (つまり、それを行うコンビネータがない)という印象を受けます。そして、私の基盤となるデータベースは明らかに Haskell リストを列としてサポートしていません。しかし、確かに、この問題に直面しているのは私だけではありません。効果的な戦略とは?リストのnリストをnリストに折りたたむ? またはn+1
クエリを実行していますか?他のオプションはありますか?
haskell - Esqueleto による外部結合
外部結合が esqueleto でどのように機能するかについて少し混乱しています。
次のクエリを作成しました(簡略化):
私の知る限り、SQL 側では、このクエリは関連するイベントを持つ可能性のある担当者を検索します。イベントが関連付けられていない場合、イベント フィールド (EventSeconds など) は「null」になります。Haskell 側では、これらを Maybe Seconds に変換する必要があります (まあ、int ですが、おわかりでしょう)。
では、このクエリを実行すると、rep リレーションに隣接するものが何もない場合、実際にはどうなるでしょうか? デフォルトを貼り付けるためにタプルを分解するにはどうすればよいですか?
現在、次のようなものがあります。
(ここで ViewPatterns をオンにしていることに注意してください)。このタイプはチェックします。しかし、 (?.) と (fromMaybe 3600) を使用すると失敗します。パターン分析で unValue。
haskell - 選択結果としての集計関数
書くことは可能ですか
esqueleto クエリとして?
アップデート
機能を発見しましたmin_
。ただし、コード
明らかにいくつかのあいまいなタイプがあります:
haskell - esqueleto でのビューへの参加
テーブル X に 0:1 で対応する SQL ビュー V があります。このビューを、X への参照を持つ別のテーブル Y (型 XId) に結合したいと考えています。永続的な他のテーブルと同じように、ビューを指定しました。V の id 列は X への参照ですが、ビューを永続的なテーブルとして宣言すると、XId ではなく VId 型が自然に与えられます。タイプが一致しないため、ビューを Y に結合できません。
rawSQLでこれを実行できることはわかっていますが、クエリにはIN句もあり、値のリスト(rawSQLを使用)ではうまく機能しないようです。もう 1 つのオプションは、ビューで XId 列を 2 回選択し、余分な列をモデル定義で XId 型として指定することです。最後に、ビュー クエリをインラインで挿入するか、永続的な補間をスキップして生の SQL で完全にクエリを実行することにフォールバックできます。
上記の方法に頼らずにこれを行う方法はありますか?できればesqueletoを使いたいです。
haskell - Persistent 結合と Esqueleto 結合を使用して SQL で合計型を表す
Persistent を使用して、SQL バックエンドで Haskell の合計型を表現するための賢明な方法を見つけようとしています。
私のターゲットHaskellデータ型は、
次の永続データ型を使用してこれらをモデル化しています。
各要素には Foo または Bar のいずれかのみが存在し、両方は存在しません。
Left Outer Join
a を使用して、すべての要素と対応する Foo OR Bar を選択したいと考えています。私の Esqueleto 式は次のとおりです。
ただし、コードを実行すると、次のエラーが発生します。
2 番目の結合を削除すると、次のようになります。
コードはエラーなしで実行されます。明らかだと思いますが、何が間違っているのかわかりません。
編集:問題が何であるかがわかりました。ドキュメントから:
ON 句の順序が逆になっていることに注意してください。構成可能性に役立つため、 ons を逆の順序で記述する必要があります (詳細については on のドキュメントを参照してください)。
次のコードが機能します (on
式の順序が逆になっています)。
ありがとう、
マイケル
haskell - Esqueleto で集計関数の結果を取得する
次のモデルがあるとします。
Esqueleto (および Yesod) を使用して、Stack Overflow ユーザーの平均年齢を取得したいとします。型シグネチャを持つ関数を作成したい:
これまでのところ、私は次のものを持っています:
[Value (Maybe Int)] になりますが、「Maybe Int」に戻る必要があります。やってみた
しかし、何らかの理由で、そうすると型エラーが発生し、[Maybe Int] ではなく [Maybe ()] が返されました... さらに、上記のコードの最後の行には次のようにすべきだと思います。
それよりも
PersonAge は NULL になる可能性があるため、変更すると型エラーが発生します。
これはおそらく私が思っているよりも簡単ですが、Esqueleto で集計関数を使用するための例をオンラインで見つけることができません。
生のSQLでもいいと思いますが、できればEsqueletoでやってみたいです。
haskell - 自分のモデルで Esqueleto をセットアップしようとしてエラーが発生しました
今朝、Yesod アプリで Esqueleto のセットアップを開始しました。私は実際に LeftOuterJoin を実行しようとしていますが、基本を機能させるためにクエリをかなり単純化しました。私もそれを得ることができません。Database.Persist.Query との競合がないことを確認するために、Github の問題からのアドバイスに従って、 Yesod をインポートしない別のファイルにクエリを抽出しました。Esqueleto の設定で足りないものはありますか?
FWIW、私は Yesod 1.4.0、Persistent 2.1、および Esqueleto 2.1 を使用しています。
これは私が経験しているエラーです:
ここに私のモデルがあります:
そして、ここに私の質問があります:
haskell - Esqueleto を使用して double left join を記述できません
教師、学校、学区のデータベース スキーマがあります。TEACHERS
テーブルには null 可能な列があり(SCHOOL_ID
教師は学校に属している場合と属していない場合があります)、SCHOOLS
テーブルには null 可能なDISTRICT_ID
列があります (学校は学区に属している場合と属していない場合があります)。
Esqueleto を使用して、それぞれが学校 (ある学校に属している場合) と学区 (学区に属する学校に属している場合) を含む教師のリストが必要です。teacher->school left join の正しい表現を理解するのに少し時間がかかりましたが、最終的には正しい表現になりました。
DISTRICTS
同様の式を使用して、別の左結合を追加しようとしました。
しかし、私はエラーが発生します:
この二重結合は Esqueleto で表現できますか? もしそうなら、どのように?