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. 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
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users