Home / Function/ connectToD1() — drizzle-orm Function Reference

connectToD1() — drizzle-orm Function Reference

Architecture documentation for the connectToD1() function in connections.ts from the drizzle-orm codebase.

Entity Profile

Dependency Diagram

graph TD
  410b46e8_6e5c_cef4_d449_bb7d00e289b8["connectToD1()"]
  4e02c2bb_54a8_1500_813e_2cafd1ad4f59["connections.ts"]
  410b46e8_6e5c_cef4_d449_bb7d00e289b8 -->|defined in| 4e02c2bb_54a8_1500_813e_2cafd1ad4f59
  414ec951_dc1c_5030_4563_03e41560a793["prepareSqliteParams()"]
  410b46e8_6e5c_cef4_d449_bb7d00e289b8 -->|calls| 414ec951_dc1c_5030_4563_03e41560a793
  799e87a0_af66_9e87_fd98_913a06374e61["queries()"]
  410b46e8_6e5c_cef4_d449_bb7d00e289b8 -->|calls| 799e87a0_af66_9e87_fd98_913a06374e61
  style 410b46e8_6e5c_cef4_d449_bb7d00e289b8 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

drizzle-kit/src/cli/connections.ts lines 928–996

export const connectToD1 = async (
	d1: D1Database,
): Promise<
	& SQLiteDB
	& {
		packageName: 'd1';
		migrate: (config: MigrationConfig) => Promise<void>;
		proxy: Proxy;
		transactionProxy: TransactionProxy;
	}
> => {
	const db: SQLiteDB = {
		query: async <T>(sql: string, params?: any[]) => {
			const stmt = d1.prepare(sql);
			const boundStmt = params && params.length > 0 ? stmt.bind(...params) : stmt;
			const result = await boundStmt.all<T>();
			return (result.results ?? []) as T[];
		},
		run: async (query: string) => {
			const stmt = d1.prepare(query);
			await stmt.run();
		},
	};

	const proxy: Proxy = async (params) => {
		const preparedParams = prepareSqliteParams(params.params || [], 'd1');
		const stmt = d1.prepare(params.sql);
		const boundStmt = preparedParams.length > 0 ? stmt.bind(...preparedParams) : stmt;

		try {
			if (params.mode === 'array') {
				return await boundStmt.raw();
			}
			const result = await boundStmt.all();
			return result.results ?? [];
		} catch (error: any) {
			// D1 doesn't allow certain introspection queries (sqlite_master with pragma functions)
			// Return empty array for SQLITE_AUTH errors on these system queries
			if (error?.message?.includes('SQLITE_AUTH') || error?.message?.includes('not authorized')) {
				return [];
			}
			throw error;
		}
	};

	const transactionProxy: TransactionProxy = async (queries) => {
		const results: any[] = [];
		try {
			// D1 doesn't support true transactions via binding, use batch instead
			const statements = queries.map((q) => d1.prepare(q.sql));
			const batchResults = await d1.batch(statements);
			for (const result of batchResults) {
				results.push(result.results ?? []);
			}
		} catch (error) {
			results.push(error as Error);
		}
		return results;
	};

	const { drizzle } = await import('drizzle-orm/d1');
	const { migrate } = await import('drizzle-orm/d1/migrator');
	const drzl = drizzle(d1);
	const migrateFn = async (config: MigrationConfig) => {
		return migrate(drzl, config);
	};

	return { ...db, packageName: 'd1', proxy, transactionProxy, migrate: migrateFn };
};

Domain

Subdomains

Frequently Asked Questions

What does connectToD1() do?
connectToD1() is a function in the drizzle-orm codebase, defined in drizzle-kit/src/cli/connections.ts.
Where is connectToD1() defined?
connectToD1() is defined in drizzle-kit/src/cli/connections.ts at line 928.
What does connectToD1() call?
connectToD1() calls 2 function(s): prepareSqliteParams, queries.

Analyze Your Own Codebase

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

Try Supermodel Free