[sqlite] Caveat in parsing create table statement

2011-05-13 Thread Jean-Christophe Deschamps
Dear list,

Is there a way to make SQLite accept this kind of constraint:

CREATE TABLE tab (
   id INTEGER NOT NULL,
   data INTEGER,
   CHECK(data = 0 or not exists (select 1 from tab where id = data)));

This toy exemple doesn't mean much as it is and the actual situation is 
a bit more involved.  Anyway, the crux of it is that the table name 
doesn't yet exist when the parser looks at the constraint, hence SQLite 
issues a no such table: tab error.

The docs say that a check table constraint can be any expression but 
this is clearly not the complete picture.

I tend to think that this statement should be accepted, but I'm in no 
way an expert in ISO SQL.

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


Re: [sqlite] Caveat in parsing create table statement

2011-05-13 Thread Samuel Adam
On Fri, 13 May 2011 12:06:23 -0400, Jean-Christophe Deschamps  
j...@antichoc.net wrote:

 Dear list,

 Is there a way to make SQLite accept this kind of constraint:

 CREATE TABLE tab (
id INTEGER NOT NULL,
data INTEGER,
CHECK(data = 0 or not exists (select 1 from tab where id = data)));

Off the top of my head, I do not believe subqueries are allowed at all in  
CHECK constraints.  Hmmm…

sqlite CREATE TABLE One (id INTEGER);
sqlite CREATE TABLE Two (other INTEGER,
... CHECK (other IN (SELECT id FROM One)));
Error: subqueries prohibited in CHECK constraints
sqlite

It appears I remembered correctly.  Yes, I also once had a use case for  
that; I solved it easily with a trigger.  Not sure about the doc issue you  
also mention.

Very truly,

SAMUEL ADAM ◊ http://certifound.com/ ◊ I read list mail sporadically.
763 Montgomery Road ◊ Hillsborough, NJ  08844-1304 ◊ United States
April 15, 2011 Courtroom Video in re Adam v. Supreme Court of N.J.:
http://www.youtube.com/watch?v=GPw2W2-Ujyc



 This toy exemple doesn't mean much as it is and the actual situation is
 a bit more involved.  Anyway, the crux of it is that the table name
 doesn't yet exist when the parser looks at the constraint, hence SQLite
 issues a no such table: tab error.

 The docs say that a check table constraint can be any expression but
 this is clearly not the complete picture.

 I tend to think that this statement should be accepted, but I'm in no
 way an expert in ISO SQL.
___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users