Hi, Peter,

On Wed, Apr 13, 2016 at 1:16 PM, Peter Aronson <pbaronson at att.net> wrote:
> There is one limitation to this approach, however.  The entry for an 
> autoincrement column in the sqlite_sequence table isn't made until the first 
> row is inserted into the table.  If you are also using the C interface, you 
> can identify autoincrement columns using sqlite3_table_column_metadata.

I will test that when I come home from work.

Thank you.

>
> Peter
>
>     On Wednesday, April 13, 2016 9:40 AM, Igor Korot <ikorot01 at gmail.com> 
> wrote:
>
>
>
>  Hi, Kees,
>
> On Wed, Apr 13, 2016 at 12:15 PM, Kees Nuyt <k.nuyt at zonnet.nl> wrote:
>> On Wed, 13 Apr 2016 10:58:54 -0400, Igor Korot
>> <ikorot01 at gmail.com> wrote:
>>
>>> Hi,,
>>>
>>>On Wed, Apr 13, 2016 at 10:54 AM, J Decker <d3ck0r at gmail.com> wrote:
>>>> Yes, you can get the create statement from sqlite_master table
>>>
>>> I was kind of hoping for a simpler solution so that not to
>>> parse "CREATE TABLE" statement...
>>>
>>> Well, I guess I will have to.
>>
>> With AUTOINCREMENT, the last autoincremented primary key value
>> is tracked in a table called sqlite_sequence.
>>
>> $ sqlite3 test2.db
>> SQLite version 3.8.12 2015-10-07 00:35:18
>> Enter ".help" for usage hints.
>> sqlite> create table t1 (id INTEGER PRIMARY KEY, tx TEXT);
>> sqlite> create table t2 (id INTEGER PRIMARY KEY AUTOINCREMENT,
>> tx TEXT);
>> sqlite> INSERT INTO t1 (tx) VALUES ('one'),('two');
>> sqlite> INSERT INTO t2 (tx) VALUES ('one'),('two');
>> sqlite> SELECT name FROM sqlite_master WHERE type='table';
>> t1
>> t2
>> sqlite_sequence
>> sqlite> SELECT * FROM sqlite_sequence;
>> t2|2
>> sqlite>
>
> So I can actually query sqlite_sequence table with the table name in WHERE
> clause and it should give me the field that is set to be autoincrement.
>
> For the reference: https://www.sqlite.org/fileformat2.html (paragraph 2.6.2).
>
> Thank you.
>
> P.S.: There is a small typo on the page/paragraph I referenced:
>
> [quote]
> The schema for the sqlite_sequence table is:
>
> CREATE TABLE sqlite_sequence(name,seq);
>
> There is a single row in the sqlite_sequence table for each ordinary
> table that uses AUTOINCREMENT. The name of the table (as it appears in
> sqlite_master.name) is in the sqlite_sequence.main field and the
> largest INTEGER PRIMARY KEY ever used by that table is in the
> sqlite_sequence.seq field.
> [/quote]
>
> That should be changed to:
>
> [changes}
> The name of the table (as it appears in sqlite_master.name) is in the
> sqlite_sequence._name_ field
> [/changes]
>
> Could someone please correct that? The changes are between the underscores.
>
> Thank you.
>
>>
>> Hope this helps
>>
>>
>>>>
>>>> On Wed, Apr 13, 2016 at 4:54 AM, Igor Korot <ikorot01 at gmail.com> wrote:
>>>>> Hi,
>>>>> Is it possible to get whether the column is set to autoincrement or not?
>>>>>
>>>>> PRAGMA table_info() does not give such info...
>>>>>
>>>>> Thank you.
>>
>> --
>> Regards,
>> Kees Nuyt
>> _______________________________________________
>> sqlite-users mailing list
>> sqlite-users at mailinglists.sqlite.org
>> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
> _______________________________________________
> sqlite-users mailing list
> sqlite-users at mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
>
>
>
> _______________________________________________
> sqlite-users mailing list
> sqlite-users at mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to