8000 streaming engine 4/9: not, not-join, or and Distinct (#473) · Issue #546 · project-minigraf/minigraf · GitHub
[go: up one dir, main page]

Skip to content

streaming engine 4/9: not, not-join, or and Distinct (#473) #546

Closed

Description

@adityamukho

Part 4 of 9 of #473. Design: docs/superpowers/specs/2026-10-11-streaming-engine-design.md (branch docs/473-streaming-engine-spec), §6.1, §6.2.

  • NotJoin/anti-join (hash on the right side), not
  • Union for or/or-join
  • Distinct only where the engine deduplicates today; :find stays a bag
  • Queries using these clauses move to the new engine; oracle differential tests pass

PRs for this part target v3 and must not use a closing keyword for #473.

Activity

  1. added this to the v3.0.0 milestone on Oct 11, 2026
  2. adityamukho commented on Oct 14, 2026

    @adityamukho
    CollaboratorAuthor

    From #545 (plan docs/superpowers/plans/2026-10-14-545-joins.md, decision 1): bound floats now join by IEEE == (0.0 = -0.0, NaN equals nothing), via Value's Hash. One comparison is left for #546: apply_not_clause / apply_not_join_clause (and their rule-derived variants) substitute bound values into the body as constants (substitute_pattern), so a bound float is matched there within f64::EPSILON by match_component. AntiJoin should use the same IEEE rule, and record the changed answers in CHANGELOG.

  3. adityamukho commented on Oct 19, 2026

    @adityamukho
    CollaboratorAuthor

    PR 1 of 2 merged on v3: #624 (c501f54), docs-site project-minigraf/minigraf-docs#23.

    • Executor (breaking): a value a not / not-join body takes from the outer row now compares as a join does (IEEE float ==, -0.0 == 0.0, keyword = ref to the entity it names). Four paths substituted it as a literal and matched floats within f64::EPSILON.
    • Engine: AntiJoin. A closed body runs once into a hash set of JoinKeys. Any other body, or one whose first pattern's entity is imported, runs per outer row from a Seed (Operator::rewind). Bodies are ordered by optimizer::plan_seeded.
    • Deviation from spec §4.4: a body whose first pattern has a constant entity is hashed, not correlated (plan decision 7).
    • Negation through a rule, and or, stay on the executor for now.
    • Envelope at 10M: not_probe 8.7 s → 0.29 s; not_join_hash capped (60 s) → 0.57 s; peak RSS 1.2–1.5 GiB → 6–9 MiB. Other workloads unchanged.

    Next: PR 2, or / or-join (plan steps 10–15). This issue stays open until it merges.

  4. adityamukho commented on Oct 19, 2026

    @adityamukho
    CollaboratorAuthor

    Done on v3: not/not-join in PR #624, or/or-join in PR #626 (docs: minigraf-docs#23, #24). Follow-up found along the way: #625.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestrustPull requests that update rust code

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      0