sqlc-dev / sqlc

Generate type-safe code from SQL
https://sqlc.dev
MIT License
12.28k stars 778 forks source link

Not recognizing sqlc.arg after ON CONFLICT. #3334

Open mondy opened 5 months ago

mondy commented 5 months ago

Version

1.26.0

What happened?

Input:

-- name: Insert :exec
INSERT INTO authors (name)
VALUES (sqlc.arg(name))
ON CONFLICT (name) DO UPDATE SET data = sqlc.arg(data);

Output:

const insert = `-- name: Insert :exec
INSERT INTO authors (name)
VALUES (?1)
ON CONFLICT (name) DO UPDATE SET data = sqlc.arg(data)
`

sqlc.arg(name) is recognized, but sqlc.arg(data) is not recognized.

Relevant log output

No response

Database schema

CREATE TABLE authors (
  name TEXT NOT NULL UNIQUE,
  data BLOB NOT NULL
);

SQL queries

-- name: Insert :exec
INSERT INTO authors (name)
VALUES (sqlc.arg(name))
ON CONFLICT (name) DO UPDATE SET data = sqlc.arg(data);

Configuration

{
  "version": "2",
  "sql": [{
    "schema": "schema.sql",
    "queries": "query.sql",
    "engine": "sqlite",
    "gen": {
      "go": {
        "out": "db"
      }
    }
  }]
}

Playground URL

https://play.sqlc.dev/p/499d67e9cbdb4e01b7b2be3310bdc5d48e1e2154afc581eb48018e001f05beaf

What operating system are you using?

Windows

What database engines are you using?

SQLite

What type of code are you generating?

Go

drsybren commented 3 months ago

I can confirm this also happens with @fieldname notation:

https://play.sqlc.dev/p/a7c029d7cc3ae678861021056b1f50cc85b2b85f431cbefeead9db529be7bfbc

-- name: SetLastRendered :exec
INSERT INTO last_rendereds (id, created_at, updated_at, job_id)
VALUES (1, @created_at, @updated_at, @job_id)
ON CONFLICT DO UPDATE SET updated_at=@updated_at, job_id=@job_id;

creates code:

const setLastRendered = `-- name: SetLastRendered :exec
INSERT INTO last_rendereds (id, created_at, updated_at, job_id)
VALUES (1, ?1, ?2, ?3)
ON CONFLICT DO UPDATE SET updated_at=@updated_at, job_id=@job_id
`