Skip to content

LIMIT results in Syntax Error #1665

Closed as not planned
Closed as not planned

Description

@rhodee

Version

1.13.0

What happened?

Hello!

I tried to create a query with dynamic query/offset. Unfortunately, it returned an error.

Tickets I discovered:

https://github.com/kyleconroy/sqlc/issues?q=is%3Aissue+is%3Aopen+limit+label%3A%22%3Abooks%3A+mysql%22

Things I've tried:

#1439 - it appears changing the reserve words did not change the error.

Comparing the output of PG and MySQL


This works for PG and not for MySQL

Relevant log output

sqlc generate failed.
# package db
query.sql:16:11: syntax error near "sqlc.arg(row_offset), sqlc.arg(row_limit);"

Database schema

-- Example queries for sqlc
CREATE TABLE authors (
  id  varchar(255) NOT NULL,
  name text      NOT NULL,
  bio  text
);

SQL queries

-- name: ListAuthors :many
SELECT * FROM authors
ORDER BY name
LIMIT sqlc.arg(row_offset), sqlc.arg(row_limit);

Configuration

{
  "version": "1",
  "packages": [
    {
      "path": "db",
      "engine": "mysql",
      "schema": "query.sql",
      "queries": "query.sql"
    }
  ]
}

Playground URL

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

What operating system are you using?

macOS

What database engines are you using?

MySQL

What type of code are you generating?

Go

Activity

  1. added
    bugSomething isn't working
    triageNew issues that hasn't been reviewed
    on Jun 8, 2022
  2. added
    upstreamIssue is caused by a dependency
    and removed
    bugSomething isn't working
    triageNew issues that hasn't been reviewed
    on Jun 10, 2022
  3. kyleconroy commented on Jun 10, 2022

    @kyleconroy
    Collaborator

    I got this to work by using regular ? parameters inside of named parameters. The MySQL parser we're using is not happy with function calls after LIMIT and OFFSET

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

    -- name: ListAuthors :many
    SELECT * FROM authors
    ORDER BY name
    LIMIT ? OFFSET ?;
  4. rhodee commented on Jun 10, 2022

    @rhodee
    Author

    Noted. I think this can be closed. I was hoping to use the sqlc.arg method but this is fine. Thank you @kyleconroy

  5. subc commented on Apr 2, 2023

    @subc

    This is a rare case. I think fixing this issue is very low priority.
    When using UNION ALL in mysql, a problem occurred when LIMIT ? OFFSET ? was specified.
    Specifically, Limit is not added to the Params field.
    The version I checked is "sqlc v1.15.0"

    -- name: ListAuthors :many
    SELECT * FROM authors
    WHERE country = 'DE'
    UNION ALL
    SELECT * FROM authors2
    WHERE country = 'US'
    LIMIT ? OFFSET ?;
    
  6. andrewmbenton commented on Aug 14, 2023

    @andrewmbenton
    Collaborator

    Closing since this is very old and the workaround seems acceptable until and unless the upstream parser is changed.

    I created a new issue (#2611) for the UNION ALL bug.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions