Hi William,

"Duquette, William H (318K)" <william.h.duque...@jpl.nasa.gov> writes:

> On 8/19/11 10:18 AM, "Boris Kolpackov" <bo...@codesynthesis.com> wrote:
>
> There's something odd here.  You have the FK constraints deferred, and
> your code looks like this:
>
> BEGIN TRANSACTION;
> DROP TABLE employer;
> DROP TABLE employee;
> COMMIT;
>
> According to the sqlite docs, dropping a table when FK constraints are
> enabled does an implicit "DELETE FROM" first.  That DELETE FROM is causing
> the constraint violations.  But you have them deferred; they won't be
> reported until the COMMIT, and only if the constraints are still violated
> at that time.  But by then, you've also dropped the employee table, so how
> can there still be FK constraint violations?

That's exactly what I have said in my original post ;-).


> Am I missing something?

If so, then that would be the two of us. Though I think this is a bug
in SQLite.


> Are you sure you're dropping the tables in a transaction?

The SQL code I included in my original email can be copy-n-pasted into
the sqlite3 utility to verify this behavior. E.g., do:

$ cat | sqlite3 /tmp/fresh.db

Then copy-n-paste the following SQL (including the last blank line):

--------------------------------
PRAGMA foreign_keys=ON;

BEGIN TRANSACTION;

CREATE TABLE employer (name TEXT NOT NULL PRIMARY KEY);

INSERT INTO employer VALUES('Simple Tech Ltd');

CREATE TABLE employee (
  id INTEGER NOT NULL PRIMARY KEY,
  employer TEXT NOT NULL,
  FOREIGN KEY (employer) REFERENCES employer (name) DEFERRABLE INITIALLY 
DEFERRED);

INSERT INTO employee VALUES(1, 'Simple Tech Ltd');

COMMIT;

BEGIN TRANSACTION;
DROP TABLE employer;
DROP TABLE employee;
COMMIT;

--------------------------------

And you will get:

Error: near line 21: foreign key constraint failed

Boris
-- 
Boris Kolpackov, Code Synthesis        http://codesynthesis.com/~boris/blog
Compiler-based ORM system for C++      http://codesynthesis.com/products/odb
Open-source XML data binding for C++   http://codesynthesis.com/products/xsd
XML data binding for embedded systems  http://codesynthesis.com/products/xsde

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

Reply via email to