According to the documentation:

   The name of the table to be modified in an UPDATE, DELETE, or INSERT
   statement must be an unqualified table name. In other words, one
   must use just "tablename" not "database.tablename" when specifying
   the table. *The table to be modified must exist in the same database
   as the table or view to which the trigger is attached.*

http://sqlite.org/lang_createtrigger.html

I'm struggling to understand the rationale for the first sentence, but before getting very far I stumble on the second sentence to which the following appears to be a counterexample.

create table t (x);
insert into t values (0);
create temp view v as select * from t;

/*
    Trigger will be attached to view v in database temp.
    But the update modifies table t exists only in main, not temp.
*/
create temp trigger trg1 instead of update on temp.v
begin
    update t set x = new.x;
end;

update v set x = 1;
select 'main', * from main.t;

/*
main|1
*/

select 'main' db, tbl_name,  type, name from main.sqlite_master
union select 'temp', tbl_name,  type, name from temp.sqlite_master;

/*
main|t|table|t
temp|v|trigger|trg1
temp|v|view|v
*/

/*
The table affected by the update in the trigger follows the ordinary rule for resolving unqualified table names, i.e., first temp database, then least recently attached.
*/

create temp table t (x);
insert into temp.t values (0);

update main.t set x = 0;

update v set x = 1;

select 'main', * from main.t
union select 'temp', * from temp.t;

/*
main|0
temp|1
*/

_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to