У меня есть следующая таблица SQLite:
CREATE TABLE podcast_search (
_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
search TEXT NOT NULL UNIQUE
)
Всякий раз, когда пользователь вставляет / обновляет строку в таблице, я хочу отсортировать эту строку в конце таблицы.Таким образом, если я вставлю следующие значения:
_id | search | sort
===================
1 | foo | 1
2 | bar | 2
3 | quiz | 3
, а затем обновлю строку 1
с foo
до foo2
, значения должны выглядеть следующим образом:
_id | search | sort
===================
2 | bar | 2
3 | quiz | 3
1 | foo2 | 4
Я реализовал это таким образом:
CREATE TABLE podcast_search (
_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
search TEXT NOT NULL UNIQUE,
update_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
)
CREATE TRIGGER update_date_update_trigger
AFTER UPDATE ON podcast_search FOR EACH ROW
BEGIN
UPDATE podcast_search
SET update_date = CURRENT_TIMESTAMP
WHERE _id = OLD._id;
END
Тем не менее, мои модульные тесты требуют 1000ms
сна между операциями вставки / обновления для надежной сортировки, и эта величина задержки очень раздражает для модульного тестирования.
Я думал, что вместо этого мог бы реализовать векторные часы, но кажется, что значения AUTOINCREMENT
существуют только для столбцов первичного ключа.SQLite предлагает какой-либо другой AUTOINCREMENT
или AUTOINCREMENT
-подобный вариант?
Я запускаю это на Android P, но это должно быть общей проблемой SQLite.
ОБНОВЛЕНИЕ
Сейчас я использую столбец sort INTEGER NOT NULL UNIQUE
и SELECT
- самую большую строку в этом столбце и вручную увеличиваю ее до значения INSERT/UPDATE
:
CREATE TABLE podcast_search (
_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
search TEXT NOT NULL UNIQUE,
sort INTEGER NOT NULL UNIQUE
)
SELECT sort from podcast_search ORDER BY sort DESC
либо увеличьте sort
в коде приложения, либо установите его на 0
Могу ли я сделать это вместо TRIGGER
?