The phrase "integer primary key" is the "wingardium leviosa" of the sqlite world. It must be pronouced correctly, lest you end up with a buffalo on your chest.
-----Ursprüngliche Nachricht----- Von: sqlite-users [mailto:sqlite-users-boun...@mailinglists.sqlite.org] Im Auftrag von Thierry Henrio Gesendet: Donnerstag, 04. Oktober 2018 11:14 An: sqlite-users@mailinglists.sqlite.org Betreff: [EXTERNAL] Re: [sqlite] alter table, other alter category, fails in presence of trigger on 3.25.2 Hello Keith, On Thu, Oct 4, 2018 at 1:16 AM Keith Medcalf <kmedc...@dessus.com> wrote: > > Unrelated, but are you sure that you want the albums "id int primary key" > and did not happen to misspell "integer" so that the declaration > should be "id integer primary key". In the former case, id is an > integer that just happens to be unique (ie, "id int primary key" is > the same as "id integer > unique") and not an explicitly named alias for the rowid (which > requires correct spelling of the phrase "integer primary key"). > I though "int" was the same as "integer" ( https://www.sqlite.org/datatype3.html). Thanks. > Second unrelated, do you not want an affinity for the album_id column > in rates? Should not you have declared it as "album_id integer > references > albums(id) on delete cascade"? > Correct. Third unrelated, do not forget to create an index on the foreign key (as in > "CREATE INDEX idxRates_album_id on rates (album_id)" for example). > Sure. Fourth unrelated, do you want the title and comment_text to be case > sensitive or should they have COLLATE NOCASE? > No. > As to the issue with the updated table rename, you can either use a > version of sqlite3 that does not have the alter table rename updates, > or for version 3.25.2 use the pragma "PRAGMA legacy_alter_table=ON" to > avoid using the new "change the table names in triggers etc" features > added in > 3.25.0 so that you can continue to use the old method of just > "substituting tables". > Indeed, use the pragma, thanks! https://www.sqlite.org/pragma.html#toc using pragma, the following script output 5, which is expected result. drop table if exists albums; drop table if exists rates; -- create table albums (id integer primary key, title text, score int); create table rates (album_id integer references albums(id) on delete cascade, score int); create trigger test after insert on rates begin update albums set score=new.score where id=new.album_id; end; -- insert into albums (id, title) values (1, 'Cheap Thrills'); -- begin; pragma legacy_alter_table=ON; drop table if exists new_albums; create table new_albums (id int primary key, title text not null, score int); insert into new_albums (id, title, score) select id, title, score from albums; drop table albums; alter table new_albums rename to albums; pragma legacy_alter_table=OFF; end; -- insert into rates values (1, 5); select score from albums; When I comment the pragma, I have Error: near line 16: error in trigger test: no such table: main.albums Error: near line 20: no such table: main.albums Error: near line 21: no such table: albums It is a resolution for the problem I faced : add a constraint to colum of a table referenced in a trigger. Do you believe ? a) https://www.sqlite.org/lang_altertable.html#otheralter could be updated. b) rename A to B should not fail in the face of a trigger referencing B. ? , Thierry _______________________________________________ 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