Skip to content

UNION clause #67

@rfrneo4j

Description

@rfrneo4j
  1. AST (ast.rs)
    [ ] Add UnionClause struct (contains left and right queries)
    [ ] Add UnionAllClause struct (or use a flag)
    [ ] Consider: UNION might need a different Query structure (multiple queries combined)

  2. Clause enum (clauses.rs)
    [ ] Add Union(UnionClause) variant
    [ ] Add UnionAll(UnionClause) variant (or use a flag)

  3. Parser functions (clauses.rs)
    [ ] Add union_clause() parser function
    [ ] Add union_all_clause() parser function
    [ ] Parse two complete queries separated by UNION

  4. Clause dispatcher (clauses.rs)
    [ ] Add UNION to clause() function's alt() parser
    [ ] Add UNION ALL to clause() function's alt() parser

  5. Query assembly (clauses.rs)
    [ ] Handle UNION in parse_query() - may need different structure
    [ ] UNION combines two queries, so Query struct might need unions: Vec

  6. Clause order validation (clauses.rs)
    [ ] Add UNION to validate_clause_order() state machine
    [ ] UNION must connect two complete queries (both must have RETURN)
    [ ] UNION can only appear between complete queries

  7. Clause name function (clauses.rs)
    [ ] Add Clause::Union() => "UNION" to clause_name()
    [ ] Add Clause::UnionAll(
    ) => "UNION ALL" to clause_name()

  8. Validation extraction (validation.rs)
    [ ] Add UNION clause extraction in extract_query_elements()
    [ ] Validate both sides of UNION have compatible RETURN columns

  9. Tests (clauses.rs)
    [ ] Add parsing tests (UNION, UNION ALL)
    [ ] Add clause order validation tests
    [ ] Add validation extraction tests
    [ ] Test RETURN column compatibility

  10. Documentation
    [ ] Update PARSER_INTERNALS.md
    [ ] Update CHANGELOG.md

  11. Special considerations
    [ ] UNION requires rethinking Query structure (combines two queries)
    [ ] Both sides of UNION must have RETURN clauses
    [ ] RETURN columns must be compatible (same number, compatible types)

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions