Skip to content

sqlc.embed fails with LEFT JOIN #2634

Closed as not planned
Closed as not planned
@hectorj-thetreep

Description

@hectorj-thetreep

Version

1.20.0

What happened?

The generated code

func (q *Queries) GetA(ctx context.Context) (GetARow, error) {
	row := q.db.QueryRowContext(ctx, getA)
	var i GetARow
	err := row.Scan(
		&i.A.ID,
		&i.A.Name,
		&i.B.ID,
		&i.B.AID,
		&i.B.Label,
	)
	return i, err
}

will fail when there is no B to join to A, because it did not detect that the whole i.B is nullable.

Relevant log output

sql: Scan error on column index 2, name "id": converting NULL to int32 is unsupported

Database schema

CREATE TABLE A (
  id   BIGSERIAL PRIMARY KEY,
  name text      NOT NULL
);

CREATE TABLE B (
  id BIGSERIAL PRIMARY KEY,
  a_id BIGINT NOT NULL,
  label text NOT NULL
);

SQL queries

SELECT sqlc.embed(A), sqlc.embed(B) FROM A LEFT JOIN B ON A.id = B.a_id LIMIT 1;

Configuration

No response

Playground URL

https://play.sqlc.dev/p/c045f5e33caf61f3e913a742f08518a167c247c4e5902a995f17ee200a553b2a](https://play.sqlc.dev/p/a6840c57f06a38387e9af1604059bb1db09e0db71f7a462c7bcd6a8dcfc42043

What operating system are you using?

Linux

What database engines are you using?

PostgreSQL

What type of code are you generating?

Go

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingtriageNew issues that hasn't been reviewed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions