Skip to content

feat: workspace with the refuse-all pipeline, census and quality gates - #2

Merged
kvlonge merged 4 commits into
mainfrom
feat/bootstrap
Oct 24, 2026
Merged

kvlonge merged 4 commits into
mainfrom
feat/bootstrap

Conversation

@kvlonge

@kvlonge kvlonge commented Oct 24, 2026

Copy link
Copy Markdown
Contributor

Why

P0 of SQLQuack (CHI-831). It turns the May skeleton into the real workspace. Every construct is refused with a structured reason, and the quality gates block merges from the first commit.

Changes

  • Workspace crates: sqlquack-core (guarded parsing, classification, refusals, tree comparison, both re-parse checks), sqlquack-rules (empty catalogue), stub crates for snowflake, duckdb and compare, and the sqlquack facade with the census command.
  • Polyglot pinned to sqlbuild's revision, without transpile.
  • Gates: make check-ci (fmt, clippy -D warnings, the workspace lints, ruff, ty, fensu), a pinned toolchain, and CI with a cached dependency build.
  • Metadata: the crate repository URL and licence metadata are fixed.
  • Docs: a README, architecture notes and AGENTS.md.

Verification

  • make check-ci and make test pass locally, and the hygiene scan is clean.
  • A local census of a large private project parses all files, and its results match the earlier research.

Replace the early skeleton with small crates: sqlquack-core (parsing,
construct classification, refusals, tree comparison and both re-parse
checks), sqlquack-rules (empty catalogue), sqlquack-snowflake,
sqlquack-duckdb and sqlquack-compare (empty), and sqlquack (pipeline,
census and command line). Polyglot is pinned without its transpile
feature.
make check-ci runs rustfmt, clippy with -D warnings, fensu with the Rust
rule pack, ruff and ty. CI runs check-ci and the tests with a cached
dependency build.
@kvlonge
kvlonge merged commit 524995d into main Oct 24, 2026
1 check passed
kvlonge added a commit that referenced this pull request Nov 4, 2026
A page that defines one name several times (per cloud, per stage kind,
per authentication method) kept only its last definition. Each variant
is now its own definition, named by the page qualifier when the page
gives one, e.g. "cloudProviderParams (for Amazon S3)", else "#2", "#3",
so every id stays <source>::<name>. A form's uses lists every variant
of a name its grammar refers to. Only ddl, dml and security_admin
change; no form grammar changes.
kvlonge added a commit that referenced this pull request Nov 4, 2026
…ons, four readings

Obligation builder (scripts/syntax_obligations/_helpers/derive.py):
- A keyword or parenthesis that occurs more than once in one production
  and branch now gets a missing-keyword negative for each occurrence
  (the later ones targeted "#2", "#3"...). Before, only the first
  occurrence was tested, for example SNAPSHOT in ALTER SNAPSHOT SET ...
  ADD SNAPSHOT.
- A repeated list option such as [ , ... ] now counts as an independent
  option for interaction_all_options, so [ DISTINCT ] <expr> [ , ... ]
  gets the row.

Readings: SYSTEM$CLUSTERING_DEPTH and _RATIO take the column list as
optional; LAST_DAY takes the date part quoted or unquoted;
WAREHOUSE_METERING_HISTORY gains a production with its named arguments in
reverse order.

Two new interaction cases repeat SQL Snowflake already rejected
(MINHASH ( v1 , DISTINCT 1 , 1 ) and ALTER DYNAMIC TABLE ... ADD SEARCH
OPTIMIZATION ON EQUALITY ( v1 ) , EQUALITY ( v1 ) EQUALITY); both are
observed under D113.
@kvlonge
kvlonge deleted the feat/bootstrap 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