Csaba wrote:
> Is there any way to detect, based strictly on querying the structure of a
> table/database
> whether there is an AUTOINCREMENT set?  That is to say, without analyzing
> the
> original SQL creation statement, and without inserting a new element into
> the database.
> 

Yes there is. The autoincrement keyword can only be applied to an 
integer primary key column, and when it is, sqlite creates a entry in 
its internal sqlite_sequence table with the name set to the name of the 
table.

Note, a table's sequence entry isn't created until the first row has 
been added to the table. Also, the internal sequence table is not listed 
by a normal .tables meta command, but it is listed if you use a wildcard 
pattern.

BTW, the autoincrement keyword must appear after the integer primary key 
phrase, not in the middle as you have show it.

Since autoincrement can only be used with integer primary key columns, 
the column name in the table can be determined by looking at the output 
of the pragma table_info() command. It will be the primary key column 
indicated by the value 1 in the pk column.


     SQLite version 3.5.9
     Enter ".help" for instructions
     sqlite> create table t (id integer primary key autoincrement);
     sqlite> .tables '%'
     sqlite_sequence  t
     sqlite> .header on
     sqlite> .mode column
     sqlite> select * from sqlite_sequence;
     sqlite> insert into t values(1);
     sqlite> select * from sqlite_sequence;
     name        seq
     ----------  ----------
     t           1
     sqlite> pragma table_info(t);
     cid         name        type        notnull     dflt_value  pk
     ----------  ----------  ----------  ----------  ----------  ----------
     0           id          integer     0                       1

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

Reply via email to