Skip to content

Commit 77530ea

Browse files
committed
Merge remote-tracking branch 'origin' into feat/referral-program-disqualification
2 parents dacc70d + f786fc6 commit 77530ea

File tree

2 files changed

+29
-12
lines changed

2 files changed

+29
-12
lines changed

apps/ensindexer/src/lib/ensdb-client/ensdb-client.test.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,12 @@ describe("EnsDbClient", () => {
2727
const onConflictDoUpdateMock = vi.fn(async () => undefined);
2828
const valuesMock = vi.fn(() => ({ onConflictDoUpdate: onConflictDoUpdateMock }));
2929
const insertMock = vi.fn(() => ({ values: valuesMock }));
30-
const dbMock = { select: selectMock, insert: insertMock };
30+
const executeMock = vi.fn(async () => undefined);
31+
const txMock = { insert: insertMock, execute: executeMock };
32+
const transactionMock = vi.fn(async (callback: (tx: typeof txMock) => Promise<void>) =>
33+
callback(txMock),
34+
);
35+
const dbMock = { select: selectMock, insert: insertMock, transaction: transactionMock };
3136

3237
beforeEach(() => {
3338
selectResult.current = [];
@@ -37,6 +42,8 @@ describe("EnsDbClient", () => {
3742
onConflictDoUpdateMock.mockClear();
3843
valuesMock.mockClear();
3944
insertMock.mockClear();
45+
executeMock.mockClear();
46+
transactionMock.mockClear();
4047
vi.mocked(makeDrizzle).mockReturnValue(dbMock as unknown as ReturnType<typeof makeDrizzle>);
4148
});
4249

apps/ensindexer/src/lib/ensdb-client/ensdb-client.ts

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { NodePgDatabase } from "drizzle-orm/node-postgres";
2-
import { eq } from "drizzle-orm/sql";
2+
import { eq, sql } from "drizzle-orm/sql";
33

44
import { ensNodeMetadata } from "@ensnode/ensnode-schema";
55
import {
@@ -176,15 +176,25 @@ export class EnsDbClient implements EnsDbClientQuery, EnsDbClientMutation {
176176
private async upsertEnsNodeMetadata<
177177
EnsNodeMetadataType extends SerializedEnsNodeMetadata = SerializedEnsNodeMetadata,
178178
>(metadata: EnsNodeMetadataType): Promise<void> {
179-
await this.db
180-
.insert(ensNodeMetadata)
181-
.values({
182-
key: metadata.key,
183-
value: metadata.value,
184-
})
185-
.onConflictDoUpdate({
186-
target: ensNodeMetadata.key,
187-
set: { value: metadata.value },
188-
});
179+
await this.db.transaction(async (tx) => {
180+
// Ponder live-query triggers insert into live_query_tables.
181+
// Because this worker writes outside the Ponder runtime connection pool,
182+
// the temp table must be ensured to exist on this connection. Without this,
183+
// the upsert would fail with "relation 'live_query_tables' does not exist" error.
184+
await tx.execute(
185+
sql`CREATE TEMP TABLE IF NOT EXISTS live_query_tables (table_name TEXT PRIMARY KEY)`,
186+
);
187+
188+
await tx
189+
.insert(ensNodeMetadata)
190+
.values({
191+
key: metadata.key,
192+
value: metadata.value,
193+
})
194+
.onConflictDoUpdate({
195+
target: ensNodeMetadata.key,
196+
set: { value: metadata.value },
197+
});
198+
});
189199
}
190200
}

0 commit comments

Comments
 (0)