From da219826e1b50c8c9044bee6e6f655215bc30468 Mon Sep 17 00:00:00 2001 From: Corie Watson Date: Mon, 7 Sep 2026 04:16:10 +0100 Subject: [PATCH] fix(bigquery): preserve project on view updates Closes #3120 --- .../initializeLatestView.test.ts | 39 +++++++++++++++++++ .../src/bigquery/initializeLatestView.ts | 1 + 2 files changed, 40 insertions(+) diff --git a/firestore-bigquery-export/firestore-bigquery-change-tracker/src/__tests__/bigquery/materializedViews/initializeLatestView.test.ts b/firestore-bigquery-export/firestore-bigquery-change-tracker/src/__tests__/bigquery/materializedViews/initializeLatestView.test.ts index ab9d3aa848..27303d5e9b 100644 --- a/firestore-bigquery-export/firestore-bigquery-change-tracker/src/__tests__/bigquery/materializedViews/initializeLatestView.test.ts +++ b/firestore-bigquery-export/firestore-bigquery-change-tracker/src/__tests__/bigquery/materializedViews/initializeLatestView.test.ts @@ -80,5 +80,44 @@ describe("initializeLatestView", () => { expect(initializeLatestMaterializedView).not.toHaveBeenCalled(); }); + + it("uses the BigQuery project when updating an existing view", async () => { + const originalProjectId = process.env.PROJECT_ID; + process.env.PROJECT_ID = "function-project"; + const metadata = { + schema: { + fields: [{ name: "document_id" }, { name: "old_data" }], + }, + view: { query: "SELECT FIRST_VALUE(data)" }, + }; + mockView.getMetadata.mockResolvedValueOnce([metadata]); + + try { + await initializeLatestView({ + bq: { projectId: "bigquery-project" } as any, + dataset: { id: "test_dataset" } as any, + view: mockView as any, + viewExists: true, + rawChangeLogTableName: "test_raw_table", + rawLatestViewName: "test_raw_view", + changeTrackerConfig: { + ...mockConfig, + useNewSnapshotQuerySyntax: true, + }, + }); + + expect(mockView.setMetadata).toHaveBeenCalledWith(metadata); + expect(metadata.view.query).toContain( + "`bigquery-project.test_dataset.test_raw_table`" + ); + expect(metadata.view.query).not.toContain("function-project"); + } finally { + if (originalProjectId === undefined) { + delete process.env.PROJECT_ID; + } else { + process.env.PROJECT_ID = originalProjectId; + } + } + }); }); }); diff --git a/firestore-bigquery-export/firestore-bigquery-change-tracker/src/bigquery/initializeLatestView.ts b/firestore-bigquery-export/firestore-bigquery-change-tracker/src/bigquery/initializeLatestView.ts index b0e7fc9394..fe8ee95717 100644 --- a/firestore-bigquery-export/firestore-bigquery-change-tracker/src/bigquery/initializeLatestView.ts +++ b/firestore-bigquery-export/firestore-bigquery-change-tracker/src/bigquery/initializeLatestView.ts @@ -104,6 +104,7 @@ export async function initializeLatestView({ datasetId: config.datasetId, tableName: rawChangeLogTableName, schema, + bqProjectId: bq.projectId, useLegacyQuery: !config.useNewSnapshotQuerySyntax, });