Spaces:
Sleeping
Sleeping
| import { hashQuery, NoopCache } from "../cache/core/cache.js"; | |
| import { entityKind, is } from "../entity.js"; | |
| import { DrizzleError, DrizzleQueryError, TransactionRollbackError } from "../errors.js"; | |
| import { QueryPromise } from "../query-promise.js"; | |
| import { BaseSQLiteDatabase } from "./db.js"; | |
| class ExecuteResultSync extends QueryPromise { | |
| constructor(resultCb) { | |
| super(); | |
| this.resultCb = resultCb; | |
| } | |
| static [entityKind] = "ExecuteResultSync"; | |
| async execute() { | |
| return this.resultCb(); | |
| } | |
| sync() { | |
| return this.resultCb(); | |
| } | |
| } | |
| class SQLitePreparedQuery { | |
| constructor(mode, executeMethod, query, cache, queryMetadata, cacheConfig) { | |
| this.mode = mode; | |
| this.executeMethod = executeMethod; | |
| this.query = query; | |
| this.cache = cache; | |
| this.queryMetadata = queryMetadata; | |
| this.cacheConfig = cacheConfig; | |
| if (cache && cache.strategy() === "all" && cacheConfig === void 0) { | |
| this.cacheConfig = { enable: true, autoInvalidate: true }; | |
| } | |
| if (!this.cacheConfig?.enable) { | |
| this.cacheConfig = void 0; | |
| } | |
| } | |
| static [entityKind] = "PreparedQuery"; | |
| /** @internal */ | |
| joinsNotNullableMap; | |
| /** @internal */ | |
| async queryWithCache(queryString, params, query) { | |
| if (this.cache === void 0 || is(this.cache, NoopCache) || this.queryMetadata === void 0) { | |
| try { | |
| return await query(); | |
| } catch (e) { | |
| throw new DrizzleQueryError(queryString, params, e); | |
| } | |
| } | |
| if (this.cacheConfig && !this.cacheConfig.enable) { | |
| try { | |
| return await query(); | |
| } catch (e) { | |
| throw new DrizzleQueryError(queryString, params, e); | |
| } | |
| } | |
| if ((this.queryMetadata.type === "insert" || this.queryMetadata.type === "update" || this.queryMetadata.type === "delete") && this.queryMetadata.tables.length > 0) { | |
| try { | |
| const [res] = await Promise.all([ | |
| query(), | |
| this.cache.onMutate({ tables: this.queryMetadata.tables }) | |
| ]); | |
| return res; | |
| } catch (e) { | |
| throw new DrizzleQueryError(queryString, params, e); | |
| } | |
| } | |
| if (!this.cacheConfig) { | |
| try { | |
| return await query(); | |
| } catch (e) { | |
| throw new DrizzleQueryError(queryString, params, e); | |
| } | |
| } | |
| if (this.queryMetadata.type === "select") { | |
| const fromCache = await this.cache.get( | |
| this.cacheConfig.tag ?? (await hashQuery(queryString, params)), | |
| this.queryMetadata.tables, | |
| this.cacheConfig.tag !== void 0, | |
| this.cacheConfig.autoInvalidate | |
| ); | |
| if (fromCache === void 0) { | |
| let result; | |
| try { | |
| result = await query(); | |
| } catch (e) { | |
| throw new DrizzleQueryError(queryString, params, e); | |
| } | |
| await this.cache.put( | |
| this.cacheConfig.tag ?? (await hashQuery(queryString, params)), | |
| result, | |
| // make sure we send tables that were used in a query only if user wants to invalidate it on each write | |
| this.cacheConfig.autoInvalidate ? this.queryMetadata.tables : [], | |
| this.cacheConfig.tag !== void 0, | |
| this.cacheConfig.config | |
| ); | |
| return result; | |
| } | |
| return fromCache; | |
| } | |
| try { | |
| return await query(); | |
| } catch (e) { | |
| throw new DrizzleQueryError(queryString, params, e); | |
| } | |
| } | |
| getQuery() { | |
| return this.query; | |
| } | |
| mapRunResult(result, _isFromBatch) { | |
| return result; | |
| } | |
| mapAllResult(_result, _isFromBatch) { | |
| throw new Error("Not implemented"); | |
| } | |
| mapGetResult(_result, _isFromBatch) { | |
| throw new Error("Not implemented"); | |
| } | |
| execute(placeholderValues) { | |
| if (this.mode === "async") { | |
| return this[this.executeMethod](placeholderValues); | |
| } | |
| return new ExecuteResultSync(() => this[this.executeMethod](placeholderValues)); | |
| } | |
| mapResult(response, isFromBatch) { | |
| switch (this.executeMethod) { | |
| case "run": { | |
| return this.mapRunResult(response, isFromBatch); | |
| } | |
| case "all": { | |
| return this.mapAllResult(response, isFromBatch); | |
| } | |
| case "get": { | |
| return this.mapGetResult(response, isFromBatch); | |
| } | |
| } | |
| } | |
| } | |
| class SQLiteSession { | |
| constructor(dialect) { | |
| this.dialect = dialect; | |
| } | |
| static [entityKind] = "SQLiteSession"; | |
| prepareOneTimeQuery(query, fields, executeMethod, isResponseInArrayMode, customResultMapper, queryMetadata, cacheConfig) { | |
| return this.prepareQuery( | |
| query, | |
| fields, | |
| executeMethod, | |
| isResponseInArrayMode, | |
| customResultMapper, | |
| queryMetadata, | |
| cacheConfig | |
| ); | |
| } | |
| run(query) { | |
| const staticQuery = this.dialect.sqlToQuery(query); | |
| try { | |
| return this.prepareOneTimeQuery(staticQuery, void 0, "run", false).run(); | |
| } catch (err) { | |
| throw new DrizzleError({ cause: err, message: `Failed to run the query '${staticQuery.sql}'` }); | |
| } | |
| } | |
| /** @internal */ | |
| extractRawRunValueFromBatchResult(result) { | |
| return result; | |
| } | |
| all(query) { | |
| return this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), void 0, "run", false).all(); | |
| } | |
| /** @internal */ | |
| extractRawAllValueFromBatchResult(_result) { | |
| throw new Error("Not implemented"); | |
| } | |
| get(query) { | |
| return this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), void 0, "run", false).get(); | |
| } | |
| /** @internal */ | |
| extractRawGetValueFromBatchResult(_result) { | |
| throw new Error("Not implemented"); | |
| } | |
| values(query) { | |
| return this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), void 0, "run", false).values(); | |
| } | |
| async count(sql) { | |
| const result = await this.values(sql); | |
| return result[0][0]; | |
| } | |
| /** @internal */ | |
| extractRawValuesValueFromBatchResult(_result) { | |
| throw new Error("Not implemented"); | |
| } | |
| } | |
| class SQLiteTransaction extends BaseSQLiteDatabase { | |
| constructor(resultType, dialect, session, schema, nestedIndex = 0) { | |
| super(resultType, dialect, session, schema); | |
| this.schema = schema; | |
| this.nestedIndex = nestedIndex; | |
| } | |
| static [entityKind] = "SQLiteTransaction"; | |
| rollback() { | |
| throw new TransactionRollbackError(); | |
| } | |
| } | |
| export { | |
| ExecuteResultSync, | |
| SQLitePreparedQuery, | |
| SQLiteSession, | |
| SQLiteTransaction | |
| }; | |
| //# sourceMappingURL=session.js.map |