sqlc icon indicating copy to clipboard operation
sqlc copied to clipboard

panic: expected range var

Open drhoden-fastly opened this issue 3 years ago • 2 comments

Version

Other

What happened?

A previously filed bug. Was found again while attempting to perform an implicit JOIN with mysql.

Using version v1.13.0

Relevant log output

panic: expected range var

goroutine 1 [running]:
github.com/kyleconroy/sqlc/internal/engine/dolphin.(*cc).convertUpdateStmt(0x10?, 0xc0001ecc60)
	github.com/kyleconroy/sqlc/internal/engine/dolphin/convert.go:551 +0x5ad
github.com/kyleconroy/sqlc/internal/engine/dolphin.(*cc).convert(0xc000418600?, {0x5051910?, 0xc0001ecc60?})
	github.com/kyleconroy/sqlc/internal/engine/dolphin/convert.go:1722 +0xb73
github.com/kyleconroy/sqlc/internal/engine/dolphin.(*Parser).Parse(0xc00019a820, {0x5046aa0?, 0xc00003dca0?})
	github.com/kyleconroy/sqlc/internal/engine/dolphin/parse.go:63 +0x19d
github.com/kyleconroy/sqlc/internal/compiler.(*Compiler).parseQueries(0xc0004cc000, {0x50?, {0x50?, 0xe7?, {0x0?, 0x1?}}})
	github.com/kyleconroy/sqlc/internal/compiler/compile.go:102 +0x3ad
github.com/kyleconroy/sqlc/internal/compiler.(*Compiler).ParseQueries(...)
	github.com/kyleconroy/sqlc/internal/compiler/engine.go:49
github.com/kyleconroy/sqlc/internal/cmd.parse({_, _}, {_, _}, {_, _}, {_, _}, {{0xc0002934b6, 0x5}, ...}, ...)
	github.com/kyleconroy/sqlc/internal/cmd/generate.go:262 +0x253
github.com/kyleconroy/sqlc/internal/cmd.Generate({0x504baa0, 0xc00019e008}, {0xc0?, 0x6b?}, {0xc000040004, 0x21}, {0x0?, 0x4c01500?}, {0x50469c0, 0xc00019a010})
	github.com/kyleconroy/sqlc/internal/cmd/generate.go:183 +0x7b4
github.com/kyleconroy/sqlc/internal/cmd.glob..func3(0x5e32000, {0x4d52b07?, 0x0?, 0x0?})
	github.com/kyleconroy/sqlc/internal/cmd/cmd.go:144 +0x194
github.com/spf13/cobra.(*Command).execute(0x5e32000, {0x5ea5678, 0x0, 0x0})
	github.com/spf13/[email protected]/command.go:860 +0x663
github.com/spf13/cobra.(*Command).ExecuteC(0xc000370a00)
	github.com/spf13/[email protected]/command.go:974 +0x3b4
github.com/spf13/cobra.(*Command).Execute(...)
	github.com/spf13/[email protected]/command.go:902
github.com/spf13/cobra.(*Command).ExecuteContext(...)
	github.com/spf13/[email protected]/command.go:895
github.com/kyleconroy/sqlc/internal/cmd.Do({0xc0001a8010, 0x1, 0x1}, {0x5046980?, 0xc00019a000}, {0x50469c0?, 0xc00019a008}, {0x50469c0?, 0xc00019a010})
	github.com/kyleconroy/sqlc/internal/cmd/cmd.go:47 +0x4ba
main.main()
	github.com/kyleconroy/sqlc/cmd/sqlc/main.go:10 +0x7a

Database schema

CREATE TABLE authors (
  name text NOT NULL, 
  deleted_at datetime NOT NULL,
  created_at datetime NOT NULL,
  updated_at datetime NOT NULL
);

CREATE TABLE books (
  is_amazing tinyint(1) NOT NULL,
  deleted_at datetime NOT NULL,
  created_at datetime NOT NULL,
  updated_at datetime NOT NULL
);

SQL queries

-- name: DeleteAuthor :exec
UPDATE authors, books
SET
  authors.deleted_at = now(),
  authors.updated_at = now()
WHERE books.is_amazing = 1
AND authors.name = sqlc.arg(name);

Configuration

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

Playground URL

https://play.sqlc.dev/p/9fc9f9695357e74d7f9f4050bda23c51999cd7bb07380ff3615b69b6a4f8428c

What operating system are you using?

macOS

What database engines are you using?

MySQL

What type of code are you generating?

Go

drhoden-fastly avatar May 05 '22 17:05 drhoden-fastly

I have the same expected var range error with a double INNER JOIN UPDATE query.

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

j0holo avatar May 16 '22 15:05 j0holo

I also see this with convertDeleteStmt, although I'm pointing to a migrations folder (golang-migrate) and I'm not sure how to easily identify which one is the culprit.

blampe avatar Jul 27 '22 19:07 blampe

Same 'range var' problem here with this update query:

UPDATE clients_homes_bills chb
INNER JOIN `clients_homes`ch ON ch.ch_id = chb.chb_home_id
INNER JOIN `clients` c ON c.client_id = ch.ch_client_id
INNER JOIN `clients_installations` ci ON ci.ci_client_id = c.client_id
SET chb.chb_electricity=?, chb.chb_natural_gas=?, chb.chb_propane_gas=?, chb.chb_wood=?, chb.chb_heating_oil=?, chb.chb_year=?
WHERE ci.ci_user_id = ? AND chb.chb_id = ?;

ravayak avatar Apr 03 '23 14:04 ravayak