diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/clojure/contrib/datalog/database.clj | 7 | ||||
-rw-r--r-- | src/clojure/contrib/datalog/example.clj | 1 | ||||
-rw-r--r-- | src/clojure/contrib/datalog/softstrat.clj | 8 |
3 files changed, 11 insertions, 5 deletions
diff --git a/src/clojure/contrib/datalog/database.clj b/src/clojure/contrib/datalog/database.clj index 517c1b92..a24f093c 100644 --- a/src/clojure/contrib/datalog/database.clj +++ b/src/clojure/contrib/datalog/database.clj @@ -215,7 +215,7 @@ nil (filter identity (for [key (keys pt)] (if-let [idx-map (idxs key)] - (idx-map (pt key)) + (get idx-map (pt key) #{}) nil))))) (defn- match? @@ -235,12 +235,15 @@ space (if (empty? idxs) (:data rel) ; table scan :( (reduce intersection idxs))] + (trace-datalog (when (empty? idxs) + (println (format "Table scan of %s: %s rows!!!!!" + rn + (count space))))) (fun #(match? % pt) space))) (defn select "finds all matching tuples to the partial tuple (pt) in the relation named (rn)" [db rn pt] -; (println " DB Lookup: " rn pt) (scan-space filter db rn pt)) (defn any-match? diff --git a/src/clojure/contrib/datalog/example.clj b/src/clojure/contrib/datalog/example.clj index afc37bb4..31a7ddaf 100644 --- a/src/clojure/contrib/datalog/example.clj +++ b/src/clojure/contrib/datalog/example.clj @@ -35,6 +35,7 @@ (index :can-do-job :position) (relation :job-replacement [:job :can-be-done-by]) + ;(index :job-replacement :can-be-done-by) (relation :job-exceptions [:id :job]))) diff --git a/src/clojure/contrib/datalog/softstrat.clj b/src/clojure/contrib/datalog/softstrat.clj index f23bf50f..ca004981 100644 --- a/src/clojure/contrib/datalog/softstrat.clj +++ b/src/clojure/contrib/datalog/softstrat.clj @@ -39,9 +39,11 @@ (let [rules (pred-map pred) preds (reduce (fn [pds lits] (reduce (fn [pds lit] - (conj pds (literal-predicate lit))) - pds - lits)) + (if-let [pred (literal-predicate lit)] + (conj pds pred) + pds)) + pds + lits)) #{} (map :body rules))] (assoc nbs pred preds))) |