sql icon indicating copy to clipboard operation
sql copied to clipboard

Parsing failure with parenthesis in WHERE clause

Open elv-gilles opened this issue 1 year ago • 0 comments

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")
	}
}

elv-gilles avatar Jun 20 '23 17:06 elv-gilles