buildSelectQuery() — drizzle-orm Function Reference
Architecture documentation for the buildSelectQuery() function in dialect.ts from the drizzle-orm codebase.
Entity Profile
Dependency Diagram
graph TD 8ae83588_d5c3_3834_94e9_82ba6770d1a1["buildSelectQuery()"] 9c5eee4c_4b78_a585_4038_d710de212097["MySqlDialect"] 8ae83588_d5c3_3834_94e9_82ba6770d1a1 -->|defined in| 9c5eee4c_4b78_a585_4038_d710de212097 1a21ab38_4faf_3068_e256_38391d240199["buildRelationalQuery()"] 1a21ab38_4faf_3068_e256_38391d240199 -->|calls| 8ae83588_d5c3_3834_94e9_82ba6770d1a1 82000e3a_faae_8201_7ec2_d2c8f50015b0["buildRelationalQueryWithoutLateralSubqueries()"] 82000e3a_faae_8201_7ec2_d2c8f50015b0 -->|calls| 8ae83588_d5c3_3834_94e9_82ba6770d1a1 36b61a5b_7f68_2e43_5760_d461578993f6["buildWithCTE()"] 8ae83588_d5c3_3834_94e9_82ba6770d1a1 -->|calls| 36b61a5b_7f68_2e43_5760_d461578993f6 d2bb0977_2845_5bd0_d019_e55f619ef7e8["buildSelection()"] 8ae83588_d5c3_3834_94e9_82ba6770d1a1 -->|calls| d2bb0977_2845_5bd0_d019_e55f619ef7e8 7c20c441_cfa6_cf8b_7c30_26d754c4801b["buildIndex()"] 8ae83588_d5c3_3834_94e9_82ba6770d1a1 -->|calls| 7c20c441_cfa6_cf8b_7c30_26d754c4801b 1a6d3dd7_66dd_323c_34ba_58c1bebc1ede["buildOrderBy()"] 8ae83588_d5c3_3834_94e9_82ba6770d1a1 -->|calls| 1a6d3dd7_66dd_323c_34ba_58c1bebc1ede 6b198fad_61da_d3c6_6497_9634ac05c48a["buildLimit()"] 8ae83588_d5c3_3834_94e9_82ba6770d1a1 -->|calls| 6b198fad_61da_d3c6_6497_9634ac05c48a 3da984c5_cedc_6ee4_6ea2_52428870cfec["buildSetOperations()"] 8ae83588_d5c3_3834_94e9_82ba6770d1a1 -->|calls| 3da984c5_cedc_6ee4_6ea2_52428870cfec style 8ae83588_d5c3_3834_94e9_82ba6770d1a1 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
drizzle-orm/src/mysql-core/dialect.ts lines 277–428
buildSelectQuery(
{
withList,
fields,
fieldsFlat,
where,
having,
table,
joins,
orderBy,
groupBy,
limit,
offset,
lockingClause,
distinct,
setOperators,
useIndex,
forceIndex,
ignoreIndex,
}: MySqlSelectConfig,
): SQL {
const fieldsList = fieldsFlat ?? orderSelectedFields<MySqlColumn>(fields);
for (const f of fieldsList) {
if (
is(f.field, Column)
&& getTableName(f.field.table)
!== (is(table, Subquery)
? table._.alias
: is(table, MySqlViewBase)
? table[ViewBaseConfig].name
: is(table, SQL)
? undefined
: getTableName(table))
&& !((table) =>
joins?.some(({ alias }) =>
alias === (table[Table.Symbol.IsAlias] ? getTableName(table) : table[Table.Symbol.BaseName])
))(f.field.table)
) {
const tableName = getTableName(f.field.table);
throw new Error(
`Your "${
f.path.join('->')
}" field references a column "${tableName}"."${f.field.name}", but the table "${tableName}" is not part of the query! Did you forget to join it?`,
);
}
}
const isSingleTable = !joins || joins.length === 0;
const withSql = this.buildWithCTE(withList);
const distinctSql = distinct ? sql` distinct` : undefined;
const selection = this.buildSelection(fieldsList, { isSingleTable });
const tableSql = (() => {
if (is(table, Table) && table[Table.Symbol.IsAlias]) {
return sql`${sql`${sql.identifier(table[Table.Symbol.Schema] ?? '')}.`.if(table[Table.Symbol.Schema])}${
sql.identifier(table[Table.Symbol.OriginalName])
} ${sql.identifier(table[Table.Symbol.Name])}`;
}
return table;
})();
const joinsArray: SQL[] = [];
if (joins) {
for (const [index, joinMeta] of joins.entries()) {
if (index === 0) {
joinsArray.push(sql` `);
}
const table = joinMeta.table;
const lateralSql = joinMeta.lateral ? sql` lateral` : undefined;
const onSql = joinMeta.on ? sql` on ${joinMeta.on}` : undefined;
if (is(table, MySqlTable)) {
const tableName = table[MySqlTable.Symbol.Name];
const tableSchema = table[MySqlTable.Symbol.Schema];
const origTableName = table[MySqlTable.Symbol.OriginalName];
const alias = tableName === origTableName ? undefined : joinMeta.alias;
Domain
Subdomains
Defined In
Source
Frequently Asked Questions
What does buildSelectQuery() do?
buildSelectQuery() is a function in the drizzle-orm codebase, defined in drizzle-orm/src/mysql-core/dialect.ts.
Where is buildSelectQuery() defined?
buildSelectQuery() is defined in drizzle-orm/src/mysql-core/dialect.ts at line 277.
What does buildSelectQuery() call?
buildSelectQuery() calls 6 function(s): buildIndex, buildLimit, buildOrderBy, buildSelection, buildSetOperations, buildWithCTE.
What calls buildSelectQuery()?
buildSelectQuery() is called by 2 function(s): buildRelationalQuery, buildRelationalQueryWithoutLateralSubqueries.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free