1
(defn GetValuesFromWhereCommand
    "return a list of values from Where command"
    [Query tableName]
    (let [values (re-seq #"[0-9a-zA-Z_=<>]+" ((re-find #"WHERE(.*)" Query) 1))
        bitwise (re-find #"AND|OR" Query)
        tempList (ref #{})
       ] 
   ; first loop will look for the operators  = < >
   (doseq [item values]
    (let [result (case (re-find #"[=><]" item)
        "=" (GetRowsfromCondition tableName item = )
        "<" (GetRowsfromCondition tableName item < )
        ">" (GetRowsfromCondition tableName item > )
        nil (println "nothing")
     )]
     (when (not= nil result) (dosync (alter tempList conj result)) )
    tempList)
   )
   (println tempList)
   tempList)     ; get the Where from Update ','
)

这是我的输出。

#<Ref@5a4e229e: #{#<Ref@3fc2e163: #{0}> #<Ref@63280c85: #{0 1}>}>

我想实现将返回 #{0} 的 AND 操作
和将返回 #{0 1} 的 OR。


我的问题是如何访问我创建的列表。由于某种原因,我无法使用联合/交集。

4

1 回答 1

3

您应该取消所有内部集合并将联合应用于新集合,它应该看起来像这样:

(let [newList (ref #{})] (doseq [item @your_ref_to_set_of_refs] (dosync (alter newList conj @item))) (apply union @newList))
于 2013-02-23T14:55:40.933 回答