sqlc icon indicating copy to clipboard operation
sqlc copied to clipboard

SQLite UPDATE with RETURNING and ORDER BY / LIMIT clauses fail to parse

Open gavincarr opened this issue 1 year ago • 1 comments

Version

1.27.0

What happened?

sqlc fails to parse UPDATE statements that include both RETURNING and ORDER BY / LIMIT clauses.

Relevant log output

line 53:13 no viable alternative at input ';'
line 60:0 extraneous input 'order' expecting {<EOF>, ';', ALTER_, ANALYZE_, ATTACH_, BEGIN_, COMMIT_, CREATE_, DEFAULT_, DELETE_, DETACH_, DROP_, END_, EXPLAIN_, INSERT_, PRAGMA_, REINDEX_, RELEASE_, REPLACE_, ROLLBACK_, SAVEPOINT_, SELECT_, UPDATE_, VACUUM_, VALUES_, WITH_}
# package sqlc
query.sql:1:1: extraneous input 'order' expecting {<EOF>, ';', ALTER_, ANALYZE_, ATTACH_, BEGIN_, COMMIT_, CREATE_, DEFAULT_, DELETE_, DETACH_, DROP_, END_, EXPLAIN_, INSERT_, PRAGMA_, REINDEX_, RELEASE_, REPLACE_, ROLLBACK_, SAVEPOINT_, SELECT_, UPDATE_, VACUUM_, VALUES_, WITH_}
db.go:5: running "sqlc": exit status 1

Database schema

CREATE TABLE queue (
  qid integer primary key,
  domain varchar not null,
  lock_ts varchar not null default '',
  create_ts varchar not null default current_timestamp
);
CREATE UNIQUE INDEX queue_domain on queue(domain);

SQL queries

-- name: LockQueueNext :one
update queue
set lock_ts = current_timestamp
where lock_ts = ''
returning *
order by qid limit 1;

Configuration

version: 2
sql:
  - engine: "sqlite"
    schema: "db/migrations"
    queries: "query.sql"
    gen:
      go:
        package: "sqlc"
        out: "sqlc"

Playground URL

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

What operating system are you using?

Linux

What database engines are you using?

SQLite

What type of code are you generating?

Go

gavincarr avatar Sep 12 '24 05:09 gavincarr