Home / Class/ NeonHttpSession Class — drizzle-orm Architecture

NeonHttpSession Class — drizzle-orm Architecture

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

Entity Profile

Dependency Diagram

graph TD
  b5f39cbd_0992_c93c_e18e_1884481a37ac["NeonHttpSession"]
  8c075175_ed31_3ec7_952e_c0a6558abc34["session.ts"]
  b5f39cbd_0992_c93c_e18e_1884481a37ac -->|defined in| 8c075175_ed31_3ec7_952e_c0a6558abc34
  88fb68f3_7cd0_47db_ef4d_71dd6c8f4ee1["constructor()"]
  b5f39cbd_0992_c93c_e18e_1884481a37ac -->|method| 88fb68f3_7cd0_47db_ef4d_71dd6c8f4ee1
  869c5233_9fc6_1a8a_10b1_ea7068389da1["prepareQuery()"]
  b5f39cbd_0992_c93c_e18e_1884481a37ac -->|method| 869c5233_9fc6_1a8a_10b1_ea7068389da1
  c7e65865_976b_3541_a589_439b5bed44ab["batch()"]
  b5f39cbd_0992_c93c_e18e_1884481a37ac -->|method| c7e65865_976b_3541_a589_439b5bed44ab
  c6aaf844_5da2_e7e5_2eba_f3b858a2772c["query()"]
  b5f39cbd_0992_c93c_e18e_1884481a37ac -->|method| c6aaf844_5da2_e7e5_2eba_f3b858a2772c
  ad4f319c_74f1_de70_fcaa_6e54b41eebaf["queryObjects()"]
  b5f39cbd_0992_c93c_e18e_1884481a37ac -->|method| ad4f319c_74f1_de70_fcaa_6e54b41eebaf
  2dd6fe88_195e_91f7_2484_4873f88a14d2["count()"]
  b5f39cbd_0992_c93c_e18e_1884481a37ac -->|method| 2dd6fe88_195e_91f7_2484_4873f88a14d2
  52c1ef7d_81ad_6f3b_1b54_31d8fade3656["transaction()"]
  b5f39cbd_0992_c93c_e18e_1884481a37ac -->|method| 52c1ef7d_81ad_6f3b_1b54_31d8fade3656

Relationship Graph

Source Code

drizzle-orm/src/neon-http/session.ts lines 149–255

export class NeonHttpSession<
	TFullSchema extends Record<string, unknown>,
	TSchema extends TablesRelationalConfig,
> extends PgSession<NeonHttpQueryResultHKT, TFullSchema, TSchema> {
	static override readonly [entityKind]: string = 'NeonHttpSession';

	private clientQuery: (sql: string, params: any[], opts: Record<string, any>) => NeonQueryPromise<any, any>;
	private logger: Logger;
	private cache: Cache;

	constructor(
		private client: NeonHttpClient,
		dialect: PgDialect,
		private schema: RelationalSchemaConfig<TSchema> | undefined,
		private options: NeonHttpSessionOptions = {},
	) {
		super(dialect);
		// `client.query` is for @neondatabase/serverless v1.0.0 and up, where the
		// root query function `client` is only usable as a template function;
		// `client` is a fallback for earlier versions
		this.clientQuery = (client as any).query ?? client as any;
		this.logger = options.logger ?? new NoopLogger();
		this.cache = options.cache ?? new NoopCache();
	}

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

	async batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(
		queries: T,
	) {
		const preparedQueries: PreparedQuery[] = [];
		const builtQueries: NeonQueryPromise<any, true>[] = [];
		for (const query of queries) {
			const preparedQuery = query._prepare();
			const builtQuery = preparedQuery.getQuery();
			preparedQueries.push(preparedQuery);
			builtQueries.push(
				this.clientQuery(builtQuery.sql, builtQuery.params, {
					fullResults: true,
					arrayMode: preparedQuery.isResponseInArrayMode(),
				}),
			);
		}

		const batchResults = await this.client.transaction(builtQueries, queryConfig);

		return batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true)) as any;
	}

	// change return type to QueryRows<true>
	async query(query: string, params: unknown[]): Promise<FullQueryResults<true>> {
		this.logger.logQuery(query, params);
		const result = await this.clientQuery(query, params, { arrayMode: true, fullResults: true });
		return result;
	}

	// change return type to QueryRows<false>
	async queryObjects(

Domain

Frequently Asked Questions

What is the NeonHttpSession class?
NeonHttpSession is a class in the drizzle-orm codebase, defined in drizzle-orm/src/neon-http/session.ts.
Where is NeonHttpSession defined?
NeonHttpSession is defined in drizzle-orm/src/neon-http/session.ts at line 149.

Analyze Your Own Codebase

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

Try Supermodel Free