の値を取ることができない:Clojureql私は次のように生成する必要がマクロ(Clojureの)
(clojureql.core/join (clojureql.core/table db :tableA) (clojureql.core/table db :tableA)
(clojureql.core/where (apply and (= :tableA.id :tableB.id)
[(apply or [(clojureql.predicates/in :tableA.id [1 2])
(clojureql.predicates/in :tableA.id [3 4])])])))
しかし、「適用するか、」フォームは、別の関数やマクロから「合格」する必要があります。ここで私が何を意味するかです:
この機能がある(clojureql.core/join (clojureql.core/table db :tableA) (clojureql.core/table db :tableA)
(clojureql.core/where (apply and (= :tableA.id :tableB.id)
[(my-or-f)])))
:
(defn my-or-f []
(apply or [(clojureql.predicates/in :tableA.id [1 2])
(clojureql.predicates/in :tableA.id [3 4])]))
ただし、この機能は、この例外がスローされます。
#<CompilerException java.lang.Exception: Can't take value of a macro: #'clojure.core/or (NO_SOURCE_FILE:2)>
私もマクロを使用してみました。これは、コンパイルが、私は使用してクエリを実行しようとすると、それは同じ例外がスローされます。このマクロ
(defmacro my-or-f []
`(apply or [(clojureql.predicates/in :tableA.id [1 2])
(clojureql.predicates/in :tableA.id [3 4])]))
私は「適用するか、」使用できる別の方法はありますか?
ありがとうございました。
Ret ret、私はあなたの提案を試みましたが、これはclojureqlライブラリでは機能しません。ここで生成するSQLは次のとおりです。SELECT tableA。*、tableA。* FROM tableA JOIN tableA ON((tableA.id = tableB.id)とtableA.id IN(1,2))しかし、私の最初の動作例から)SELECT tableA。*、tableA。* FROM tableA JOIN tableA ON((tableA.id = tableB.id)AND(tableA.id IN(1,2)OR tableA.id IN(3、 4))) –
問題は、clojureQL /は、あなたが渡したソースツリーを歩き回り、数学を探しているマクロで、 'と'と 'または'を探します。通常の環境では、私のコードは正常に動作しますが、これはclojureQLでは機能しません。おそらく回避策はありますが、残念ながらclojureQLは実際には使用しないので、わかりません。私の最終的な提案(リスト操作なし)を行い、my-or-fをマクロにすることは、うまくいくかもしれません。 – Retief
@RonPは私の編集をチェックする - 私はclojureqlソース[ここ](https://github.com/LauJensen/clojureql) – Retief