Функция ON DUPLICATE KEY UPDATE для HSQLDBs не работает как в MYSQL? - PullRequest
1 голос
/ 30 января 2020

Я использую MYSQL ON DUPLICATE KEY UPDATE -функцию, и она работает, как я ожидаю, при работе с базой данных MYSQL. Но когда я пытаюсь написать тесты, работающие с HSQLDB в памяти, я испытываю другое поведение.

Принимая во внимание следующую таблицу:

CREATE TABLE foo (id INT PRIMARY KEY NOT NULL, counter INT);

Со следующим оператором вставки:

INSERT INTO foo(id, counter) VALUES (1, 1) ON DUPLICATE KEY UPDATE counter=counter+1
  • После первого запуска счетчик равен 1.
  • После второго запуска счетчик равен 2.
  • После третьего запуска счетчик по-прежнему равен 2. Здесь я ожидалось, что счетчик будет 3. (Это 3, если я выполняю те же запросы против MYSQL).

Это ошибка, или я неправильно понял, как ON DUPLICATE KEY UPDATE должен работать?

Рабочий пример приведен в следующем github-хранилище: https://github.com/mortenberg80/hsqldbtest

1 Ответ

1 голос
/ 20 февраля 2020

В первоначальной реализации HSQLDB ON DUPLICATE UPDATE использовался список VALUES в качестве источника обновления во всех случаях, когда встречалось col_name. В версии 2.5.1 было улучшено использование существующих значений строк таблицы в качестве источника для col_name и использование списка VALUES в качестве источника для VALUES (col_name). Это соответствует MySQL использованию.

...