sequelize-sscce
sequelize-sscce copied to clipboard
[Bug] top level where clause with limit
When using a relation's field in a top level where clause AND a limit, the generated SQL is invalid because the inner querries do not have the join:
text: "Unknown column 'Bar.name' in 'where clause'",
sql: "SELECT `Foo`.*, `Bar`.`id` AS `Bar.id`, `Bar`.`name` AS `Bar.name`, `Baz`.`id` AS `Baz.id`, `Baz->BarBaz`.`FooId` AS `Baz.BarBaz.FooId`, `Baz->BarBaz`.`BazId` AS `Baz.BarBaz.BazId` FROM (SELECT `Foo`.`id`, `Foo`.`BarId` FROM `Foos` AS `Foo` WHERE `Bar`.`name` = 'first' LIMIT 2) AS `Foo` LEFT OUTER JOIN `Bars` AS `Bar` ON `Foo`.`BarId` = `Bar`.`id` LEFT OUTER JOIN ( `BarBazs` AS `Baz->BarBaz` INNER JOIN `Bazs` AS `Baz` ON `Baz`.`id` = `Baz->BarBaz`.`BazId`) ON `Foo`.`id` = `Baz->BarBaz`.`FooId`;",
fatal: false,
errno: 1054,
sqlState: '42S22',
code: 'ER_BAD_FIELD_ERROR',
parameters: undefined,
The formatted SQL generated:
SELECT `Foo`.*,
`Bar`.`id` AS `Bar.id`,
`Bar`.`name` AS `Bar.name`,
`Baz`.`id` AS `Baz.id`,
`Baz->BarBaz`.`FooId` AS `Baz.BarBaz.FooId`,
`Baz->BarBaz`.`BazId` AS `Baz.BarBaz.BazId`
-- here, Bar do not exists
-- v
FROM (SELECT `Foo`.`id`, `Foo`.`BarId` FROM `Foos` AS `Foo` WHERE `Bar`.`name` = 'first' LIMIT 2) AS `Foo`
LEFT OUTER JOIN `Bars` AS `Bar` ON `Foo`.`BarId` = `Bar`.`id`
LEFT OUTER JOIN (`BarBazs` AS `Baz->BarBaz` INNER JOIN `Bazs` AS `Baz` ON `Baz`.`id` = `Baz->BarBaz`.`BazId`)
ON `Foo`.`id` = `Baz->BarBaz`.`FooId`