Thanks for this. I've not implemented this yet as I discovered a minor issue with the wrapper I'm using in that it doesn't like sending multiple SQL commands in one go, so I need to adapt my code, or adapt the wrapper to allow for multiple statements.
On Thu, Oct 12, 2017 at 9:38 AM, David Raymond <david.raym...@tomtom.com> wrote: > At the bottom of http://www.sqlite.org/lang_createtrigger.html you can > find the raise function info and decide which of ignore, rollback, abort or > fail works best for you. Descriptions here: http://www.sqlite.org/lang_ > conflict.html > > Insert the priority 0 row first, then do something like... > > create trigger pri0_stop_insert > before insert on ColorScheme > when new.PriorityLevel = 0 > begin > select raise(abort, 'No inserting priority 0 colors'); > end; > > create trigger pri0_stop_update > before update on ColorScheme > when old.PriorityLevel = 0 > begin > select raise(abort, 'No updating priority 0 colors'); > end; > > create trigger pri0_stop_delete > before delete on ColorScheme > when old.PriorityLevel = 0 > begin > select raise(abort, 'No deleting priority 0 colors'); > end; > > > -----Original Message----- > From: sqlite-users [mailto:sqlite-users-boun...@mailinglists.sqlite.org] > On Behalf Of Hick Gunter > Sent: Thursday, October 12, 2017 3:01 AM > To: 'SQLite mailing list' > Subject: Re: [sqlite] [EXTERNAL] Trigger Question > > INSTEAD OF triggers are only allowed on views. > > From the documentation I would suggest using a BEFORE trigger and calling > RAISE() in the trigger program. I expect RAISE(IGNORE) to silently abort > the calling statement. > > -----Ursprüngliche Nachricht----- > Von: sqlite-users [mailto:sqlite-users-boun...@mailinglists.sqlite.org] > Im Auftrag von Stephen Chrzanowski > Gesendet: Donnerstag, 12. Oktober 2017 08:36 > An: General Discussion of SQLite Database <sqlite-users@mailinglists. > sqlite.org> > Betreff: [EXTERNAL] [sqlite] Trigger Question > > I'm setting up a resource string to drop, recreate, and repopulate a table > to use as a type of default values for colors on the UI. Essentially a > default set of priority levels and FG/BG colors associated with that > priority color. > > The table schema is as such: > > CREATE TABLE [ColorScheme]( > [PriorityLevel] INTEGER PRIMARY KEY ON CONFLICT REPLACE NOT NULL, > [ForegroundColor] BIGINT NOT NULL DEFAULT 0, > [BackgroundColor] BIGINT NOT NULL DEFAULT 12632256, > [PriorityText] CHAR NOT NULL); > > I then insert a bunch of default values I want, looking like this: > > insert into ColorScheme values > (0,000+000*256+000*65536,192+192*256+192*65536,'Unknown'); > > Essentially hard coding the default color when I display something on the > UI that is of priority level 0. > > What my objective is, once I populate the initial set of data, I want to > block any and all attempts that my code COULD do to update this exact row > above. So on any insert, delete, or update, if PriorityLevel=0, I want a > NOOP. This row does not update, it does not get deleted, this row > essentially becomes bulletproof until I delete the table or trigger. The > user is not informed of the inaction. > > Since I'm never going to have a priority of -1, I decided to try a trigger > like this: > > Create Trigger ColorSchemeInsert instead of insert on ColorScheme for each > row when NEW.PriorityLevel=0 begin delete from ColorScheme where > PriorityLevel=-1; end; > > However, SQLite Expert is throwing an error saying "cannot create INSTEAD > OF trigger on table: ColorScheme". > > If I remove the INSTEAD OF statement, the trigger is created without > error, BUT, based on this ON CONFLICT REPLACE statement, the insert happens > anyways. > > Thoughts? > > (For now, I'm not going to worry about the trigger, but it is something I > want in) _______________________________________________ > sqlite-users mailing list > sqlite-users@mailinglists.sqlite.org > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users > > > ___________________________________________ > Gunter Hick | Software Engineer | Scientific Games International GmbH | > Klitschgasse 2-4, A-1130 Vienna | FN 157284 a, HG Wien, DVR: 0430013 | (O) +43 > 1 80100 - 0 > > May be privileged. May be confidential. Please delete if not the addressee. > _______________________________________________ > sqlite-users mailing list > sqlite-users@mailinglists.sqlite.org > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users > _______________________________________________ > sqlite-users mailing list > sqlite-users@mailinglists.sqlite.org > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users > _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users