Closed
Description
Version
1.11.0
What happened?
After updating to 1.11.0, the code generated when using LEFT JOIN
on tables seems to be incorrect.
For the queries and schema given below, I'd expect the following code to be generated:
...
type GetSuggestedUsersByIDRow struct {
UserID uuid.UUID
UserNickname string
UserEmail string
UserDisplayName string
UserPassword sql.NullString
UserGoogleID sql.NullString
UserAppleID sql.NullString
UserBio string
UserCreatedAt time.Time
UserAvatarID uuid.NullUUID
MediaID uuid.NullUUID
MediaCreatedAt sql.NullTime
MediaHash sql.NullString
MediaDirectory sql.NullString
MediaAuthorID uuid.NullUUID
MediaWidth sql.NullInt32
MediaHeight sql.NullInt32
}
...
This is the output when generating queries using 1.10.0
.
Instead, with 1.11.0
, I get:
...
type GetSuggestedUsersByIDRow struct {
UserID uuid.UUID
UserNickname string
UserEmail string
UserDisplayName string
UserPassword sql.NullString
UserGoogleID sql.NullString
UserAppleID sql.NullString
UserBio string
UserCreatedAt time.Time
UserAvatarID uuid.NullUUID
MediaID uuid.UUID
MediaCreatedAt time.Time
MediaHash string
MediaDirectory string
MediaAuthorID uuid.UUID
MediaWidth int32
MediaHeight int32
}
...
You can see that the joined table (the media
), should have Null* types, instead of the plain regular types.
Relevant log output
No response
Database schema
CREATE TABLE "users"
(
"user_id" uuid PRIMARY KEY,
"user_nickname" VARCHAR(30) UNIQUE NOT NULL,
"user_email" TEXT UNIQUE NOT NULL,
"user_display_name" TEXT NOT NULL,
"user_password" TEXT NULL,
"user_google_id" TEXT UNIQUE NULL,
"user_apple_id" TEXT UNIQUE NULL,
"user_bio" VARCHAR(160) NOT NULL DEFAULT '',
"user_created_at" TIMESTAMP NOT NULL DEFAULT (NOW()),
"user_avatar_id" uuid UNIQUE NULL
);
CREATE TABLE "media"
(
"media_id" uuid PRIMARY KEY,
"media_created_at" TIMESTAMP NOT NULL DEFAULT (NOW()),
"media_hash" TEXT NOT NULL,
"media_directory" TEXT NOT NULL,
"media_author_id" uuid NOT NULL,
"media_width" INT NOT NULL,
"media_height" INT NOT NULL
);
ALTER TABLE "users"
ADD FOREIGN KEY ("user_avatar_id") REFERENCES "media" ("media_id") ON DELETE SET DEFAULT ON UPDATE CASCADE;
SQL queries
CREATE TABLE "users"
(
"user_id" uuid PRIMARY KEY,
"user_nickname" VARCHAR(30) UNIQUE NOT NULL,
"user_email" TEXT UNIQUE NOT NULL,
"user_display_name" TEXT NOT NULL,
"user_password" TEXT NULL,
"user_google_id" TEXT UNIQUE NULL,
"user_apple_id" TEXT UNIQUE NULL,
"user_bio" VARCHAR(160) NOT NULL DEFAULT '',
"user_created_at" TIMESTAMP NOT NULL DEFAULT (NOW()),
"user_avatar_id" uuid UNIQUE NULL
);
CREATE TABLE "media"
(
"media_id" uuid PRIMARY KEY,
"media_created_at" TIMESTAMP NOT NULL DEFAULT (NOW()),
"media_hash" TEXT NOT NULL,
"media_directory" TEXT NOT NULL,
"media_author_id" uuid NOT NULL,
"media_width" INT NOT NULL,
"media_height" INT NOT NULL
);
ALTER TABLE "users"
ADD FOREIGN KEY ("user_avatar_id") REFERENCES "media" ("media_id") ON DELETE SET DEFAULT ON UPDATE CASCADE;
-- name: GetSuggestedUsersByID :many
SELECT DISTINCT u.*, m.*
FROM users u
LEFT JOIN media m ON u.user_avatar_id = m.media_id
WHERE u.user_id != @user_id
LIMIT @user_imit;
Configuration
{
"version": "1",
"packages": [
{
"path": "db",
"engine": "postgresql",
"schema": "query.sql",
"queries": "query.sql"
}
]
}
Playground URL
No response
What operating system are you using?
macOS
What database engines are you using?
PostgreSQL
What type of code are you generating?
Go