I run "PRAGMA integrity_check" using version 3.6.14 at the end of the  
code and it executed a query with only one row "ok", so where do I  
have to send the databbase?
Thanks

Citando "D. Richard Hipp" <d...@hwaci.com>:

>
> On Jun 18, 2009, at 9:04 AM, galea...@korg.it wrote:
>
>> I updated sqlite version from 3.6.14 to 15, now when I try to run a
>> C++ code to fill the database I have SQLITE_CORRUPT error.
>
> New logic was added to version 3.6.15 to detect database corruption
> sooner.
>
> What happens when you run "PRAGMA integrity_check" using version
> 3.6.14?  Do you see the problem then too?  If so, that means your
> database is corrupt and it was simply going undetected before.  If
> not, then please email you database and I will have a look.
>
>
>> This error
>> happens in the accessPayload method (btree.c) in the condition
>> if( rc==SQLITE_OK && amt>0 ){
>>     return SQLITE_CORRUPT_BKPT;
>> }
>> where rc is SQLITE_OK but amt = 12070.
>> It follows a part of call stack:
>> int sqlite3BtreeKey(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){
>>      ..........
>>     rc = accessPayload(pCur, offset, amt, (unsigned char*)pBuf, 0, 0);
>>   }
>>
>> static int saveCursorPosition(BtCursor *pCur){
>> ...
>>   if( pKey ){
>>       rc = sqlite3BtreeKey(pCur, 0, (int)pCur->nKey, pKey);
>>
>> static int saveAllCursors(BtShared *pBt, Pgno iRoot, BtCursor
>> *pExcept){
>>   BtCursor *p;
>>   assert( sqlite3_mutex_held(pBt->mutex) );
>>   assert( pExcept==0 || pExcept->pBt==pBt );
>>   for(p=pBt->pCursor; p; p=p->pNext){
>>     if( p!=pExcept && (0==iRoot || p->pgnoRoot==iRoot) &&
>>         p->eState==CURSOR_VALID ){
>>       int rc = saveCursorPosition(p);
>>       if( SQLITE_OK!=rc ){
>>         return rc;
>>       }
>>     }
>>   }
>>   return SQLITE_OK;
>> }
>>
>>  int sqlite3BtreeDelete(BtCursor *pCur){
>>   .....
>>     (rc = restoreCursorPosition(pCur))!=0 ||
>>     (rc = saveAllCursors(pBt, pCur->pgnoRoot, pCur))!=0 ||
>>     (rc = sqlite3PagerWrite(pPage->pDbPage))!=0
>>   ){
>>     return rc;
>>
>>
>> The statement is:
>> "INSERT INTO PlayList_Song(id_song, id_playlist, song_number) VALUES
>> (?, ?, ?)"
>> and the table is:
>> CREATE TABLE PlayList_Song (
>>     id_song         INT NOT NULL,
>>     id_playlist     INT NOT NULL,
>>     song_number     INTEGER NOT NULL,
>> PRIMARY KEY (id_playlist, song_number),
>> CONSTRAINT fk_PlayList_Song1 FOREIGN KEY (id_song)
>>     REFERENCES Song (id)
>>     ON DELETE CASCADE
>>     ON UPDATE CASCADE,
>> CONSTRAINT fk_PlayList_Song2 FOREIGN KEY (id_playlist)
>>     REFERENCES PlayList (id)
>>     ON DELETE CASCADE
>>     ON UPDATE CASCADE);
>>
>> CREATE INDEX PlayList_Song_song_number_idx ON
>> PlayList_Song(song_number);
>>
>> Have you got any ideas about this problem? Is it a bug of new version?
>> _______________________________________________
>> sqlite-users mailing list
>> sqlite-users@sqlite.org
>> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
> D. Richard Hipp
> d...@hwaci.com
>
>
>
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>


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

Reply via email to