Index: src/btree.c ================================================================== --- src/btree.c +++ src/btree.c @@ -10475,23 +10475,33 @@ #else if( rc==SQLITE_BUSY_SNAPSHOT && pgno ){ PgHdr *pPg = 0; int rc2 = sqlite3PagerGet(pBt->pPager, pgno, &pPg, 0); if( rc2==SQLITE_OK ){ - u8 pageFlags = 0; int bWrite = -1; const char *zObj = 0; const char *zTab = 0; + char zContent[17]; if( pPg ){ Pgno pgnoRoot = 0; HashElem *pE; Schema *pSchema; + u8 *aData = (u8*)sqlite3PagerGetData(pPg); + int i; + for(i=0; i<8; i++){ + static const char hexdigits[] = { + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' + }; + zContent[i*2] = hexdigits[(aData[i] >> 4)]; + zContent[i*2+1] = hexdigits[(aData[i] & 0xF)]; + } + zContent[16] = '\0'; pgnoRoot = ((MemPage*)sqlite3PagerGetExtra(pPg))->pgnoRoot; bWrite = sqlite3PagerIswriteable(pPg); - pageFlags = ((u8*)sqlite3PagerGetData(pPg))[0]; sqlite3PagerUnref(pPg); pSchema = sqlite3SchemaGet(p->db, p); if( pSchema ){ for(pE=sqliteHashFirst(&pSchema->tblHash); pE; pE=sqliteHashNext(pE)){ @@ -10513,16 +10523,16 @@ } sqlite3_log(SQLITE_OK, "cannot commit CONCURRENT transaction " "- conflict at page %d " - "(%s page; part of db %s %s%s%s; flags=0x%02x)", + "(%s page; part of db %s %s%s%s; content=%s...)", (int)pgno, (bWrite==0?"read-only":(bWrite>0?"read/write":"unknown")), (zTab ? "index" : "table"), (zTab ? zTab : ""), (zTab ? "." : ""), (zObj ? zObj : "UNKNOWN"), - pageFlags + zContent ); } } #endif sqlite3BtreeLeave(p); Index: test/concurrent5.test ================================================================== --- test/concurrent5.test +++ test/concurrent5.test @@ -57,11 +57,11 @@ } catchsql COMMIT db2 } {1 {database is locked}} do_test_conflict_msg 1.1.2 { - conflict at page 2 (read-only page; part of db table t1; flags=0x05) + conflict at page 2 (read-only page; part of db table t1; content=0500000063021100...) } do_test 1.2.1 { set ::log [list] db2 eval { @@ -76,11 +76,11 @@ catchsql COMMIT db2 } {1 {database is locked}} do_test_conflict_msg 1.2.2 { - conflict at page 105 (read/write page; part of db table t1; flags=0x0d) + conflict at page 105 (read/write page; part of db table t1; content=0D00000002026100...) } do_test 1.3.1 { set ::log [list] db2 eval { @@ -95,11 +95,11 @@ catchsql COMMIT db2 } {1 {database is locked}} do_test_conflict_msg 1.3.2 { - conflict at page 3 (read/write page; part of db table t2; flags=0x0d) + conflict at page 3 (read/write page; part of db table t2; content=0D0000000103FB00...) } do_test 1.4.1 { set ::log [list] @@ -119,15 +119,15 @@ execsql { INSERT INTO t3 VALUES(NULL, 5002) } db catchsql COMMIT db2 } {1 {database is locked}} do_test_conflict_msg 1.3.2 { - conflict at page 211 (read/write page; part of db index t3.i3; flags=0x0a) + conflict at page 211 (read/write page; part of db index t3.i3; content=0A0310006300D800...) } db close db2 close sqlite3_shutdown test_sqlite3_log sqlite3_initialize finish_test