aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/clojure/contrib/datalog/database.clj7
-rw-r--r--src/clojure/contrib/datalog/example.clj1
-rw-r--r--src/clojure/contrib/datalog/softstrat.clj8
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)))