@@ -805,7 +805,7 @@ static int ceshimPageMapSet(
805805
806806 * outLwrPgno = pMapEntry -> lwrPgno ;
807807 * outCmpOfst = pMapEntry -> cmprOfst ;
808- ceshim_printf (pInfo , "Updated placeholder entry (uppOfst=%lld, lwrPgno=%lu,cmpOfst=%lu,cmpSz=%lu) \n" ,
808+ ceshim_printf (pInfo , "Updated entry (uppOfst=%lld, lwrPgno=%lu,cmpOfst=%lu,cmpSz=%lu)\n" ,
809809 (long long )uppOfst , (unsigned long )pMapEntry -> lwrPgno , (unsigned long )pMapEntry -> cmprOfst , (unsigned long )pMapEntry -> cmprSz );
810810 return SQLITE_OK ;
811811 }else if ( cmpSz < oldCmpSz ){
@@ -904,49 +904,41 @@ static int ceshimRead(
904904 ceshim_info * pInfo = p -> pInfo ;
905905 u32 uppPgSz = pInfo -> ceshimHeader .uppPgSz ;
906906 int rc ;
907- ceshim_printf (pInfo , "%s.xRead(%s,ofst=%lld,amt=%d)" , pInfo -> zVfsName , p -> zFName , iOfst , iAmt );
908907
909908 if ( p -> pPager && pInfo -> pPage1 ){
910909 DbPage * pPage ;
911910 Pgno uppPgno , mappedPgno ;
912911 CeshimCmpOfst cmprPgOfst ;
913912 CeshimCmpSize uCmpPgSz ;
914- if ( (rc = ceshimPageMapGet (p , iOfst , & uppPgno , & mappedPgno , & cmprPgOfst , & uCmpPgSz , NULL )) == SQLITE_ERROR ){
915- if ( iOfst < uppPgSz ) {
916- mappedPgno = CESHIM_FIRST_MAPPED_PAGE ;
917- rc = SQLITE_OK ;
918- }
919- }
920- if ( mappedPgno == 0 ){
921- memset (zBuf , 0 , iAmt );
922- return SQLITE_OK ;
923- }
924- if ( rc == SQLITE_OK && (rc = sqlite3PagerGet (p -> pPager , mappedPgno , & pPage , 0 )) == SQLITE_OK ){
925- CeshimMemPage * pMemPage = memPageFromDbPage (pPage , mappedPgno );
926- ceshim_printf (pInfo , "\n%s.xRead(%s,pgno=%u->%u,ofst=%lld,amt=%d,cmprPgOfst=%u,cmprSz=%u)" ,
927- pInfo -> zVfsName , p -> zFName , uppPgno , mappedPgno , iOfst , iAmt , cmprPgOfst , uCmpPgSz );
928- if ( uCmpPgSz > 0 ){ // <- should be able to remove this check now
913+ if ( (rc = ceshimPageMapGet (p , iOfst , & uppPgno , & mappedPgno , & cmprPgOfst , & uCmpPgSz , NULL )) == SQLITE_OK ){
914+ if ( rc == SQLITE_OK && (rc = sqlite3PagerGet (p -> pPager , mappedPgno , & pPage , 0 )) == SQLITE_OK ){
915+ CeshimMemPage * pMemPage = memPageFromDbPage (pPage , mappedPgno );
916+ ceshim_printf (pInfo , "%s.xRead(%s,pgno=%u->%u,ofst=%08lld->%u,amt=%d->%u)" ,
917+ pInfo -> zVfsName , p -> zFName , uppPgno , mappedPgno , iOfst , cmprPgOfst , iAmt , uCmpPgSz );
918+ assert ( uCmpPgSz > 0 );
929919 int iDstAmt = uppPgSz ;
930920 void * pBuf = sqlite3_malloc (iDstAmt );
931921 pInfo -> xUncompress (
932922 NULL ,
933923 pBuf ,
934924 & iDstAmt ,
935925 (char * )pMemPage -> aData
936- + pMemPage -> dbHdrOffset
937- + pMemPage -> pgHdrOffset
938- + cmprPgOfst ,
926+ + pMemPage -> dbHdrOffset
927+ + pMemPage -> pgHdrOffset
928+ + cmprPgOfst ,
939929 uCmpPgSz
940930 );
941931 u16 uBufOfst = iOfst % uppPgSz ;
942932 memcpy (zBuf , pBuf + uBufOfst , iAmt );
943933 sqlite3_free (pBuf );
944- }else {
945- memset (zBuf , 0 , iAmt );
934+ sqlite3PagerUnref (pPage );
946935 }
947- sqlite3PagerUnref (pPage );
936+ }else {
937+ memset (zBuf , 0 , iAmt );
938+ rc = SQLITE_OK ;
948939 }
949940 }else {
941+ ceshim_printf (pInfo , "%s.xRead(%s,ofst=%08lld,amt=%d)" , pInfo -> zVfsName , p -> zFName , iOfst , iAmt );
950942 rc = p -> pReal -> pMethods -> xRead (p -> pReal , zBuf , iAmt , iOfst );
951943 }
952944 ceshim_print_errcode (pInfo , " -> %s\n" , rc );
@@ -978,39 +970,38 @@ static int ceshimWrite(
978970 CeshimCmpOfst cmprPgOfst ;
979971 pInfo -> xCompress (NULL , pBuf , & pnDest , (void * )zBuf , iAmt );
980972 ceshimPageMapSet (p , iOfst , pnDest , & uppPgno , & mappedPgno , & cmprPgOfst );
981- ceshim_printf (pInfo , "%s.xWrite(%s, pgno=%u->%u, offset=%06lld, amt=%06d)" , pInfo -> zVfsName , p -> zFName , uppPgno , mappedPgno , iOfst , iAmt );
982973 if ( rc == SQLITE_OK && (rc = sqlite3PagerGet (p -> pPager , mappedPgno , & pPage , 0 ))== SQLITE_OK ){
983974 // write
984975 CeshimMemPage * pMemPage = memPageFromDbPage (pPage , mappedPgno );
985- if ( (rc = ceshimPagerWrite (p , pPage ))== SQLITE_OK ){
986- ceshim_printf (
987- pInfo ,
988- "\n %s.xWrite(%s, pgno=%u->%u, offset=%06lld , amt=%06d, compressed= %06d)" ,
989- pInfo -> zVfsName ,
990- p -> zFName , uppPgno , mappedPgno ,
991- pMemPage -> dbHdrOffset + pMemPage -> pgHdrOffset + cmprPgOfst ,
992- iAmt , pnDest
993- );
994- memcpy (
995- pMemPage -> aData
996- + pMemPage -> dbHdrOffset
997- + pMemPage -> pgHdrOffset
998- + cmprPgOfst ,
999- pBuf ,
1000- pnDest
1001- );
1002-
1003- // Keep track of sizes of upper and lower pagers
1004- if ( pInfo -> ceshimHeader .uppPageFile < uppPgno ) pInfo -> ceshimHeader .uppPageFile = uppPgno ;
1005- if ( pInfo -> lwrPageFile < mappedPgno ) pInfo -> lwrPageFile = mappedPgno ;
1006- }
976+ if ( (rc = ceshimPagerWrite (p , pPage ))== SQLITE_OK ){
977+ ceshim_printf (
978+ pInfo ,
979+ " %s.xWrite(%s, pgno=%u->%u, offset=%08lld->%06lu , amt=%06d-> %06d)" ,
980+ pInfo -> zVfsName , p -> zFName ,
981+ uppPgno , mappedPgno ,
982+ iOfst , ( long unsigned )( pMemPage -> dbHdrOffset + pMemPage -> pgHdrOffset + cmprPgOfst ) ,
983+ iAmt , pnDest
984+ );
985+ memcpy (
986+ pMemPage -> aData
987+ + pMemPage -> dbHdrOffset
988+ + pMemPage -> pgHdrOffset
989+ + cmprPgOfst ,
990+ pBuf ,
991+ pnDest
992+ );
993+
994+ // Keep track of sizes of upper and lower pagers
995+ if ( pInfo -> ceshimHeader .uppPageFile < uppPgno ) pInfo -> ceshimHeader .uppPageFile = uppPgno ;
996+ if ( pInfo -> lwrPageFile < mappedPgno ) pInfo -> lwrPageFile = mappedPgno ;
997+ }
1007998 sqlite3PagerUnref (pPage );
1008999 }
10091000 sqlite3_free (pBuf );
10101001 }
10111002 }
10121003 }else {
1013- ceshim_printf (pInfo , "%s.xWrite(%s, offset=%06lld , amt=%06d)" , pInfo -> zVfsName , p -> zFName , iOfst , iAmt );
1004+ ceshim_printf (pInfo , "%s.xWrite(%s, offset=%08lld , amt=%06d)" , pInfo -> zVfsName , p -> zFName , iOfst , iAmt );
10141005 rc = p -> pReal -> pMethods -> xWrite (p -> pReal , zBuf , iAmt , iOfst );
10151006 }
10161007 ceshim_print_errcode (pInfo , " -> %s\n" , rc );
0 commit comments