Open
Description
Version
1.23.0
What happened?
sqlc
doesn't recognize subqueries created with WITH
clauses, and marks them as non-existent relations.
Relevant log output
sqlc generate -f platform/db/config/sqlc.yaml
# package dbout
queries/device-associations.sql:1:1: relation "lastassociations" does not exist
Database schema
-- Foreign keys omitted
CREATE TABLE `DeviceAssociation` (
`serialNumber` varchar(191) NOT NULL,
`createdAt` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`currentSerialNumber` varchar(191) DEFAULT NULL,
`previousSerialNumber` varchar(191) DEFAULT NULL,
PRIMARY KEY (`serialNumber`,`createdAt`),
KEY `DeviceAssociation_previousSerialNumber_idx` (`previousSerialNumber`),
KEY `DeviceAssociation_currentSerialNumber_idx` (`currentSerialNumber`),
KEY `DeviceAssociation_createdAt_idx` (`createdAt` DESC)
);
SQL queries
-- name: DeviceAssociations :many
WITH
LastAssociations AS (
SELECT
serialNumber,
currentSerialNumber,
MAX(createdAt) AS createdAt
FROM
DeviceAssociation
WHERE
serialNumber = sqlc.arg(serialNumber)
AND currentSerialNumber IS NOT NULL
GROUP BY
serialNumber,
currentSerialNumber
),
LastDissociations AS (
SELECT
serialNumber,
previousSerialNumber,
MAX(createdAt) AS createdAt
FROM
DeviceAssociation
WHERE
serialNumber = sqlc.arg(serialNumber)
AND previousSerialNumber IS NOT NULL
GROUP BY
serialNumber,
previousSerialNumber
)
SELECT DISTINCT
LastAssociations.serialNumber,
LastAssociations.currentSerialNumber
FROM LastAssociations
LEFT JOIN LastDissociations ON
LastAssociations.serialNumber = LastDissociations.serialNumber AND
LastAssociations.currentSerialNumber = LastDissociations.previousSerialNumber
WHERE LastAssociations.createdAt > LastDissociations.createdAt;
Configuration
version: "2"
sql:
- engine: "mysql"
queries: "queries"
schema: "schema.sql"
gen:
go:
package: "dbout"
out: "../../../app/dbout"
emit_empty_slices: true
database:
uri: "${DATABASE_URL}"
rules:
- sqlc/db-prepare
Playground URL
No response
What operating system are you using?
macOS
What database engines are you using?
MySQL
What type of code are you generating?
Go