Sqlite вставить триггер на виртуальную таблицу с условием - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь вставить виртуальную таблицу только тогда, когда выполнено условие для вставки, например, когда тип имеет значение «-1», а затем только вставить.

Но она вставляла все записи

DROP TRIGGER if exists test_ai;

CREATE TRIGGER test_ai AFTER INSERT ON test 
WHEN new.type = -1
BEGIN INSERT INTO 
test_fts(body) VALUES (new.body); 
END;

/*Create table */
CREATE TABLE `test` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `body` TEXT, `caption` TEXT, `type` INTEGER );

/*Create virtual table */
CREATE VIRTUAL TABLE test_fts USING fts5(body, content=test, content_rowid=id);

/* Insert into test table*/
insert into test(body, caption, type) values("5", "",-6);

1 Ответ

0 голосов
/ 18 марта 2020

Это просто выглядит как они там, это в основном виртуальная "копия" таблицы содержимого. Однако в запросе FTS будут возвращены только строки, вставленные с помощью триггера. Попробуйте

SELECT * from test_fts where body MATCH '5' 

Это будет , а не вернуть строку образца. Вставка триггера строит структуру FTS для нужной строки.

...