Skip to content

Parse qualified window calls, paths after parentheses and :: PERIOD - #77

Merged
kvlonge merged 3 commits into
mainfrom
fix/expr-gaps
Nov 5, 2026
Merged

kvlonge merged 3 commits into
mainfrom
fix/expr-gaps

Conversation

@kvlonge

@kvlonge kvlonge commented Nov 5, 2026

Copy link
Copy Markdown
Contributor

The product lane's five expression gaps, checked against A's import 159 (evidence cd8b9c6):

  • s1.f1 ( 1 ) OVER ( … ) and d1.s1.f1 ( 1 ) OVER ( … ): Snowflake parses them (2060, semantic). Now accepted. OVER ; stays refused (1003).
  • ( <expr> ) : a . b, including a parenthesized window call: accepted by Snowflake, now parsed as a JSON path on the parenthesized base. ( … ) : ; stays refused.
  • :: PERIOD ( DATE ): accepted by Snowflake, now gives the same type as CAST ( … AS PERIOD ( DATE ) ). :: PERIOD ( ) stays refused. Typed PERIOD literals already parsed.
  • WITH v1 AS ( … ) , RECURSIVE r …: Snowflake refuses it (1003). The parser already agreed; a regression row was added.
  • Zero-argument lambdas ( ) -> 0: Snowflake refuses them (sf.functions.accumulate.kdf85f4560af2, 1003), so they stay refused.

All 12 import 159 probes match. Across the 59,153 earlier receipted statements: 0 new contradictions. Gate result follows in a comment.

Snowflake receipts in import 159 show three expression forms it parses
that SQLQuack refused:

- a schema- or database-qualified call with OVER (2060, semantic);
- a colon path after a parenthesized expression, such as
  ( FIRST_VALUE ( ... ) OVER ( ... ) ) : a . b;
- :: PERIOD ( DATE ), now read like CAST ( ... AS PERIOD ( DATE ) ).

The same import confirms that RECURSIVE after another CTE is a syntax error
and that a recursive later CTE without the keyword runs; the parser already
agreed. Zero-argument lambdas stay refused (sf.functions.accumulate,
errno 1003).
@kvlonge
kvlonge merged commit 292aca7 into main Nov 5, 2026
1 check passed

kvlonge commented Nov 5, 2026

Copy link
Copy Markdown
Contributor Author

Landed under D94: main = 292aca7 (fast-forward from d67f0c9).

  • Gate: make check-merge RECORDER=0 exit 0 on head 292aca7 (contains main d67f0c9).
  • Trees: main and head are both 254286ca.
  • Receipt-direct check (catalogue 49fa3df, evidence cd8b9c6): 5,078 contradicted receipts at main, 5,071 at the head. 7 fixed (import 159: qualified window, paren path, PERIOD), 0 new.
  • Stale reviews: none.
  • Website CI on 292aca7: passed.

kvlonge added a commit that referenced this pull request Nov 5, 2026
23 of 24 forms read and approved; 2,388 of 3,351 verified. No regression
against f93bd77.
kvlonge added a commit that referenced this pull request Nov 5, 2026
The approved round 7 catalogue with the D149b known gaps, on parser tree
2de58a4 (main with #77): 3479 forms and 616 satisfied obligations, from
3475 and 500. The baseline was recorded on catalogue 443acff.
sf.scripting.let.let-cursor-for.cursor-assignment-syntax.o013 is retired
by the catalogue (D118 review fixes): its replacement o016 tests the same
reserved-keyword identifier class with FROM, and is satisfied once its
receipts (import-20261104-89) are tracked.
@kvlonge
kvlonge deleted the fix/expr-gaps branch November 9, 2026 21:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant