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

extractRelations() — drizzle-orm Function Reference

Architecture documentation for the extractRelations() function in studio.ts from the drizzle-orm codebase.

Entity Profile

Dependency Diagram

graph TD
  92c3479f_50d7_632d_a64a_ace0d75fef1e["extractRelations()"]
  82de12f8_a8ca_9d38_8da8_9ac945d81e01["studio.ts"]
  92c3479f_50d7_632d_a64a_ace0d75fef1e -->|defined in| 82de12f8_a8ca_9d38_8da8_9ac945d81e01
  2a2d384e_29cd_b901_fdda_e10fca96a027["prepareServer()"]
  2a2d384e_29cd_b901_fdda_e10fca96a027 -->|calls| 92c3479f_50d7_632d_a64a_ace0d75fef1e
  0f6bcec9_496e_3388_a2d6_2f3af1e12d53["getColumnCasing()"]
  92c3479f_50d7_632d_a64a_ace0d75fef1e -->|calls| 0f6bcec9_496e_3388_a2d6_2f3af1e12d53
  style 92c3479f_50d7_632d_a64a_ace0d75fef1e fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

drizzle-kit/src/serializer/studio.ts lines 514–583

export const extractRelations = (
	tablesConfig: {
		tables: TablesRelationalConfig;
		tableNamesMap: Record<string, string>;
	},
	casing?: CasingType,
): Relation[] => {
	const relations = Object.values(tablesConfig.tables)
		.map((it) =>
			Object.entries(it.relations).map(([name, relation]) => {
				try {
					const normalized = normalizeRelation(
						tablesConfig.tables,
						tablesConfig.tableNamesMap,
						relation,
					);
					const rel = relation;
					const refTableName = rel.referencedTableName;
					const refTable = rel.referencedTable;
					const fields = normalized.fields
						.map((it) => getColumnCasing(it, casing))
						.flat();
					const refColumns = normalized.references
						.map((it) => getColumnCasing(it, casing))
						.flat();

					let refSchema: string | undefined;
					if (is(refTable, PgTable)) {
						refSchema = pgTableConfig(refTable).schema;
					} else if (is(refTable, MySqlTable)) {
						refSchema = mysqlTableConfig(refTable).schema;
					} else if (is(refTable, SQLiteTable)) {
						refSchema = undefined;
					} else if (is(refTable, SingleStoreTable)) {
						refSchema = singlestoreTableConfig(refTable).schema;
					} else {
						throw new Error('unsupported dialect');
					}

					let type: 'one' | 'many';
					if (is(rel, One)) {
						type = 'one';
					} else if (is(rel, Many)) {
						type = 'many';
					} else {
						throw new Error('unsupported relation type');
					}

					return {
						name,
						type,
						table: it.dbName,
						schema: it.schema || 'public',
						columns: fields,
						refTable: refTableName,
						refSchema: refSchema || 'public',
						refColumns: refColumns,
					};
				} catch (error) {
					throw new Error(
						`Invalid relation "${relation.fieldName}" for table "${
							it.schema ? `${it.schema}.${it.dbName}` : it.dbName
						}"`,
					);
				}
			})
		)
		.flat();
	return relations;
};

Domain

Subdomains

Called By

Frequently Asked Questions

What does extractRelations() do?
extractRelations() is a function in the drizzle-orm codebase, defined in drizzle-kit/src/serializer/studio.ts.
Where is extractRelations() defined?
extractRelations() is defined in drizzle-kit/src/serializer/studio.ts at line 514.
What does extractRelations() call?
extractRelations() calls 1 function(s): getColumnCasing.
What calls extractRelations()?
extractRelations() is called by 1 function(s): prepareServer.

Analyze Your Own Codebase

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

Try Supermodel Free