rules aren't correctly unifying
まだ誰も着手していません。
評価
調査の方向性
Issue にはソースファイルやテストが記載されていません。db/q を通じて再帰ルールの例を両方再現し、そのエントリポイントからルール評価と単一化を追跡してください。完了条件は、1 つ目のクエリが期待されるルートを返し、2 つ目のクエリが無関係なエンティティを返したりエラーをスローしたりしなくなることです。
索引モデルが issue の本文から書いたものです。
説明
The problem: walk references until finding the root reference.
This example returns {:id :a :root 1} in the results as expected for datomic, but fails in datascript:
(let [c (db/empty-db {:id {:db/unique :db.unique/identity}})]
(db/q '[:find (pull ?root [*]) :in $ ?id % :where [?e :id ?id] (root ?id ?root)]
(db/db-with c [{:id :a :root 1} {:id :b :parent [:id :a]} {:id :c :parent [:id :b]} {:id :d :root 2}])
:b
'[[(root ?e ?e) (not [?e :parent _])]
[(root ?e ?r) [?e :parent ?p] (root ?p ?r)]]))
;; => ExceptionInfo Insufficient bindings: none of #{?root} is bound in (not [?root :parent _]) clojure.core/ex-info (core.clj:4739)
This example throws an ArrayIndexOutOfBoundsException in datomic 🤷♂️ while in datascript returns too many results (however did it reach {:id :d}?):
(let [c (db/empty-db {:id {:db/unique :db.unique/identity}})]
(db/q '[:find (pull ?root [*]) :in $ ?id % :where [?e :id ?id] (root ?id ?root)]
(db/db-with c [{:id :a :root 1} {:id :b :parent [:id :a]} {:id :c :parent [:id :b]} {:id :d :root 2}])
:b
'[[(root ?e ?e) [?e :root _]]
[(root ?e ?r) [?e :parent ?p] (root ?p ?r)]]))
;; => ([{:db/id 4, :id :d, :root 2}] [{:db/id 1, :id :a, :root 1}])
- 主要言語
- Clojure
- スター
- 5.8k
- フォーク
- 318
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
tonsky/datascript のほかの issue
-
難易度 4/5 3〜5日 初心者へのやさしさ 42/100
tonsky/datascript#498 · コメント 1 件 ·
-
難易度 5/5 1週間以上 初心者へのやさしさ 10/100
tonsky/datascript#489 ·
-
Stack overflow when transacting :db.type/tupleAttrs with a :db.type/ref attr through :db.fn/callオープン
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
tonsky/datascript#483 · コメント 2 件 ·
-
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
tonsky/datascript#470 · コメント 1 件 ·
-
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
tonsky/datascript#441 · コメント 1 件 · リアクション 3 件 ·
tonsky/datascript の issue をすべて見る
似ている issue
-
.Needs Triage Priority:P3 Type:New Feature
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
metabase/metabase#83625 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
replikativ/datahike#1105 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 90/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
clj-commons/loom#166 ·
メンテナーはふだん 1 日以内に返信