問題タブ [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 - esqueleto で行を数える
Esqueleto (バージョン 2.1.2.1) で内部結合の行をカウントしようとしています。残念ながら、私のコードはコンパイルされず、その理由がわかりません。これを行う方法の次の例を見ましたが、何が間違っているのかわかりませんでした: example1、example2。
私のスキーマは次のようになります(簡略化):
ユーザーはサイトに登録してゲームをプレイできます。登録しなくても遊べます。したがって、別のテーブルがありますPlayer
。ゲームには状態があります。Ongoing
、または何らかの形のゲームオーバーになる可能性があります。ユーザーがプレイしている進行中のゲームをすべて数えたいと思います。
次の SQL クエリは、これをうまく実行します (userId が 1 に固定されている場合)。
ただし、次の Esqueleto クエリはコンパイルされません。
エラーメッセージは次のようになります。
ただし、を削除すると、まったく同じクエリが機能しますcountRows
。つまり、次のコードはコンパイルされ、私がやりたいことを実行します。
私は何を間違っていますか?
haskell - Persistent で SQL ステートメントの自動ロギングを有効にする方法
この質問に対する明確な答えを探しましたが、まだ見つけることができませんでした - 永続的に実行されている SQL ステートメントの自動ロギングを有効にするにはどうすればよいですか? 誰かがこのための小さなサンプルプログラムを教えてもらえますか?
以下は、現在ログを記録していないプログラムの例です。ログインを有効にするにはどうすればよいですか?
postgresql - Esqueleto/Persistent で Postgres テーブル スキーマを指定する
Postgres で Esqueleto を使用していますが、テーブルが存在するスキーマを指定する方法がわかりません。現在、次の SQL を発行してスキーマを設定しています。
これにより、テーブルがスキーマ foo またはスキーマ バーにある限り、必要なテーブルを使用できます。各テーブルのスキーマを設定する方法はありますか?
haskell - esqueleto で Int と double の値を乗算しますか?
私が直面している問題は非常に単純です。基本的に、Int と Double の積を計算しようとしています。プレーンな Haskell では、実行するだけです
しかし、esqueleto でそれを行う方法がわかりません。Int 型の列「金額」を持つテーブル B と、Double 型の列「価格」を持つテーブル C があります。両方を抽出して積を計算しようとすると、このように
タイプエラーが発生します(予想どおり):
私を助けてくれたドキュメントには何も見つかりませんでした。実際にどうすればよいのかわかりません。(詳細なコードについては、以下の完全な例を参照してください)。
考えられる解決策: もちろん、価格を Int として保存することもできますが、これが esqueleto で実行できるかどうかに興味があります。
完全な例:
データベース:
表 A: ID|名前
表 B: Id|AId|BId|Amount で、Amount は Int で、AId と BId は表 A と B への参照です。
表 C: Id|Name|Price 、これは Price a Double です
私が書いたクエリは次のとおりです。
編集:
私はこのように使用してみましfmap
たfromIntegral
:
その結果、次の 2 つのエラーが発生します
No instance for (Functor SqlExpr)
。
No instance for (Num (Value Double))
コメント(@Thomas M. DuBuissonによる)で示唆されているように、私は試しました:
これで 2 番目の問題は解決しますが、それでもNo instance for (Functor SqlExpr)
.
編集2:
これについては、Yesod メーリング リストで質問しました。議論はここで見つけることができます。
sql - Esqueleto クエリで not (または when) を使用する方法は?
いくつかのテーブルを結合し、 1 つのフィールドがequalsでない限り結果をさらに制限するクエリを作成します。IncludeAll
True
こんな感じで書いてみました
しかし、次のエラーが表示されます
の最初の引数で、予想される型
Bool
と実際の型を一致させることができませんでしたDatabase.Esqueleto.Internal.Language.Value Bool
unless
だから、unValue
どういうわけかトリックをしません。実際、 のようなものb ^. BIncludeAll
は typeを持っていexpr (Value a)
ます。
ソースの の定義をSqlExpr
見ても、私には役に立ちませんでした。
それはADTです:
PS: SQL バックエンドを使用していますが、理想的には問題にならないはずですよね?
haskell - == に関する Database.Esqueleto なぞなぞ。真の値
予期せず空のリストを返すクエリをデバッグしているときに、何かばかげたことを書いていることに気付きました。
...== True
任意のブール値に追加できるためです。それを次のように置き換えると、予想外に問題が解決し、結果は空のリストではなくなりました。
2つの実際の違いについて誰でも教えてもらえますか? なぜあるのでしょうか?
編集: データベースのバックエンドは sqlite です。
database - esqueleto クエリで比較前に関数を適用する方法
そのような単純なクエリの場合
フィールド値を「x」と比較する前に関数を適用したい。その理由は、データベース内のセル コードの末尾にスペースがあり、たとえばstrip fromを使用してそれらを削除する以外に簡単なことはないからData.Text
です。fmap
ただし、 (2回)使用するという私の最初のアプローチは、
Esqueleto が提供する のようなjust
、具体的に同様のことを実現する関数があることは知っています (ただし、 の実装は見つかりませんでしjust
た)。
パックされた値に関数を適用する方法はありますか?
執筆中: 私の特定のケースでは、like
.
編集:適用したい特定の機能を追加しました。