This document tracks items that should be completed or decided before publishing sqool to a public repository (e.g. Maven Central). It aligns with SQL Parser Implementation Checklist §13 and Milestone 6: Remaining Implementation Plan.
Decided. The following modules are published to Maven:
| Module | ArtifactId | Purpose |
|---|---|---|
| Core API and runtime | sqool-core |
Public parser API, parse options, diagnostics, source spans, shared parser utilities. |
| AST model | sqool-ast |
Normalized AST nodes, dialect raw statement wrappers. |
| MySQL grammar | sqool-grammar-mysql |
Vendored MySQL ANTLR grammar and generated parser/lexer; required by the MySQL dialect. |
| PostgreSQL grammar | sqool-grammar-postgresql |
Vendored PostgreSQL ANTLR grammar and generated parser/lexer. |
| Oracle grammar | sqool-grammar-oracle |
Vendored Oracle SQL ANTLR grammar and generated parser/lexer. |
| SQLite grammar | sqool-grammar-sqlite |
Vendored SQLite ANTLR grammar and generated parser/lexer. |
| MySQL dialect | sqool-dialect-mysql |
MySQL parser and AST mapping. Depends on sqool-grammar-mysql. |
| PostgreSQL dialect | sqool-dialect-postgresql |
PostgreSQL parser and AST mapping. Depends on sqool-grammar-postgresql. |
| Oracle dialect | sqool-dialect-oracle |
Oracle SQL parser and AST mapping. Depends on sqool-grammar-oracle. |
| SQLite dialect | sqool-dialect-sqlite |
SQLite parser and AST mapping. Depends on sqool-grammar-sqlite. |
Not published: sqool-conformance, sqool-bench — they are test/benchmark only.
Coordinates: io.github.e4c5:sqool-core:VERSION, io.github.e4c5:sqool-ast:VERSION, io.github.e4c5:sqool-dialect-mysql:VERSION, etc.
Gradle: Maven Publish is configured in the root build.gradle.kts for the publishable modules. Run ./gradlew publishToMavenLocal to publish to the local Maven repository, or configure a remote repository and run publish.
- Decide which modules are published
- Define Maven group and artifact coordinates
- Configure publishing in Gradle (Maven Publish plugin, POM metadata, Javadoc/sources jars)
Adopted: Semantic Versioning (SemVer) — MAJOR.MINOR.PATCH.
| Change type | When to increment | Compatibility |
|---|---|---|
| MAJOR | Breaking changes to the public API or AST. | Consumers must migrate. |
| MINOR | New dialect support, new normalized statement/expression types, new public API in a backward-compatible way. | Backward compatible. |
| PATCH | Bug fixes, performance improvements, documentation, internal refactors with no API/AST change. | Backward compatible. |
Breaking changes include (but are not limited to):
- Removing or renaming public types or methods in
sqool-coreor the dialect facades. - Changing the shape of
ParseResult,ParseSuccess,ParseFailure,ParseOptions, orSyntaxDiagnostic. - Removing or renaming AST node types in
sqool-ast, or changing the meaning of existing AST nodes in a way that breaks consumers. - Dropping support for a previously supported dialect or Java version.
Pre-release: Use -SNAPSHOT for development (e.g. 0.1.0-SNAPSHOT). For release candidates, use -RC1, -RC2 (e.g. 1.0.0-RC1).
- Adopt a versioning scheme (semver)
- Document compatibility policy
- dialect-coverage.md is the single source of truth for supported constructs per dialect.
- README links to the Dialect Coverage Matrix and usage examples.
Benchmark reports: Stored as CI artifacts only (see CONTRIBUTING.md). On each push to main, the CI runs JMH and uploads the jmh-results artifact (JSON). For releases, attach or link to the benchmark artifact from the release tag run, or document in release notes that latest benchmarks are available from the main branch CI artifacts.
Feature support: For each release, document supported statement types and dialect coverage in the release notes. Link to dialect-coverage.md as the authoritative matrix. A one-paragraph “Feature support” summary can be copied from the README “Current parser coverage” section.
- Decide: benchmark reports are CI-only; optional attachment to release.
- Document: feature support = dialect-coverage.md + release-note summary.
Release process (tag-based):
- Ensure
mainis green (CI: build, test, check). - Update version in
build.gradle.kts(and any other places) from-SNAPSHOTto the release version (e.g.1.0.0). - Commit the version bump: e.g.
Release 1.0.0. - Tag the commit: e.g.
v1.0.0. - Push the tag. The release workflow runs: full check, then publish (if configured).
- After publishing, bump version to the next development version (e.g.
1.0.1-SNAPSHOT) and push.
CI quality gates before release: The release workflow runs ./gradlew check (which includes tests, checkstyle, spotless). Optionally run ./gradlew :sqool-bench:jmh locally to confirm no performance regressions.
Publishing to Maven Central: Configure the publish task to use OSSRH (Sonatype) and GPG signing. Add repository URL and credentials via environment variables or Gradle properties (do not commit secrets). See the release workflow for the trigger; complete the publish step with your OSSRH and signing setup.
- Define release process (tag-based)
- Add release workflow (check + publish placeholder)
- Document quality gates
Process: Documented in upstream-grammar-refresh.md. Summary:
-
Who: Maintainers.
-
When: On security or critical bug fix in upstream grammar; or when upgrading ANTLR; or on a scheduled review.
-
How: Copy/cherry-pick from upstream (e.g.
antlr/grammars-v4), update the grammar module’sUPSTREAM.md(commit hash, path), run./gradlew buildand conformance tests, run benchmarks. No automated sync; manual copy and validation. -
Document the process (see upstream-grammar-refresh.md)
-
Require UPSTREAM.md update when vendored revision changes
Last updated: Milestone 6 implementation.