Thank you Eric and Jay. Your replies address my concerns. I mean, I'm no
longer concerned :)

Thanks,
Kavita


On 10/14/10 1:20 PM, "Jay A. Kreibich" <j...@kreibi.ch> wrote:

> On Thu, Oct 14, 2010 at 12:33:11PM -0500, Kavita Raghunathan scratched on the
> wall:
>> Hello,
>> 
>> My Primary Key is an integer. In the lifetime of a product, it may increase
>> to the maximum possible value of an integer. Our processor will make it
>> overflow into a very large negative number and so on.
>> 
>> My specific question is, if overflow occurs, how does sqlite deal with it?
>> 
>>  1.  What if its a large negative number ?
>>  2.  What if there is already a PK with the rolled over value, say 1?
> 
>   http://www.sqlite.org/autoinc.html --
> 
>     If no ROWID is specified on the insert, or if the specified ROWID
>     has a value of NULL, then an appropriate ROWID is created
>     automatically. The usual algorithm is to give the newly created row
>     a ROWID that is one larger than the largest ROWID in the table
>     prior to the insert. If the table is initially empty, then a ROWID
>     of 1 is used. If the largest ROWID is equal to the largest possible
>     integer (9223372036854775807) then the database engine starts
>     picking positive candidate ROWIDs at random until it finds one that
>     is not previously used. If no unused ROWID can be found after a
>     reasonable number of attempts, the insert operation fails with an
>     SQLITE_FULL error. If no negative ROWID values are inserted
>     explicitly, then automatically generated ROWID values will always
>     be greater than zero.
> 
>     [...]
> 
>     If a column has the type INTEGER PRIMARY KEY AUTOINCREMENT then a
>     slightly different ROWID selection algorithm is used. The ROWID
>     chosen for the new row is at least one larger than the largest
>     ROWID that has ever before existed in that same table. If the table
>     has never before contained any data, then a ROWID of 1 is used. If
>     the table has previously held a row with the largest possible
>     ROWID, then new INSERTs are not allowed and any attempt to insert a
>     new row will fail with an SQLITE_FULL error.
> 
>> This maybe a common problem you all may have ran into.
> 
>   No, not normally.  64-bits is a *really* big domain.
> 
>    -j

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

Reply via email to