sqlc icon indicating copy to clipboard operation
sqlc copied to clipboard

'NOT' and '!' prevents sqlc.arg from being replaced as a query argument

Open andremarianiello opened this issue 6 months ago • 0 comments

Version

1.25.0

What happened?

A bug happened!

-- name: TestQuery :many
SELECT *
FROM persons
WHERE sqlc.arg('foo');

correctly produces

const testQuery = `-- name: TestQuery :many
SELECT personid, lastname, firstname, address, city
FROM persons
WHERE ?
`

but

-- name: TestQuery :many
SELECT *
FROM persons
WHERE NOT sqlc.arg('foo');

incorrectly produces

const testQuery = `-- name: TestQuery :many
SELECT personid, lastname, firstname, address, city
FROM persons
WHERE NOT sqlc.arg('foo')
`

Notice that sqlc.arg('foo') is still present in the second query. Seems like sqlc is confused by NOT. Same issue with !.

See live example at https://play.sqlc.dev/p/7a9cbe8fd148f62a3bf7190a87a43e58aef7b2a757c10af19b7ff206b24c0092

Relevant log output


Database schema

CREATE TABLE persons (
    personID int,
    lastName varchar(255),
    firstName varchar(255),
    address varchar(255),
    city varchar(255)
);

SQL queries

-- name: TestQuery1 :many
SELECT *
FROM persons
WHERE NOT sqlc.arg('foo');

-- name: TestQuery2 :many
SELECT *
FROM persons
WHERE ! sqlc.arg('foo');

Configuration

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

Playground URL

https://play.sqlc.dev/p/7a9cbe8fd148f62a3bf7190a87a43e58aef7b2a757c10af19b7ff206b24c0092

What operating system are you using?

Linux

What database engines are you using?

MySQL

What type of code are you generating?

Go

andremarianiello avatar Apr 17 '25 15:04 andremarianiello