Rules - Required bindings doesn't evaluate correctly
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 35/100
Research direction
Start by reproducing the two d/q examples from the issue and compare the results for ordinary and required bindings. Read the linked Datomic Rules documentation for the intended required-binding semantics, then trace DataScript's Datalog rule evaluation to find why the required binding admits :bar. Done means the second query returns only #{[:foo]}.
Written by the indexing model from the issue text.
Description
Attempting to follow the Datomic Rules with required bindings documentation and discovered this bug in DataScript.
Here's a short example:
(d/q '[:find ?need
:in $ % ?name
:where (needs ?name ?need)]
'[["george" :wants :foo]
["george" :needs :foo]
["sally" :needs :bar]]
'[[(needs ?name ?need) [?name :needs ?need]]] "george")
;; => #{[:foo]} (expected)
;; Now try with ?name being a required binding by placing it in brackets
;; -- (needs ?name ?need) -> (needs [?name] ?need)
(d/q '[:find ?need
:in $ % ?name
:where (needs ?name ?need)]
'[["george" :wants :foo]
["george" :needs :foo]
["sally" :needs :bar]]
'[[(needs [?name] ?need) [?name :needs ?need]]] "george")
;; => #{[:foo :bar]} (incorrect)
It may be that the required binding version is always evaluating to true.
- Dominant language
- Clojure
- Stars
- 5.8k
- Forks
- 318
- PR merge metrics
- No merged PRs in 30d
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from tonsky/datascript
-
Difficulty 4/5 3-5 days Newbie friendliness 42/100
tonsky/datascript#498 · 1 comment ·
-
Difficulty 5/5 Over a week Newbie friendliness 10/100
tonsky/datascript#489 ·
-
Stack overflow when transacting :db.type/tupleAttrs with a :db.type/ref attr through :db.fn/call Open
Difficulty 4/5 3-5 days Newbie friendliness 35/100
tonsky/datascript#483 · 2 comments ·
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
tonsky/datascript#470 · 1 comment ·
-
Difficulty 4/5 3-5 days Newbie friendliness 25/100
tonsky/datascript#434 · 2 comments ·
All issues in tonsky/datascript
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
.Needs Triage .Team/UXWest Priority:P3 Type:New Feature
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
-
Difficulty 1/5 Under an hour Newbie friendliness 90/100
-
Difficulty 1/5 Under an hour Newbie friendliness 88/100
-
needs triage
Difficulty 1/5 Under an hour Newbie friendliness 90/100