UNPKG

drizzle-orm

Version:

Drizzle ORM package for SQL databases

136 lines 4.64 kB
import { entityKind } from "../entity.js"; import { NoopLogger } from "../logger.js"; import { PgTransaction } from "../pg-core/index.js"; import { PgPreparedQuery, PgSession } from "../pg-core/session.js"; import { fillPlaceholders } from "../sql/sql.js"; import { tracer } from "../tracing.js"; import { mapResultRow } from "../utils.js"; class BunSQLPreparedQuery extends PgPreparedQuery { constructor(client, queryString, params, logger, fields, _isResponseInArrayMode, customResultMapper) { super({ sql: queryString, params }); this.client = client; this.queryString = queryString; this.params = params; this.logger = logger; this.fields = fields; this._isResponseInArrayMode = _isResponseInArrayMode; this.customResultMapper = customResultMapper; } static [entityKind] = "BunSQLPreparedQuery"; async execute(placeholderValues = {}) { return tracer.startActiveSpan("drizzle.execute", async (span) => { const params = fillPlaceholders(this.params, placeholderValues); span?.setAttributes({ "drizzle.query.text": this.queryString, "drizzle.query.params": JSON.stringify(params) }); this.logger.logQuery(this.queryString, params); const { fields, queryString: query, client, joinsNotNullableMap, customResultMapper } = this; if (!fields && !customResultMapper) { return tracer.startActiveSpan("drizzle.driver.execute", () => { return client.unsafe(query, params); }); } const rows = await tracer.startActiveSpan("drizzle.driver.execute", () => { span?.setAttributes({ "drizzle.query.text": query, "drizzle.query.params": JSON.stringify(params) }); return client.unsafe(query, params).values(); }); return tracer.startActiveSpan("drizzle.mapResponse", () => { return customResultMapper ? customResultMapper(rows) : rows.map((row) => mapResultRow(fields, row, joinsNotNullableMap)); }); }); } all(placeholderValues = {}) { return tracer.startActiveSpan("drizzle.execute", async (span) => { const params = fillPlaceholders(this.params, placeholderValues); span?.setAttributes({ "drizzle.query.text": this.queryString, "drizzle.query.params": JSON.stringify(params) }); this.logger.logQuery(this.queryString, params); return tracer.startActiveSpan("drizzle.driver.execute", () => { span?.setAttributes({ "drizzle.query.text": this.queryString, "drizzle.query.params": JSON.stringify(params) }); return this.client.unsafe(this.queryString, params); }); }); } /** @internal */ isResponseInArrayMode() { return this._isResponseInArrayMode; } } class BunSQLSession extends PgSession { constructor(client, dialect, schema, options = {}) { super(dialect); this.client = client; this.schema = schema; this.options = options; this.logger = options.logger ?? new NoopLogger(); } static [entityKind] = "BunSQLSession"; logger; prepareQuery(query, fields, name, isResponseInArrayMode, customResultMapper) { return new BunSQLPreparedQuery( this.client, query.sql, query.params, this.logger, fields, isResponseInArrayMode, customResultMapper ); } query(query, params) { this.logger.logQuery(query, params); return this.client.unsafe(query, params).values(); } queryObjects(query, params) { return this.client.unsafe(query, params); } transaction(transaction, config) { return this.client.begin(async (client) => { const session = new BunSQLSession( client, this.dialect, this.schema, this.options ); const tx = new BunSQLTransaction(this.dialect, session, this.schema); if (config) { await tx.setTransaction(config); } return transaction(tx); }); } } class BunSQLTransaction extends PgTransaction { constructor(dialect, session, schema, nestedIndex = 0) { super(dialect, session, schema, nestedIndex); this.session = session; } static [entityKind] = "BunSQLTransaction"; transaction(transaction) { return this.session.client.savepoint((client) => { const session = new BunSQLSession( client, this.dialect, this.schema, this.session.options ); const tx = new BunSQLTransaction(this.dialect, session, this.schema); return transaction(tx); }); } } export { BunSQLPreparedQuery, BunSQLSession, BunSQLTransaction }; //# sourceMappingURL=session.js.map