On 02/17/2016 08:47 PM, Paul wrote:
> Let's say I have a following database structure:
>
> CREATE TABLE properties
> (
> name TEXT NOT NULL,
> value TEXT,
> PRIMARY KEY(name)
> ) WITHOUT ROWID;
>
> CREATE TABLE foo
> (
> id TEXT NOT NULL,
> PRIMARY KEY(id)
> );
>
> CREATE TRIGGER foo_inserted
> AFTER INSERT ON foo
> BEGIN
> INSERT OR IGNORE INTO properties(name, value) VALUES('foo_inserts', 0);
> UPDATE properties SET value = value + 1 WHERE name = 'foo_inserts';
> END;
>
> With a clean database I perform set of queries:
>
> INSERT OR REPLACE INTO foo(id) VALUES(1);
> INSERT OR REPLACE INTO foo(id) VALUES(2);
> INSERT OR REPLACE INTO foo(id) VALUES(3);
>
...
> I've made different test cases and came to a conclusion that 'OR IGNORE'
> clause inside
> a query within a body of trigger suddenly works as if it was 'OR REPLACE'.
The ON CONFLICT clause of the outer statement overrides the ON CONFLICT
clause of the statement within the trigger:
https://www.sqlite.org/mark/lang_createtrigger.html?However+if+an*used+instead
(scroll the page down a bit to see the highlighted statement)
Dan.