Thanks for the help. Adding a trailing underscore helped also. I'm still wondering why insertion worked at all because defining oid as column name with the type VARCHAR should result in an error on execution.
> > > On 2015-04-09 12:00 AM, Gustav Melno wrote: >> The example below is s subset of my ical storage database which has >> problems with foreign keys. Although I tried a lot I couldn't figure >> out why the foreign key doesn't work. I took the example from the >> documentation and compared to my two tables, there is no major >> difference or I don't see the mistake. The delete statement in the >> last line doesn't work. I also tried the lates sqlite version but the >> error is the same. I always get "Error: near line 44: FOREIGN KEY >> constraint failed". Any help is appreciated. >> //...<Snipped> > > Funny glitch - It's because you use "oid" which is an alias for the > row_id of the table. > > To prove that point, here it is running in SQLitespeed and the results > is much the same through the Command-line utility (I added some > selects to just be sure the data actually goes in and actually gets > deleted). This first iteration fails: > > -- Processing SQL in: D:\Documents\SQLiteAutoScript.sql > -- Script Items: 10 Parameter Count: 0 > -- 2015-04-09 16:23:06.966 | [Info] Script Initialized, > Started executing... > -- > ================================================================================================ > > CREATE TABLE ical( > id INTEGER PRIMARY KEY, > oid VARCHAR, > description VARCHAR > ); > > CREATE TABLE icalentry( > id INTEGER PRIMARY KEY, > calendar INTEGER REFERENCES ical(id) ON UPDATE CASCADE ON DELETE > CASCADE, > uuid VARCHAR > ); > > INSERT INTO ical(oid,description) VALUES('123',''); > > INSERT INTO icalentry(calendar,uuid) VALUES(last_insert_rowid(),'abcd'); > > SELECT * FROM ical; > > > -- | |descript- > -- id | oid | ion > -- ------------|------------|---------- > -- 1 | 123 | > > SELECT * FROM icalentry; > > > -- id | calendar |uuid > -- ------------|------------|---------- > -- 1 | 1 |abcd > > SELECT C.*, CE.* > FROM ical AS C > LEFT JOIN icalentry AS CE ON CE.calendar=C.id > ; > > > -- | |descript-| | | > -- id | oid | ion | id | calendar |uuid > -- > ------------|------------|---------|------------|------------|---------- > -- 1 | 123 | | 1 | 1 |abcd > > DELETE FROM ical; > > -- 2015-04-09 16:23:06.983 | [ERROR] FOREIGN KEY constraint > failed > -- Script Stats: Total Script Execution Time: 0d 00h 00m and > 00.030s > -- Total Script Query Time: 0d 00h 00m and > 00.006s > -- Total Database Rows Changed: 2 > -- Total Virtual-Machine Steps: 196 > -- Last executed Item Index: 8 > -- Last Script Error: Script Failed in Item 7: > FOREIGN KEY constraint failed > -- > ------------------------------------------------------------------------------------------------ > > -- 2015-04-09 16:23:06.984 | [Info] Script failed - Rolling > back... > -- 2015-04-09 16:23:06.985 | [Success] Transaction Rolled back. > -- 2015-04-09 16:23:06.985 | [ERROR] Failed to complete: > Script Failed in Item 7: FOREIGN KEY constraint failed > -- ------- DB-Engine Logs (Contains logged information from all DB > connections during run) ------ > -- [2015-04-09 16:23:06.937] APPLICATION : Script > D:\Documents\SQLiteAutoScript.sql started at 16:23:06.937 on 09 April. > -- [2015-04-09 16:23:06.981] ERROR (284) : automatic index on > icalentry(calendar) > -- > ================================================================================================ > > > Nevermind that error 284, that's just SQLite infoming us it had to > make an index to do the queries, so you should add an index there, but > it matters none in the test. > > And this next iteration succeeds after I changed the "oid" to "xid": > > > -- Processing SQL in: D:\Documents\SQLiteAutoScript.sql > -- Script Items: 10 Parameter Count: 0 > -- 2015-04-09 16:25:11.141 | [Info] Script Initialized, > Started executing... > -- > ================================================================================================ > > CREATE TABLE ical( > id INTEGER PRIMARY KEY, > xid VARCHAR, > description VARCHAR > ); > > CREATE TABLE icalentry( > id INTEGER PRIMARY KEY, > calendar INTEGER REFERENCES ical(id) ON UPDATE CASCADE ON DELETE > CASCADE, > uuid VARCHAR > ); > > INSERT INTO ical(xid,description) VALUES('123',''); > > INSERT INTO icalentry(calendar,uuid) VALUES(last_insert_rowid(),'abcd'); > > SELECT * FROM ical; > > > -- | |descript- > -- id | xid | ion > -- ------------|------------|---------- > -- 1 | 123 | > > SELECT * FROM icalentry; > > > -- id | calendar |uuid > -- ------------|------------|---------- > -- 1 | 1 |abcd > > SELECT C.*, CE.* > FROM ical AS C > LEFT JOIN icalentry AS CE ON CE.calendar=C.id > ; > > > -- | |descript-| | | > -- id | xid | ion | id | calendar |uuid > -- > ------------|------------|---------|------------|------------|---------- > -- 1 | 123 | | 1 | 1 |abcd > > DELETE FROM ical; > > SELECT * FROM ical; > > > SELECT * FROM icalentry; > > > -- Script Stats: Total Script Execution Time: 0d 00h 00m and > 00.033s > -- Total Script Query Time: 0d 00h 00m and > 00.009s > -- Total Database Rows Changed: 4 > -- Total Virtual-Machine Steps: 228 > -- Last executed Item Index: 10 > -- Last Script Error: > -- > ------------------------------------------------------------------------------------------------ > > -- 2015-04-09 16:25:11.161 | [Success] Script Success. > -- 2015-04-09 16:25:11.162 | [Success] Transaction Rolled back. > -- ------- DB-Engine Logs (Contains logged information from all DB > connections during run) ------ > -- [2015-04-09 16:25:11.114] APPLICATION : Script > D:\Documents\SQLiteAutoScript.sql started at 16:25:11.114 on 09 April. > -- [2015-04-09 16:25:11.157] ERROR (284) : automatic index on > icalentry(calendar) > -- > ================================================================================================ > > _______________________________________________ > sqlite-users mailing list > sqlite-users at mailinglists.sqlite.org > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users