mirror of
https://github.com/withastro/astro.git
synced 2025-02-24 22:46:02 -05:00
chore: remove db.batch() for now
This commit is contained in:
parent
21ef62cd35
commit
a3fcfdced8
1 changed files with 2 additions and 59 deletions
|
@ -3,7 +3,6 @@ import { createClient } from '@libsql/client';
|
|||
import type { LibSQLDatabase } from 'drizzle-orm/libsql';
|
||||
import { drizzle as drizzleLibsql } from 'drizzle-orm/libsql';
|
||||
import { drizzle as drizzleProxy } from 'drizzle-orm/sqlite-proxy';
|
||||
import { AsyncLocalStorage } from 'node:async_hooks';
|
||||
import { z } from 'zod';
|
||||
|
||||
const isWebContainer = !!process.versions?.webcontainer;
|
||||
|
@ -77,64 +76,8 @@ export function createRemoteDatabaseClient(appToken: string, remoteDbURL: string
|
|||
return { rows: rowValues };
|
||||
});
|
||||
|
||||
const batchContext = new AsyncLocalStorage<{ queries: InStatement[] }>();
|
||||
(db as any).batch = (drizzleQueries: Array<Promise<unknown>>) => {
|
||||
return batchContext.run({ queries: [] }, async () => {
|
||||
await Promise.all(drizzleQueries);
|
||||
|
||||
const { queries } = batchContext.getStore()!;
|
||||
const res = await fetch(url, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
Authorization: `Bearer ${appToken}`,
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify(queries),
|
||||
});
|
||||
if (!res.ok) {
|
||||
throw new Error(
|
||||
`Failed to execute batch queries.\nFull error: ${res.status} ${await res.text()}}`
|
||||
);
|
||||
}
|
||||
|
||||
const queryResultSchema = z.array(
|
||||
z.object({
|
||||
columns: z.array(z.string()),
|
||||
columnTypes: z.array(z.string()),
|
||||
rows: z.array(z.array(z.unknown())),
|
||||
rowsAffected: z.number(),
|
||||
lastInsertRowid: z.unknown().optional(),
|
||||
})
|
||||
);
|
||||
|
||||
try {
|
||||
const json = await res.json();
|
||||
const rawResults = queryResultSchema.parse(json);
|
||||
let results: unknown[] = [];
|
||||
for (const rawResult of rawResults) {
|
||||
const ignoreReturning = rawResult.rows.length === 0 && rawResult.rowsAffected > 0;
|
||||
if (ignoreReturning) {
|
||||
results.push(rawResult);
|
||||
continue;
|
||||
}
|
||||
const rows = rawResult.rows.map((row) => {
|
||||
let obj: Record<string, unknown> = {};
|
||||
for (const [idx, column] of rawResult.columns.entries()) {
|
||||
obj[column] = row[idx];
|
||||
}
|
||||
return obj;
|
||||
});
|
||||
results.push(rows);
|
||||
}
|
||||
return results;
|
||||
} catch (e) {
|
||||
throw new Error(
|
||||
`Failed to execute batch queries.\nFull error: Unexpected JSON response. ${
|
||||
e instanceof Error ? e.message : String(e)
|
||||
}`
|
||||
);
|
||||
}
|
||||
});
|
||||
(db as any).batch = (_drizzleQueries: Array<Promise<unknown>>) => {
|
||||
throw new Error('db.batch() is not currently supported.');
|
||||
};
|
||||
return db;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue