sql
sql copied to clipboard
Parsing failure with parenthesis in WHERE clause
The following update statement produces an error, although legal in sqlite3:
update_test.go:33: failed: 8:8: expected semicolon or EOF, found ndx
code
func TestUpdate(t *testing.T) {
s := `UPDATE asynq_tasks
SET state='active',
pending_since=NULL,
affinity_timeout=server_affinity,
deadline=iif(task_deadline=0, task_timeout+1687276020, task_deadline)
WHERE asynq_tasks.state='pending'
AND (task_uuid,
ndx,
pndx,
task_msg,
task_timeout,
task_deadline)=
(SELECT task_uuid,
ndx,
pndx,
task_msg,
task_timeout,
task_deadline
FROM asynq_tasks)
`
stmt, err := sql.NewParser(strings.NewReader(s)).ParseStatement()
if err != nil {
t.Fatalf("failed: %v", err)
}
_, ok := stmt.(*sql.UpdateStatement)
if !ok {
t.Fatalf("failed: expected UpdateStatement")
}
}