Closed
Description
Version
v1.18.0
What happened?
DB: MySQL
query_parameter_limit
configured to be greater than 1 will generate an error for statements containing sqlc.slice().
for example this code, arg
input not exist , but generate code still use arg
func (q *Queries) Test(ctx context.Context, iD []int64, exported TestExported) ([]int64, error) {
sql := test
var queryParams []interface{}
if len(arg.ID) > 0 {
for _, v := range arg.ID {
queryParams = append(queryParams, v)
}
sql = strings.Replace(sql, "/*SLICE:id*/?", strings.Repeat(",?", len(arg.ID))[1:], 1)
} else {
sql = strings.Replace(sql, "/*SLICE:id*/?", "NULL", 1)
}
queryParams = append(queryParams, arg.Exported)
rows, err := q.db.QueryContext(ctx, sql, queryParams...)
if err != nil {
return nil, err
}
defer rows.Close()
items := []int64{}
for rows.Next() {
var id int64
if err := rows.Scan(&id); err != nil {
return nil, err
}
items = append(items, id)
}
if err := rows.Close(); err != nil {
return nil, err
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
SQL queries
-- name: Test :many
SELECT `id`
FROM `test`
WHERE `id` IN (sqlc.slice("id"))
AND `exported` = ?;
Configuration
query_parameter_limit: 3
Playground URL
https://play.sqlc.dev/p/c146dea8a303a99e751b3608dede30a1bf8eea175078ac8e5580c5e2291c0810