Fix a batch of v0.7.0 follow-up bugs#467
Merged
Merged
Conversation
Hands-on verification of the v0.7.0 release surfaced a set of defects in the REST layer and the startup/metadata handling. This addresses all of them; each fix was reproduced against a locally running emulator before and after, and is covered by a new regression test. - #333: with --port=0 the startup log printed ":0" instead of the OS-assigned port. The server now reports the actually bound HTTP and gRPC addresses through a SetListenCallback hook; the CLI prints them and the server library writes nothing to stdout itself. - #237 / #397 / #207: restarting against a persisted database wiped or duplicated metadata. The startup loader re-inserted datasets unconditionally (UNIQUE constraint violation) and overwrote the project datasetIDs with the empty CLI project (datasets vanished from the REST catalog). The loader now reconciles source-described objects with what is already stored, inserting only what is missing. - #136 / #396: an upload whose metadata omitted jobReference (the Node.js client) dereferenced a nil pointer; uploading to a missing dataset panicked. The upload job is normalized (a job id is generated when absent) and the missing-dataset case returns 404. - #339 / #249: tables.get did not populate numRows. It is now filled from the backing table row count. - #293 / #363 / #362 / #412: table updates were broken. tables.patch ignored the request body and echoed it back instead of a full Table resource; tables.update was an "unsupported" stub; the X-HTTP-Method-Override header (used by the Java client) was not honored. Patch now shallow-merges and persists, update replaces, both return the full resource, and a method-override wrapper runs before routing. - #144: inserting into a JSON column stored a string double-encoded and panicked on a native JSON object. JSON columns are now inserted via PARSE_JSON, and normalizeData no longer walks a JSON value as a STRUCT. - #347: a load job from gs:// failed with "could not find default credentials" when no GCS emulator was configured. The Storage client now falls back to anonymous access (honoring GOOGLE_APPLICATION_CREDENTIALS when set). - #392: external tables were created in metadata but never registered with the query engine, so querying them failed with "Table not found". External table source data is now materialized into a backing table through the load pipeline at creation time. Regression tests for every fix are added to server/server_test.go, plus server/gcs_internal_test.go for the unexported GCS client options helper. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6270c78 to
6173dc6
Compare
This was referenced May 19, 2026
Closed
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Hands-on verification of the v0.7.0 release surfaced a set of defects in the REST layer and in the startup / metadata handling. This PR fixes all of them. Each fix was reproduced against a locally running emulator before and after, and is covered by a new regression test.
Fixes
--port=0logged:0instead of the assigned portSetListenCallbackhook; the CLI prints them and the library writes nothing to stdoutjobReference(Node.js client) dereferenced a nil pointer; uploading to a missing dataset panickedtables.getdid not populatenumRowsnumRowsis filled from the backing table row counttables.patchignored the request body and echoed it back;tables.updatewas anunsupportedstub;X-HTTP-Method-Overridewas not honoredPARSE_JSON;normalizeDatano longer walks a JSON value as a STRUCTgs://failed with "could not find default credentials" when no GCS emulator was configuredGOOGLE_APPLICATION_CREDENTIALSwhen set)Testing
server/server_test.go(andserver/gcs_internal_test.gofor the unexported GCS options helper).go test ./...— full suite green, including thetest/e2emulti-client conformance suite (Python, Ruby, PHP, Node.js, Java,bqCLI).go vet ./...clean.🤖 Generated with Claude Code