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

createTableColumns() — drizzle-orm Function Reference

Architecture documentation for the createTableColumns() function in introspect-sqlite.ts from the drizzle-orm codebase.

Entity Profile

Dependency Diagram

graph TD
  154c5f90_2024_d20f_7338_69f47fcd8698["createTableColumns()"]
  c1c349dd_2e31_d056_728c_c034cebb41c0["introspect-sqlite.ts"]
  154c5f90_2024_d20f_7338_69f47fcd8698 -->|defined in| c1c349dd_2e31_d056_728c_c034cebb41c0
  5a8c82ee_a5ea_c82a_7f3f_71133b91a28a["schemaToTypeScript()"]
  5a8c82ee_a5ea_c82a_7f3f_71133b91a28a -->|calls| 154c5f90_2024_d20f_7338_69f47fcd8698
  5b76307c_ebf1_1efd_2cb6_5014e6794762["isSelf()"]
  154c5f90_2024_d20f_7338_69f47fcd8698 -->|calls| 5b76307c_ebf1_1efd_2cb6_5014e6794762
  faade615_b82c_cd55_c09a_a253918d8b88["column()"]
  154c5f90_2024_d20f_7338_69f47fcd8698 -->|calls| faade615_b82c_cd55_c09a_a253918d8b88
  a92fb3de_d403_ac05_21fd_84b5a596de3a["isCyclic()"]
  154c5f90_2024_d20f_7338_69f47fcd8698 -->|calls| a92fb3de_d403_ac05_21fd_84b5a596de3a
  dc968f8c_7a30_c267_c13f_dae729c5abf9["objToStatement2()"]
  154c5f90_2024_d20f_7338_69f47fcd8698 -->|calls| dc968f8c_7a30_c267_c13f_dae729c5abf9
  d11905b4_a7b6_40f4_09ff_114b87f29eed["withCasing()"]
  154c5f90_2024_d20f_7338_69f47fcd8698 -->|calls| d11905b4_a7b6_40f4_09ff_114b87f29eed
  style 154c5f90_2024_d20f_7338_69f47fcd8698 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

drizzle-kit/src/introspect-sqlite.ts lines 337–408

const createTableColumns = (
	columns: Column[],
	fks: ForeignKey[],
	casing: Casing,
): string => {
	let statement = '';

	// no self refs and no cyclic
	const oneColumnsFKs = Object.values(fks)
		.filter((it) => {
			return !isSelf(it);
		})
		.filter((it) => it.columnsFrom.length === 1);

	const fkByColumnName = oneColumnsFKs.reduce((res, it) => {
		const arr = res[it.columnsFrom[0]] || [];
		arr.push(it);
		res[it.columnsFrom[0]] = arr;
		return res;
	}, {} as Record<string, ForeignKey[]>);

	columns.forEach((it) => {
		statement += '\t';
		statement += column(it.type, it.name, it.default, it.autoincrement, casing);
		statement += it.primaryKey
			? `.primaryKey(${it.autoincrement ? '{ autoIncrement: true }' : ''})`
			: '';
		statement += it.notNull ? '.notNull()' : '';

		statement += it.generated
			? `.generatedAlwaysAs(sql\`${
				it.generated.as
					.replace(/`/g, '\\`')
					.slice(1, -1)
			}\`, { mode: "${it.generated.type}" })`
			: '';

		const fks = fkByColumnName[it.name];
		if (fks) {
			const fksStatement = fks
				.map((it) => {
					const onDelete = it.onDelete && it.onDelete !== 'no action' ? it.onDelete : null;
					const onUpdate = it.onUpdate && it.onUpdate !== 'no action' ? it.onUpdate : null;
					const params = { onDelete, onUpdate };

					const typeSuffix = isCyclic(it) ? ': AnySQLiteColumn' : '';

					const paramsStr = objToStatement2(params);
					if (paramsStr) {
						return `.references(()${typeSuffix} => ${
							withCasing(
								it.tableTo,
								casing,
							)
						}.${withCasing(it.columnsTo[0], casing)}, ${paramsStr} )`;
					}
					return `.references(()${typeSuffix} => ${
						withCasing(
							it.tableTo,
							casing,
						)
					}.${withCasing(it.columnsTo[0], casing)})`;
				})
				.join('');
			statement += fksStatement;
		}

		statement += ',\n';
	});

	return statement;
};

Domain

Subdomains

Frequently Asked Questions

What does createTableColumns() do?
createTableColumns() is a function in the drizzle-orm codebase, defined in drizzle-kit/src/introspect-sqlite.ts.
Where is createTableColumns() defined?
createTableColumns() is defined in drizzle-kit/src/introspect-sqlite.ts at line 337.
What does createTableColumns() call?
createTableColumns() calls 5 function(s): column, isCyclic, isSelf, objToStatement2, withCasing.
What calls createTableColumns()?
createTableColumns() is called by 1 function(s): schemaToTypeScript.

Analyze Your Own Codebase

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

Try Supermodel Free