Yicong-Huang opened a new pull request, #6145:
URL: https://github.com/apache/texera/pull/6145

   ### What changes were proposed in this PR?
   
   jOOQ codegen reads the live postgres at sbt-compile time, so pulling main 
after a PR adds a new `sql/updates/N.sql` breaks `bin/local-dev.sh up` with 
`not found: value <NEW_TABLE>` until the update is applied by hand (hit today 
with `27.sql` / `workflow_cover_image` from #5704). `infra_ensure_db_schema` 
only bootstrapped `sql/texera_ddl.sql` on a fresh DB; nothing reconciled an 
existing local DB, and the repo's official runner (`sql/docker-compose.yml`, 
liquibase) is manual with creds that don't match local-dev's.
   
   This PR teaches local-dev to reconcile the schema before any sbt build, on 
every path that builds (full-stack `up`, `auto`, single-service `up`):
   
   - `parse_changelog_changesets` parses `sql/changelog.xml` (BSD-awk 
compatible, skips the commented example changeset) into id/author/path triples.
   - `infra_apply_sql_updates` diffs those against liquibase's 
`public.databasechangelog` and psql-applies the missing updates in document 
order, with the same normalization the official liquibase compose uses: strip 
the `\c` meta-command (not every file has one — `23.sql` doesn't) and connect 
to `texera_db` directly; the files' own `SET search_path` targets the schema. 
Applications are recorded in `databasechangelog` (liquibase-created DDL, 
`MD5SUM` left `NULL` so a later real liquibase run adopts the rows and fills 
checksums instead of re-executing).
   - A fresh bootstrap seeds every changeSet as applied — `texera_ddl.sql` is 
kept in sync with `sql/updates/*`, so replaying them would be redundant.
   - A failing update aborts with a clear message BEFORE the sbt build instead 
of letting the compile die on missing generated tables. The all-current fast 
path is one psql query + one awk parse.
   
   ### Any related issues, documentation, discussions?
   
   Closes #6144. The `--help` header's docker-infra paragraph documents the 
behavior. Related context: the official liquibase runner in 
`sql/docker-compose.yml` remains the mechanism for non-local deployments (the 
`ddl-change` email workflow notifies admins); this PR only automates the local 
dev loop while staying compatible with its bookkeeping.
   
   ### How was this PR tested?
   
   - `bash bin/local-dev/tests/test_local_dev_sh.sh` — 50 passed, 0 failed. New 
cases: the reconcile function exists and is wired into `infra_ensure_db_schema` 
on both paths (apply on existing DB, seed on fresh bootstrap), tracks via 
`databasechangelog` with `ON_ERROR_STOP`, the changelog parser handles the real 
`sql/changelog.xml` (5 changesets, commented example skipped), and every 
referenced update file exists on disk.
   - Live test against a real local dev DB that had `27.sql` applied manually 
and no `databasechangelog` table: first run applied changeSets 23–27 
idempotently (and surfaced that `23.sql`'s `notebook` tables had in fact never 
been applied to this DB — now healed) and wrote the 5 tracking rows with 
correct authors; second run took the fast path ("schema current"). Verified 
`notebook` exists in the `texera_db` schema afterwards.
   
   ### Was this PR authored or co-authored using generative AI tooling?
   
   Generated-by: Claude Code (Claude Fable 5)


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to