Skip to content

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

Open
@andremarianiello

Description

@andremarianiello

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions