Логическая ошибка SQL: рядом с «RETURNING»: синтаксическая ошибка (1) Go и SQLite

Я создаю crud-приложение и тестирую базу данных с помощью встроенной в память БД. Единственным тестом и функциями, которые ломаются, являются toggleTask func и test.

функция:

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

Тест возвращается ко мне:

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

Нет смысла использовать RETURNING в операторе SELECT, и SQLite его не поддерживает. Уберите RETURNING и все после этого из ваших заявлений.

forpas 15.05.2022 16:52

Если я не использую возврат, как я могу сканировать результаты запроса на выборку. Теперь я получаю «sql: нет строк в наборе результатов»

Атанас Чолаков 15.05.2022 17:07

Оператор SELECT по своей конструкции возвращает строки. Я не могу сказать, правильный ли ваш код перехода, но если это так, то, возможно, в таблице нет строк с таким идентификатором.

forpas 15.05.2022 17:10

Да спасибо большое теперь работает. У меня проблема с vsCode, и он не сохраняется и не компилируется в моменты времени, и мне нужно перезапустить его несколько раз, чтобы он заработал.

Атанас Чолаков 15.05.2022 17:32
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
4
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш SQL-запрос неверен. Как указано в документации SQL Lite, SELECT не принимает предложение RETURNING. Предложение SELECT само по себе возвращает данные. Удалите предложения RETURNING в своих запросах, и все будет хорошо.

Ссылка на SQL Lite: https://www.sqlite.org/lang_select.html

Другие вопросы по теме