Skip to content

Take the JDBC connectors off the trial path, drop /fromdb, add a schema that fits - #55

Open
sqlparser wants to merge 1 commit into
masterfrom
licensed-only-and-hr-mini
Open

Take the JDBC connectors off the trial path, drop /fromdb, add a schema that fits#55
sqlparser wants to merge 1 commit into
masterfrom
licensed-only-and-hr-mini

Conversation

@sqlparser

Copy link
Copy Markdown
Owner

The three product findings from the 2026-08-24 first-visit evaluation. All the same shape: a trial user meets a licensed-only or non-existent feature and reads the failure as GSP does not work.

1. connector/licensed-only/

These modules need gudusoft.gsqlparser.sqlenv.T*SQLDataSource, which the public trial artifact does not ship. Sitting at the repository root they read as part of the ordinary demo set — the evaluator started there, met a wall of cannot find symbol, and concluded the library did not compile.

Now the directory name says what they are, licensed-only/README.md says why, and each POM carries a default-active trial-guard profile:

$ mvn -f licensed-only/snowflakeConnector/pom.xml compile
[ERROR] This module needs a LICENSED General SQL Parser, not the public trial jar
this repository resolves by default. ... To evaluate metadata-aware column
resolution on the trial parser instead, run the columninspect demo with
samples/columninspect/metadata.json. Once you have a licensed parser installed,
build with -Plicensed.

-Plicensed deactivates the guard; verified that it does, and that the build then proceeds to the real compile.

The guard could not fire until the drivers were real coordinates. Oracle’s was com:ojdbc:1.1.1 and SQL Server’s sqljdbc4:4.0, both system scope pointing into lib/ at jars that have never existed in this checkout, so Maven died during dependency resolution — before any plugin could speak. They are com.oracle.database.jdbc:ojdbc8 and com.microsoft.sqlserver:mssql-jdbc from Central now, which also removes the last two system-scope dependencies here and makes both visible to Dependabot.

2. /fromdb removed

Along with /exportonly and /metadataoutput. They parsed and then did nothing: SqlflowIngester.export(...) was commented out and the class deleted, so the tool emitted an empty <dlineage/> and wrote no metadata.json — while the readme taught the feature across two sections with four vendor examples. /fromdb now gets the same answer as passing no input at all.

A parsed no-op is worse than a missing feature, because the documentation grows around it.

3. samples/dlineageBasic/oracle/hr_mini/

All 16 oversize .sql files under samples/ are vendor dumps in dlineageBasic/ — 10,378 to 99,139 bytes against a 10,000-byte trial cap. "Lineage on a real schema" therefore returned a licence error dressed as an <error> element inside otherwise-normal output, which reads as no lineage found.

hr_mini.sql is 5,212 bytes and yields 120 relationships (82 fdd, 38 fdr) from staging tables, a view over a LEFT JOIN, a CTE, aggregates, CASE WHEN and a correlated subquery — all DDL inline, so every column resolves without a metadata.json.

Both new behaviours are CI-enforced, on output not exit status

Both failure modes either exit 0 or fail for a plausible-looking wrong reason, so an exit-code check would pass either way:

script asserts
check-licensed-only-guard.sh (new, in build.yml) each module prints the licence message and fails — failing with the old cannot find symbol also exits non-zero
smoke-dlineage-jar.sh (extended) hr_mini stays under 10,000 bytes, keeps producing ≥50 relationships, and never carries the trial-limit error

Verified locally

156 tests · 79 demos start · 24/24 demo cases · dlineage jar in JSON and XML · stale-docs self-test 5/5 · pre-commit hook 4/4 · parser version consistent at 4.2.6 across all four POMs (paths updated in set-parser-version.sh, .githooks/pre-commit and both workflows).

🤖 Generated with Claude Code

https://claude.ai/code/session_01UK3dBXFXqiDRYJxz1YxWCr

…ma that fits

Three findings from the 2026-08-24 first-visit evaluation, all of them the same
shape: a trial user meets a licensed-only or non-existent feature and reads the
failure as "GSP does not work".

connector/ -> licensed-only/
    These modules need gudusoft.gsqlparser.sqlenv.T*SQLDataSource, which the
    public trial artifact does not ship. At the repository root they read as
    part of the ordinary demo set, and the evaluator started there. Now the
    directory says what they are, licensed-only/README.md says why, and each POM
    carries a default-active trial-guard profile that stops at validate with a
    message naming the boundary and pointing at columninspect, which does the
    same metadata-aware resolution offline. -Plicensed turns the guard off.

    The guard could not fire until the drivers were real coordinates: Oracle's
    was com:ojdbc:1.1.1 and SQL Server's sqljdbc4:4.0, both system scope
    pointing into lib/ at jars that have never existed here, so Maven died
    during dependency resolution before any plugin could speak. They are
    ojdbc8 and mssql-jdbc from Central now, which also removes the last two
    system-scope dependencies in the repository and makes them visible to
    Dependabot.

/fromdb, /exportonly and /metadataoutput removed
    They parsed and did nothing. SqlflowIngester.export(...) was commented out
    and the class deleted, so the tool emitted an empty <dlineage/> and wrote no
    metadata.json, while the readme taught the feature in two sections with four
    vendor examples. /fromdb now gets the same answer as passing no input at
    all. A parsed no-op is worse than a missing feature: the docs grow around
    it.

samples/dlineageBasic/oracle/hr_mini/
    All 16 oversize .sql files under samples/ are vendor dumps in dlineageBasic/
    -- 10,378 to 99,139 bytes against a 10,000-byte trial cap -- so "lineage on
    a real schema" returned a licence error dressed as an <error> element inside
    otherwise-normal output, which reads as "no lineage found". hr_mini is 5,212
    bytes and yields 120 relationships (82 fdd, 38 fdr) from staging tables, a
    view over a LEFT JOIN, a CTE, aggregates, CASE WHEN and a correlated
    subquery, with all its DDL inline so every column resolves.

Both new behaviours are CI-enforced, and both assert on output rather than exit
status, because both failure modes exit 0 or fail for a plausible-looking wrong
reason:

  - check-licensed-only-guard.sh asserts each module prints the licence message
    AND fails; failing with the old "cannot find symbol" also exits non-zero.
  - smoke-dlineage-jar.sh fails if hr_mini reaches 10,000 bytes, drops below 50
    relationships, or starts carrying the trial-limit error.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UK3dBXFXqiDRYJxz1YxWCr
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