kysely-bun-worker
Version:
kysely dialect for bun:sqlite, running in worker
38 lines (35 loc) • 1.04 kB
JavaScript
import { parseBigInt } from 'kysely-generic-sqlite';
// src/executor.ts
function createSqliteExecutor(db, cache) {
const fn = cache ? "query" : "prepare";
const getStmt = (sql, parameters) => db[fn](sql, parameters);
return {
db,
query: (_, sql, parameters) => {
const stmt = getStmt(sql, parameters);
if (stmt.columnNames.length > 0) {
return {
rows: stmt.all()
};
} else {
const { changes, lastInsertRowid } = stmt.run();
return {
numAffectedRows: parseBigInt(changes),
insertId: parseBigInt(lastInsertRowid),
rows: []
};
}
},
close: () => db.close(),
iterator: (_, sql, parameters) => iterateData(getStmt(sql), parameters)
};
}
async function* iterateData(stmt, parameters) {
if (!("iterate" in stmt)) {
throw new Error("Streaming not supported, please upgrade to Bun@1.1.31 or later");
}
for (const row of stmt.iterate(...parameters || [])) {
yield row;
}
}
export { createSqliteExecutor };