メッセージング スレッドを格納するために、データベースの下位スキーマを使用しています。
CREATE TABLE threads(
_id INTEGER PRIMARY KEY AUTOINCREMENT,
date_sent_or_received INTEGER,
read INTEGER,
count INTEGER,
body TEXT,
address TEXT,
error_code INTEGER);
SMS テーブルに値を挿入するたびにアクティブになる次のトリガーがあります。
CREATE TRIGGER update_thread_id AFTER INSERT ON sms
WHEN
0 <> (select count() from threads
where length(address)>=length(new.address)
and substr(address, length(address)-length(new.address)+1) like new.address)
BEGIN
UPDATE threads SET
address = new. address
where substr(address, length(address)-length(new.address)+1) like new.address;
UPDATE threads SET
date_sent_or_received=new.date_sent_or_received,
read = new.read,
body = new.body
where date_sent_or_received<=new.date_sent_or_received
and address like new.address;
UPDATE sms SET
thread_id= (select _id from threads
where address like new.address)
where _id = new._id;
UPDATE threads SET
count = (select count() from sms
where thread_id=(select _id from threads
where address like new.address))
where address like new.address;
END;
スレッドが新しいものよりも古い場合にのみ、スレッドの内容を変更しようとしているという問題が発生しています。こんなふうになります。
UPDATE threads SET
date_sent_or_received=new.date_sent_or_received,
read = new.read,
body = new.body
where date_sent_or_received<=new.date_sent_or_received
and address like new.address;
しかし、うまくいきません。新しく挿入された行のタイムスタンプが大きい場合でも、テーブルの内容は同じままです。このトリガーは、新しく追加された行に従ってアドレスを更新します。
整数で秒を格納しています。私が間違っているアイデアはありますか?