Skip to content

Commit

Permalink
Merge pull request #683 from drizzle-team/fix-composite-fks-in-rqb
Browse files Browse the repository at this point in the history
  • Loading branch information
dankochetov authored Jun 1, 2023
2 parents 2089693 + aa7bb38 commit acf9935
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 9 deletions.
12 changes: 9 additions & 3 deletions drizzle-orm/src/mysql-core/dialect.ts
Original file line number Diff line number Diff line change
Expand Up @@ -563,9 +563,15 @@ export class MySqlDialect {
)
}))`;

const field = sql`if(count(${
sql.join(normalizedRelation.references.map((c) => aliasedTableColumn(c, relationAlias)), sql.raw(' or '))
}) = 0, '[]', ${elseField})`.as(selectedRelationKey);
const countSql = normalizedRelation.references.length === 1
? aliasedTableColumn(normalizedRelation.references[0]!, relationAlias)
: sql.fromList([
sql`coalesce(`,
sql.join(normalizedRelation.references.map((c) => aliasedTableColumn(c, relationAlias)), sql.raw(', ')),
sql.raw(')'),
]);

const field = sql`if(count(${countSql}) = 0, '[]', ${elseField})`.as(selectedRelationKey);

const builtRelationField = {
path: [selectedRelationKey],
Expand Down
12 changes: 9 additions & 3 deletions drizzle-orm/src/pg-core/dialect.ts
Original file line number Diff line number Diff line change
Expand Up @@ -632,9 +632,15 @@ export class PgDialect {
elseField.append(sql.raw('::text'));
}

const field = sql`case when count(${
sql.join(normalizedRelation.references.map((c) => aliasedTableColumn(c, relationAlias)), sql.raw(' or '))
}) = 0 then '[]' else ${elseField} end`.as(selectedRelationKey);
const countSql = normalizedRelation.references.length === 1
? aliasedTableColumn(normalizedRelation.references[0]!, relationAlias)
: sql.fromList([
sql`coalesce(`,
sql.join(normalizedRelation.references.map((c) => aliasedTableColumn(c, relationAlias)), sql.raw(', ')),
sql.raw(')'),
]);

const field = sql`case when count(${countSql}) = 0 then '[]' else ${elseField} end`.as(selectedRelationKey);

const builtRelationField = {
path: [selectedRelationKey],
Expand Down
12 changes: 9 additions & 3 deletions drizzle-orm/src/sqlite-core/dialect.ts
Original file line number Diff line number Diff line change
Expand Up @@ -504,9 +504,15 @@ export abstract class SQLiteDialect {
)
}))`;

const field = sql`case when count(${
sql.join(normalizedRelation.references.map((c) => aliasedTableColumn(c, relationAlias)), sql.raw(' or '))
}) = 0 then '[]' else ${elseField} end`.as(selectedRelationKey);
const countSql = normalizedRelation.references.length === 1
? aliasedTableColumn(normalizedRelation.references[0]!, relationAlias)
: sql.fromList([
sql`coalesce(`,
sql.join(normalizedRelation.references.map((c) => aliasedTableColumn(c, relationAlias)), sql.raw(', ')),
sql.raw(')'),
]);

const field = sql`case when count(${countSql}) = 0 then '[]' else ${elseField} end`.as(selectedRelationKey);

const builtRelationField = {
path: [selectedRelationKey],
Expand Down

0 comments on commit acf9935

Please sign in to comment.