SQL logic error: near "RETURNING": syntax error (1) Go and SQLite

SQL logic error: near "RETURNING": syntax error (1) Go and SQLite

我正在创建一个 crud 应用程序,并且正在使用内存数据库测试数据库。 唯一中断的测试和函数是 toggleTask 函数和测试。

功能:

func (r *Repository) ToggleTask(task Task) (Task, error) {
    query := "UPDATE Tasks SET completed = NOT completed WHERE id = (?)"
    _, err := r.db.Exec(query, task.ID)
    if err != nil {
        return task, err
    }

    query = "SELECT id, txt, completed FROM Tasks WHERE id = (?) RETURNING *"
    err = r.db.QueryRow(query, task.ID).Scan(&task.ID, &task.Text, &task.ListID, &task.Completed)
    if err != nil {
        return task, err
    }

    return task, nil
}

测试:

const (
    ToggleTask = "SELECT id, txt, completed FROM Tasks WHERE id = (?) RETURNING *"
)

func TestToggleTask(t *testing.T) {
    repo := mockDbRepo()
    list := List{Name: "Test List"}
    repo.db.Exec(CreateList, list.Name)

    task := Task{Text: "Test Task", ListID: list.ID}
    repo.db.Exec(CreateTask, task.Text, task.ListID)

    completedTask,err := repo.ToggleTask(task)
    if err != nil {
        t.Error(err)
    }

    if !reflect.DeepEqual(completedTask, task) {
        t.Errorf("Expected %v, got %v", task, completedTask)
    }
}

对我的测试returns:

SQL logic error: near "RETURNING": syntax error (1)

您的 SQL 查询不正确。如 SQL Lite 文档中所述,SELECT 不接受 RETURNING 子句。 SELECT 子句本身就是 returns 数据。 删除查询中的 RETURNING 子句,您应该没问题。

SQL 精简版参考:https://www.sqlite.org/lang_select.html