Я не уверен, нашел ли я ошибку в SQLite или просто неправильно ее использую. Я храню относительные пути к файлам (как вы знаете их из файловых систем UNIX) в БД. В целях безопасности я пометил столбец как уникальный.
Ниже приведен очевидный пример, когда последняя команда неожиданно завершается неудачей с нарушенным ограничением UNIQUE. Моя цель - переименовать каталог с путем "a" в "d"
CREATE TABLE test (db_id INTEGER PRIMARY KEY, path TEXT UNIQUE);
INSERT INTO test (path) VALUES ('a');
INSERT INTO test (path) VALUES ('a/d/a');
INSERT INTO test (path) VALUES ('a/d');
INSERT INTO test (path) VALUES ('a/d/c');
INSERT INTO test (path) VALUES ('a/a');
INSERT INTO test (path) VALUES ('a/c');
INSERT INTO test (path) VALUES ('a/a/a');
UPDATE test SET path = 'd' WHERE db_id = 1;
UPDATE test SET path = replace(path, 'a/', 'd/') WHERE path GLOB 'a/*'
Любые идеи приветствуются.
Я использую SQlite v2.6.0.