Closed
Description
Version
1.15.0
What happened?
We've had an issue where a query we did a LEFT JOIN in didn't generate Null*
fields in the *Row
struct, resulting in the converting NULL to %s is unsupported
error at runtime.
We found out this was fixed by putting an INNER JOIN that came after that LEFT JOIN before it. Somehow, query TestLeftInner
generates a different struct than query TestInnerLeft
:
type TestLeftInnerRow struct {
A string
B string
C string
}
type TestInnerLeftRow struct {
A string
B string
C sql.NullString
}
Relevant log output
No response
Database schema
CREATE TABLE a (
id BIGSERIAL PRIMARY KEY,
a TEXT NOT NULL
);
CREATE TABLE b (
id BIGSERIAL PRIMARY KEY,
b TEXT NOT NULL,
a_id BIGINT NOT NULL REFERENCES a (id)
);
CREATE TABLE c (
id BIGSERIAL PRIMARY KEY,
c TEXT NOT NULL,
a_id BIGINT NOT NULL REFERENCES a (id)
);
SQL queries
-- name: TestLeftInner :many
SELECT a.a, b.b, c.c
FROM b
LEFT JOIN c ON c.a_id = a.id
INNER JOIN a ON b.a_id = a.id;
-- name: TestInnerLeft :many
SELECT a.a, b.b, c.c
FROM b
INNER JOIN a ON b.a_id = a.id
LEFT JOIN c ON c.a_id = a.id;
Configuration
{
"version": "1",
"packages": [
{
"path": "db",
"engine": "postgresql",
"schema": "query.sql",
"queries": "query.sql"
}
]
}
Playground URL
https://play.sqlc.dev/p/56e981109a258f404058dd3cfe845c8fd0e0b195c0f3410479a819caea2c72ef
What operating system are you using?
Linux
What database engines are you using?
PostgreSQL, MySQL
What type of code are you generating?
Go