extractTablesRelationalConfig() — drizzle-orm Function Reference
Architecture documentation for the extractTablesRelationalConfig() function in relations.ts from the drizzle-orm codebase.
Entity Profile
Dependency Diagram
graph TD 910b7f81_1088_02ad_1eb1_cd8ed92bd0b4["extractTablesRelationalConfig()"] 2f47d090_425d_2e56_2395_4c4d912316f0["relations.ts"] 910b7f81_1088_02ad_1eb1_cd8ed92bd0b4 -->|defined in| 2f47d090_425d_2e56_2395_4c4d912316f0 c020d230_75a2_3639_d9a6_35f2ba7fd5bc["is()"] 910b7f81_1088_02ad_1eb1_cd8ed92bd0b4 -->|calls| c020d230_75a2_3639_d9a6_35f2ba7fd5bc style 910b7f81_1088_02ad_1eb1_cd8ed92bd0b4 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
drizzle-orm/src/relations.ts lines 416–500
export function extractTablesRelationalConfig<
TTables extends TablesRelationalConfig,
>(
schema: Record<string, unknown>,
configHelpers: (table: Table) => any,
): { tables: TTables; tableNamesMap: Record<string, string> } {
if (
Object.keys(schema).length === 1
&& 'default' in schema
&& !is(schema['default'], Table)
) {
schema = schema['default'] as Record<string, unknown>;
}
// table DB name -> schema table key
const tableNamesMap: Record<string, string> = {};
// Table relations found before their tables - need to buffer them until we know the schema table key
const relationsBuffer: Record<
string,
{ relations: Record<string, Relation>; primaryKey?: AnyColumn[] }
> = {};
const tablesConfig: TablesRelationalConfig = {};
for (const [key, value] of Object.entries(schema)) {
if (is(value, Table)) {
const dbName = getTableUniqueName(value);
const bufferedRelations = relationsBuffer[dbName];
tableNamesMap[dbName] = key;
tablesConfig[key] = {
tsName: key,
dbName: value[Table.Symbol.Name],
schema: value[Table.Symbol.Schema],
columns: value[Table.Symbol.Columns],
relations: bufferedRelations?.relations ?? {},
primaryKey: bufferedRelations?.primaryKey ?? [],
};
// Fill in primary keys
for (
const column of Object.values(
(value as Table)[Table.Symbol.Columns],
)
) {
if (column.primary) {
tablesConfig[key]!.primaryKey.push(column);
}
}
const extraConfig = value[Table.Symbol.ExtraConfigBuilder]?.((value as Table)[Table.Symbol.ExtraConfigColumns]);
if (extraConfig) {
for (const configEntry of Object.values(extraConfig)) {
if (is(configEntry, PrimaryKeyBuilder)) {
tablesConfig[key]!.primaryKey.push(...configEntry.columns);
}
}
}
} else if (is(value, Relations)) {
const dbName = getTableUniqueName(value.table);
const tableName = tableNamesMap[dbName];
const relations: Record<string, Relation> = value.config(
configHelpers(value.table),
);
let primaryKey: AnyColumn[] | undefined;
for (const [relationName, relation] of Object.entries(relations)) {
if (tableName) {
const tableConfig = tablesConfig[tableName]!;
tableConfig.relations[relationName] = relation;
if (primaryKey) {
tableConfig.primaryKey.push(...primaryKey);
}
} else {
if (!(dbName in relationsBuffer)) {
relationsBuffer[dbName] = {
relations: {},
primaryKey,
};
}
relationsBuffer[dbName]!.relations[relationName] = relation;
}
}
}
Domain
Subdomains
Defined In
Calls
Source
Frequently Asked Questions
What does extractTablesRelationalConfig() do?
extractTablesRelationalConfig() is a function in the drizzle-orm codebase, defined in drizzle-orm/src/relations.ts.
Where is extractTablesRelationalConfig() defined?
extractTablesRelationalConfig() is defined in drizzle-orm/src/relations.ts at line 416.
What does extractTablesRelationalConfig() call?
extractTablesRelationalConfig() calls 1 function(s): is.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free