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