On Jun 18, 2009, at 11:01 AM, galea...@korg.it wrote: > 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?
d...@sqlite.org > > 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 D. Richard Hipp d...@hwaci.com _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users