Home / Class/ SQLiteRemoteSession Class — drizzle-orm Architecture

SQLiteRemoteSession Class — drizzle-orm Architecture

Architecture documentation for the SQLiteRemoteSession class in session.ts from the drizzle-orm codebase.

Entity Profile

Dependency Diagram

graph TD
  8547eb9d_d783_00ed_fafd_5d4e77e8be54["SQLiteRemoteSession"]
  78995e64_a0d0_1533_378c_3e7415ac2520["session.ts"]
  8547eb9d_d783_00ed_fafd_5d4e77e8be54 -->|defined in| 78995e64_a0d0_1533_378c_3e7415ac2520
  0de67764_999f_72ca_d69f_9a54e0f52fd3["constructor()"]
  8547eb9d_d783_00ed_fafd_5d4e77e8be54 -->|method| 0de67764_999f_72ca_d69f_9a54e0f52fd3
  f8013c5d_6c37_8a54_7530_70bd5c397518["prepareQuery()"]
  8547eb9d_d783_00ed_fafd_5d4e77e8be54 -->|method| f8013c5d_6c37_8a54_7530_70bd5c397518
  cfd4dd2e_9055_cc46_2dd9_d7260b39e9f1["batch()"]
  8547eb9d_d783_00ed_fafd_5d4e77e8be54 -->|method| cfd4dd2e_9055_cc46_2dd9_d7260b39e9f1
  edc293b9_1f8b_73c9_efa3_55f353a3b344["transaction()"]
  8547eb9d_d783_00ed_fafd_5d4e77e8be54 -->|method| edc293b9_1f8b_73c9_efa3_55f353a3b344
  c29e3418_9a65_b7cc_cfb6_220564ee2bd7["extractRawAllValueFromBatchResult()"]
  8547eb9d_d783_00ed_fafd_5d4e77e8be54 -->|method| c29e3418_9a65_b7cc_cfb6_220564ee2bd7
  7d4ba329_4c58_61a8_fa6f_5ee7cf5331b7["extractRawGetValueFromBatchResult()"]
  8547eb9d_d783_00ed_fafd_5d4e77e8be54 -->|method| 7d4ba329_4c58_61a8_fa6f_5ee7cf5331b7
  6d6d7777_e1f0_a0b9_ec6e_f2cdd1e0ba04["extractRawValuesValueFromBatchResult()"]
  8547eb9d_d783_00ed_fafd_5d4e77e8be54 -->|method| 6d6d7777_e1f0_a0b9_ec6e_f2cdd1e0ba04

Relationship Graph

Source Code

drizzle-orm/src/sqlite-proxy/session.ts lines 29–118

export class SQLiteRemoteSession<
	TFullSchema extends Record<string, unknown>,
	TSchema extends TablesRelationalConfig,
> extends SQLiteSession<'async', SqliteRemoteResult, TFullSchema, TSchema> {
	static override readonly [entityKind]: string = 'SQLiteRemoteSession';

	private logger: Logger;
	private cache: Cache;

	constructor(
		private client: RemoteCallback,
		dialect: SQLiteAsyncDialect,
		private schema: RelationalSchemaConfig<TSchema> | undefined,
		private batchCLient?: AsyncBatchRemoteCallback,
		options: SQLiteRemoteSessionOptions = {},
	) {
		super(dialect);
		this.logger = options.logger ?? new NoopLogger();
		this.cache = options.cache ?? new NoopCache();
	}

	prepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(
		query: Query,
		fields: SelectedFieldsOrdered | undefined,
		executeMethod: SQLiteExecuteMethod,
		isResponseInArrayMode: boolean,
		customResultMapper?: (rows: unknown[][]) => unknown,
		queryMetadata?: {
			type: 'select' | 'update' | 'delete' | 'insert';
			tables: string[];
		},
		cacheConfig?: WithCacheConfig,
	): RemotePreparedQuery<T> {
		return new RemotePreparedQuery(
			this.client,
			query,
			this.logger,
			this.cache,
			queryMetadata,
			cacheConfig,
			fields,
			executeMethod,
			isResponseInArrayMode,
			customResultMapper,
		);
	}

	async batch<T extends BatchItem<'sqlite'>[] | readonly BatchItem<'sqlite'>[]>(queries: T) {
		const preparedQueries: PreparedQuery[] = [];
		const builtQueries: { sql: string; params: any[]; method: 'run' | 'all' | 'values' | 'get' }[] = [];

		for (const query of queries) {
			const preparedQuery = query._prepare();
			const builtQuery = (preparedQuery as RemotePreparedQuery).getQuery();
			preparedQueries.push(preparedQuery);
			builtQueries.push({ sql: builtQuery.sql, params: builtQuery.params, method: builtQuery.method });
		}

		const batchResults = await (this.batchCLient as AsyncBatchRemoteCallback)(builtQueries);
		return batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true));
	}

	override async transaction<T>(
		transaction: (tx: SQLiteProxyTransaction<TFullSchema, TSchema>) => Promise<T>,
		config?: SQLiteTransactionConfig,
	): Promise<T> {
		const tx = new SQLiteProxyTransaction('async', this.dialect, this, this.schema);
		await this.run(sql.raw(`begin${config?.behavior ? ' ' + config.behavior : ''}`));
		try {
			const result = await transaction(tx);
			await this.run(sql`commit`);
			return result;
		} catch (err) {
			await this.run(sql`rollback`);
			throw err;
		}
	}

	override extractRawAllValueFromBatchResult(result: unknown): unknown {
		return (result as SqliteRemoteResult).rows;
	}

Domain

Frequently Asked Questions

What is the SQLiteRemoteSession class?
SQLiteRemoteSession is a class in the drizzle-orm codebase, defined in drizzle-orm/src/sqlite-proxy/session.ts.
Where is SQLiteRemoteSession defined?
SQLiteRemoteSession is defined in drizzle-orm/src/sqlite-proxy/session.ts at line 29.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free