Upgrade to sqlcipher 4.4.2 80/249280/1 accepted/tizen/unified/20201214.124456 submit/tizen/20201211.092147
authorDariusz Michaluk <d.michaluk@samsung.com>
Tue, 8 Dec 2020 15:24:46 +0000 (16:24 +0100)
committerDariusz Michaluk <d.michaluk@samsung.com>
Wed, 9 Dec 2020 14:31:55 +0000 (15:31 +0100)
Change-Id: I7ca21a3c9ce5618463173ed444c73d6361f405d8

src/manager/sqlcipher/sqlcipher.c

index 3e994bd..2c749fc 100644 (file)
 ** language. The code for the "sqlite3" command-line shell is also in a
 ** separate file. This file contains only code for the core SQLite library.
 */
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wcast-function-type"
+#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+
 #define SQLITE_CORE 1
 #define SQLITE_AMALGAMATION 1
 #ifndef SQLITE_PRIVATE
@@ -14648,8 +14654,8 @@ struct BusyHandler {
 /*
 ** Name of table that holds the database schema.
 */
-#define DFLT_SCHEMA_TABLE          "sqlite_master"
-#define DFLT_TEMP_SCHEMA_TABLE     "sqlite_temp_master"
+#define DFLT_SCHEMA_TABLE          "sqlcipher_master"
+#define DFLT_TEMP_SCHEMA_TABLE     "sqlcipher_temp_master"
 #define ALT_SCHEMA_TABLE           "sqlite_schema"
 #define ALT_TEMP_SCHEMA_TABLE      "sqlite_temp_schema"
 
@@ -22711,7 +22717,7 @@ void sqlcipher_exportFunc(sqlite3_context *context, int argc, sqlite3_value **ar
   */
   zSql = sqlite3_mprintf(
     "SELECT sql "
-    "  FROM %s.sqlite_master WHERE type='table' AND name!='sqlite_sequence'"
+    "  FROM %s.sqlcipher_master WHERE type='table' AND name!='sqlcipher_sequence'"
     "   AND rootpage>0"
   , sourceDb);
   rc = (zSql == NULL) ? SQLITE_NOMEM : sqlcipher_execExecSql(db, &pzErrMsg, zSql);
@@ -22720,7 +22726,7 @@ void sqlcipher_exportFunc(sqlite3_context *context, int argc, sqlite3_value **ar
 
   zSql = sqlite3_mprintf(
     "SELECT sql "
-    "  FROM %s.sqlite_master WHERE sql LIKE 'CREATE INDEX %%' "
+    "  FROM %s.sqlcipher_master WHERE sql LIKE 'CREATE INDEX %%' "
   , sourceDb);
   rc = (zSql == NULL) ? SQLITE_NOMEM : sqlcipher_execExecSql(db, &pzErrMsg, zSql);
   if( rc!=SQLITE_OK ) goto end_of_export;
@@ -22728,7 +22734,7 @@ void sqlcipher_exportFunc(sqlite3_context *context, int argc, sqlite3_value **ar
 
   zSql = sqlite3_mprintf(
     "SELECT sql "
-    "  FROM %s.sqlite_master WHERE sql LIKE 'CREATE UNIQUE INDEX %%'"
+    "  FROM %s.sqlcipher_master WHERE sql LIKE 'CREATE UNIQUE INDEX %%'"
   , sourceDb);
   rc = (zSql == NULL) ? SQLITE_NOMEM : sqlcipher_execExecSql(db, &pzErrMsg, zSql);
   if( rc!=SQLITE_OK ) goto end_of_export;
@@ -22741,8 +22747,8 @@ void sqlcipher_exportFunc(sqlite3_context *context, int argc, sqlite3_value **ar
   zSql = sqlite3_mprintf(
     "SELECT 'INSERT INTO %s.' || quote(name) "
     "|| ' SELECT * FROM %s.' || quote(name) || ';'"
-    "FROM %s.sqlite_master "
-    "WHERE type = 'table' AND name!='sqlite_sequence' "
+    "FROM %s.sqlcipher_master "
+    "WHERE type = 'table' AND name!='sqlcipher_sequence' "
     "  AND rootpage>0"
   , targetDb, sourceDb, sourceDb);
   rc = (zSql == NULL) ? SQLITE_NOMEM : sqlcipher_execExecSql(db, &pzErrMsg, zSql);
@@ -22754,7 +22760,7 @@ void sqlcipher_exportFunc(sqlite3_context *context, int argc, sqlite3_value **ar
   zSql = sqlite3_mprintf(
     "SELECT 'INSERT INTO %s.' || quote(name) "
     "|| ' SELECT * FROM %s.' || quote(name) || ';' "
-    "FROM %s.sqlite_master WHERE name=='sqlite_sequence';"
+    "FROM %s.sqlcipher_master WHERE name=='sqlcipher_sequence';"
   , targetDb, sourceDb, targetDb);
   rc = (zSql == NULL) ? SQLITE_NOMEM : sqlcipher_execExecSql(db, &pzErrMsg, zSql);
   if( rc!=SQLITE_OK ) goto end_of_export;
@@ -22766,9 +22772,9 @@ void sqlcipher_exportFunc(sqlite3_context *context, int argc, sqlite3_value **ar
   ** from the SQLITE_MASTER table.
   */
   zSql = sqlite3_mprintf(
-    "INSERT INTO %s.sqlite_master "
+    "INSERT INTO %s.sqlcipher_master "
     "  SELECT type, name, tbl_name, rootpage, sql"
-    "    FROM %s.sqlite_master"
+    "    FROM %s.sqlcipher_master"
     "   WHERE type='view' OR type='trigger'"
     "      OR (type='table' AND rootpage=0)"
   , targetDb, sourceDb);
@@ -64050,13 +64056,6 @@ SQLITE_PRIVATE void *sqlite3PagerCodec(PgHdr *pPg){
   CODEC2(pPg->pPager, pPg->pData, pPg->pgno, 6, return 0, aData);
   return aData;
 }
-
-/*
-** Return the current pager state
-*/
-SQLITE_PRIVATE int sqlite3PagerState(Pager *pPager){
-  return pPager->eState;
-}
 #endif /* SQLITE_HAS_CODEC */
 /* END SQLCIPHER */
 
@@ -110711,7 +110710,7 @@ SQLITE_PRIVATE void sqlite3AlterRenameTable(
             "WHEN type='table' THEN %Q "
             "WHEN name LIKE 'sqliteX_autoindex%%' ESCAPE 'X' "
             "     AND type='index' THEN "
-             "'sqlite_autoindex_' || %Q || substr(name,%d+18) "
+             "'sqlcipher_autoindex_' || %Q || substr(name,%d+18) "
             "ELSE name END "
       "WHERE tbl_name=%Q COLLATE nocase AND "
           "(type='table' OR type='index' OR type='trigger');",
@@ -110724,9 +110723,9 @@ SQLITE_PRIVATE void sqlite3AlterRenameTable(
   /* If the sqlite_sequence table exists in this database, then update
   ** it with the new table name.
   */
-  if( sqlite3FindTable(db, "sqlite_sequence", zDb) ){
+  if( sqlite3FindTable(db, "sqlcipher_sequence", zDb) ){
     sqlite3NestedParse(pParse,
-        "UPDATE \"%w\".sqlite_sequence set name = %Q WHERE name = %Q",
+        "UPDATE \"%w\".sqlcipher_sequence set name = %Q WHERE name = %Q",
         zDb, zName, pTab->zName);
   }
 #endif
@@ -110736,7 +110735,7 @@ SQLITE_PRIVATE void sqlite3AlterRenameTable(
   ** as required.  */
   if( iDb!=1 ){
     sqlite3NestedParse(pParse,
-        "UPDATE sqlite_temp_schema SET "
+        "UPDATE sqlcipher_temp_master SET "
             "sql = sqlite_rename_table(%Q, type, name, sql, %Q, %Q, 1), "
             "tbl_name = "
               "CASE WHEN tbl_name=%Q COLLATE nocase AND "
@@ -112434,13 +112433,13 @@ static void openStatTable(
     const char *zName;
     const char *zCols;
   } aTable[] = {
-    { "sqlite_stat1", "tbl,idx,stat" },
+    { "sqlcipher_stat1", "tbl,idx,stat" },
 #if defined(SQLITE_ENABLE_STAT4)
-    { "sqlite_stat4", "tbl,idx,neq,nlt,ndlt,sample" },
+    { "sqlcipher_stat4", "tbl,idx,neq,nlt,ndlt,sample" },
 #else
-    { "sqlite_stat4", 0 },
+    { "sqlcipher_stat4", 0 },
 #endif
-    { "sqlite_stat3", 0 },
+    { "sqlcipher_stat3", 0 },
   };
   int i;
   sqlite3 *db = pParse->db;
@@ -113299,7 +113298,7 @@ static void analyzeOneTable(
     pStat1 = (Table*)sqlite3DbMallocZero(db, sizeof(Table) + 13);
     if( pStat1==0 ) return;
     pStat1->zName = (char*)&pStat1[1];
-    memcpy(pStat1->zName, "sqlite_stat1", 13);
+    memcpy(pStat1->zName, "sqlcipher_stat1", 16);
     pStat1->nCol = 3;
     pStat1->iPKey = -1;
     sqlite3VdbeAddOp4(pParse->pVdbe, OP_Noop, 0, 0, 0,(char*)pStat1,P4_DYNBLOB);
@@ -114101,10 +114100,10 @@ static int loadStat4(sqlite3 *db, const char *zDb){
   int rc = SQLITE_OK;             /* Result codes from subroutines */
 
   assert( db->lookaside.bDisable );
-  if( sqlite3FindTable(db, "sqlite_stat4", zDb) ){
+  if( sqlite3FindTable(db, "sqlcipher_stat4", zDb) ){
     rc = loadStatTbl(db,
-      "SELECT idx,count(*) FROM %Q.sqlite_stat4 GROUP BY idx",
-      "SELECT idx,neq,nlt,ndlt,sample FROM %Q.sqlite_stat4",
+      "SELECT idx,count(*) FROM %Q.sqlcipher_stat4 GROUP BY idx",
+      "SELECT idx,neq,nlt,ndlt,sample FROM %Q.sqlcipher_stat4",
       zDb
     );
   }
@@ -114160,9 +114159,9 @@ SQLITE_PRIVATE int sqlite3AnalysisLoad(sqlite3 *db, int iDb){
   /* Load new statistics out of the sqlite_stat1 table */
   sInfo.db = db;
   sInfo.zDatabase = db->aDb[iDb].zDbSName;
-  if( sqlite3FindTable(db, "sqlite_stat1", sInfo.zDatabase)!=0 ){
+  if( sqlite3FindTable(db, "sqlcipher_stat1", sInfo.zDatabase)!=0 ){
     zSql = sqlite3MPrintf(db,
-        "SELECT tbl,idx,stat FROM %Q.sqlite_stat1", sInfo.zDatabase);
+        "SELECT tbl,idx,stat FROM %Q.sqlcipher_stat1", sInfo.zDatabase);
     if( zSql==0 ){
       rc = SQLITE_NOMEM_BKPT;
     }else{
@@ -116291,7 +116290,7 @@ SQLITE_PRIVATE void sqlite3StartTable(
   ** so that INSERT can find the table easily.
   */
 #ifndef SQLITE_OMIT_AUTOINCREMENT
-  if( !pParse->nested && strcmp(zName, "sqlite_sequence")==0 ){
+  if( !pParse->nested && strcmp(zName, "sqlcipher_sequence")==0 ){
     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
     pTable->pSchema->pSeqTab = pTable;
   }
@@ -117656,7 +117655,7 @@ SQLITE_PRIVATE void sqlite3EndTable(
       assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
       if( pDb->pSchema->pSeqTab==0 ){
         sqlite3NestedParse(pParse,
-          "CREATE TABLE %Q.sqlite_sequence(name,seq)",
+          "CREATE TABLE %Q.sqlcipher_sequence(name,seq)",
           pDb->zDbSName
         );
       }
@@ -118068,7 +118067,7 @@ static void sqlite3ClearStatTables(
   const char *zDbName = pParse->db->aDb[iDb].zDbSName;
   for(i=1; i<=4; i++){
     char zTab[24];
-    sqlite3_snprintf(sizeof(zTab),zTab,"sqlite_stat%d",i);
+    sqlite3_snprintf(sizeof(zTab),zTab,"sqlcipher_stat%d",i);
     if( sqlite3FindTable(pParse->db, zTab, zDbName) ){
       sqlite3NestedParse(pParse,
         "DELETE FROM %Q.%s WHERE %s=%Q",
@@ -118117,7 +118116,7 @@ SQLITE_PRIVATE void sqlite3CodeDropTable(Parse *pParse, Table *pTab, int iDb, in
   */
   if( pTab->tabFlags & TF_Autoincrement ){
     sqlite3NestedParse(pParse,
-      "DELETE FROM %Q.sqlite_sequence WHERE name=%Q",
+      "DELETE FROM %Q.sqlcipher_sequence WHERE name=%Q",
       pDb->zDbSName, pTab->zName
     );
   }
@@ -118781,7 +118780,7 @@ SQLITE_PRIVATE void sqlite3CreateIndex(
     int n;
     Index *pLoop;
     for(pLoop=pTab->pIndex, n=1; pLoop; pLoop=pLoop->pNext, n++){}
-    zName = sqlite3MPrintf(db, "sqlite_autoindex_%s_%d", pTab->zName, n);
+    zName = sqlite3MPrintf(db, "sqlcipher_autoindex_%s_%d", pTab->zName, n);
     if( zName==0 ){
       goto exit_create_index;
     }
@@ -121611,7 +121610,7 @@ SQLITE_PRIVATE void sqlite3GenerateRowDelete(
     u8 p5 = 0;
     sqlite3GenerateRowIndexDelete(pParse, pTab, iDataCur, iIdxCur,0,iIdxNoSeek);
     sqlite3VdbeAddOp2(v, OP_Delete, iDataCur, (count?OPFLAG_NCHANGE:0));
-    if( pParse->nested==0 || 0==sqlite3_stricmp(pTab->zName, "sqlite_stat1") ){
+    if( pParse->nested==0 || 0==sqlite3_stricmp(pTab->zName, "sqlcipher_stat1") ){
       sqlite3VdbeAppendP4(v, (char*)pTab, P4_TABLE);
     }
     if( eMode!=ONEPASS_OFF ){
@@ -132840,7 +132839,7 @@ SQLITE_PRIVATE void sqlite3Pragma(
       if( pPragma->iArg==2 || pPragma->iArg==3 ){
         u8 iByte;
         int i;
-        for(i=0, iByte=0; i<sizeof(zBuf)*2 && sqlite3Isxdigit(zRight[i]); i++){
+        for(i=0, iByte=0; i<(int)(sizeof(zBuf)*2) && sqlite3Isxdigit(zRight[i]); i++){
           iByte = (iByte<<4) + sqlite3HexToInt(zRight[i]);
           if( (i&1)!=0 ) zBuf[i/2] = iByte;
         }
@@ -144321,14 +144320,14 @@ SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3RunVacuum(
   */
   db->init.iDb = nDb; /* force new CREATE statements into vacuum_db */
   rc = execSqlF(db, pzErrMsg,
-      "SELECT sql FROM \"%w\".sqlite_schema"
-      " WHERE type='table'AND name<>'sqlite_sequence'"
+      "SELECT sql FROM \"%w\".sqlcipher_master"
+      " WHERE type='table'AND name<>'sqlcipher_sequence'"
       " AND coalesce(rootpage,1)>0",
       zDbMain
   );
   if( rc!=SQLITE_OK ) goto end_of_vacuum;
   rc = execSqlF(db, pzErrMsg,
-      "SELECT sql FROM \"%w\".sqlite_schema"
+      "SELECT sql FROM \"%w\".sqlcipher_master"
       " WHERE type='index'",
       zDbMain
   );
@@ -144342,7 +144341,7 @@ SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3RunVacuum(
   rc = execSqlF(db, pzErrMsg,
       "SELECT'INSERT INTO vacuum_db.'||quote(name)"
       "||' SELECT*FROM\"%w\".'||quote(name)"
-      "FROM vacuum_db.sqlite_schema "
+      "FROM vacuum_db.sqlcipher_master "
       "WHERE type='table'AND coalesce(rootpage,1)>0",
       zDbMain
   );
@@ -144356,8 +144355,8 @@ SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3RunVacuum(
   ** from the schema table.
   */
   rc = execSqlF(db, pzErrMsg,
-      "INSERT INTO vacuum_db.sqlite_schema"
-      " SELECT*FROM \"%w\".sqlite_schema"
+      "INSERT INTO vacuum_db.sqlcipher_master"
+      " SELECT*FROM \"%w\".sqlcipher_master"
       " WHERE type IN('view','trigger')"
       " OR(type='table'AND rootpage=0)",
       zDbMain
@@ -152303,7 +152302,7 @@ SQLITE_PRIVATE void sqlite3WhereLoopPrint(WhereLoop *p, WhereClause *pWC){
   if( (p->wsFlags & WHERE_VIRTUALTABLE)==0 ){
     const char *zName;
     if( p->u.btree.pIndex && (zName = p->u.btree.pIndex->zName)!=0 ){
-      if( strncmp(zName, "sqlite_autoindex_", 17)==0 ){
+      if( strncmp(zName, "sqlcipher_autoindex_", 20)==0 ){
         int i = sqlite3Strlen30(zName) - 1;
         while( zName[i]!='_' ) i--;
         zName += i;
@@ -168947,7 +168946,7 @@ SQLITE_PRIVATE int sqlite3CodecQueryParameters(
     u8 iByte;
     int i;
     char zDecoded[40];
-    for(i=0, iByte=0; i<sizeof(zDecoded)*2 && sqlite3Isxdigit(zKey[i]); i++){
+    for(i=0, iByte=0; i<(int)(sizeof(zDecoded)*2) && sqlite3Isxdigit(zKey[i]); i++){
       iByte = (iByte<<4) + sqlite3HexToInt(zKey[i]);
       if( (i&1)!=0 ) zDecoded[i/2] = iByte;
     }
@@ -196387,14 +196386,14 @@ static int rtreeSavepoint(sqlite3_vtab *pVtab, int iSavepoint){
 ** on sqlite_stat1 data. Otherwise, use RTREE_DEFAULT_ROWEST.
 */
 static int rtreeQueryStat1(sqlite3 *db, Rtree *pRtree){
-  const char *zFmt = "SELECT stat FROM %Q.sqlite_stat1 WHERE tbl = '%q_rowid'";
+  const char *zFmt = "SELECT stat FROM %Q.sqlcipher_stat1 WHERE tbl = '%q_rowid'";
   char *zSql;
   sqlite3_stmt *p;
   int rc;
   i64 nRow = 0;
 
   rc = sqlite3_table_column_metadata(
-      db, pRtree->zDb, "sqlite_stat1",0,0,0,0,0,0
+      db, pRtree->zDb, "sqlcipher_stat1",0,0,0,0,0,0
   );
   if( rc!=SQLITE_OK ){
     pRtree->nRowEst = RTREE_DEFAULT_ROWEST;
@@ -201755,7 +201754,7 @@ static int rbuObjIterFirst(sqlite3rbu *p, RbuObjIter *pIter){
   rc = prepareFreeAndCollectError(p->dbRbu, &pIter->pTblIter, &p->zErrmsg,
     sqlite3_mprintf(
       "SELECT rbu_target_name(name, type='view') AS target, name "
-      "FROM sqlite_schema "
+      "FROM sqlcipher_master "
       "WHERE type IN ('table', 'view') AND target IS NOT NULL "
       " %s "
       "ORDER BY name"
@@ -201764,7 +201763,7 @@ static int rbuObjIterFirst(sqlite3rbu *p, RbuObjIter *pIter){
   if( rc==SQLITE_OK ){
     rc = prepareAndCollectError(p->dbMain, &pIter->pIdxIter, &p->zErrmsg,
         "SELECT name, rootpage, sql IS NULL OR substr(8, 6)=='UNIQUE' "
-        "  FROM main.sqlite_schema "
+        "  FROM main.sqlcipher_master "
         "  WHERE type='index' AND tbl_name = ?"
     );
   }
@@ -201975,7 +201974,7 @@ static void rbuTableType(
   p->rc = prepareFreeAndCollectError(p->dbMain, &aStmt[0], &p->zErrmsg,
     sqlite3_mprintf(
           "SELECT (sql LIKE 'create virtual%%'), rootpage"
-          "  FROM sqlite_schema"
+          "  FROM sqlcipher_master"
           " WHERE name=%Q", zTab
   ));
   if( p->rc!=SQLITE_OK || sqlite3_step(aStmt[0])!=SQLITE_ROW ){
@@ -201998,7 +201997,7 @@ static void rbuTableType(
     if( zOrig && zIdx && zOrig[0]=='p' ){
       p->rc = prepareFreeAndCollectError(p->dbMain, &aStmt[2], &p->zErrmsg,
           sqlite3_mprintf(
-            "SELECT rootpage FROM sqlite_schema WHERE name = %Q", zIdx
+            "SELECT rootpage FROM sqlcipher_master WHERE name = %Q", zIdx
       ));
       if( p->rc==SQLITE_OK ){
         if( sqlite3_step(aStmt[2])==SQLITE_ROW ){
@@ -202818,7 +202817,7 @@ static void rbuCreateImposterTable2(sqlite3rbu *p, RbuObjIter *pIter){
     ** This is needed for the argument to "PRAGMA index_xinfo". Set
     ** zIdx to point to a nul-terminated string containing this name. */
     p->rc = prepareAndCollectError(p->dbMain, &pQuery, &p->zErrmsg,
-        "SELECT name FROM sqlite_schema WHERE rootpage = ?"
+        "SELECT name FROM sqlcipher_master WHERE rootpage = ?"
     );
     if( p->rc==SQLITE_OK ){
       sqlite3_bind_int(pQuery, 1, tnum);
@@ -202991,7 +202990,7 @@ static char *rbuObjIterGetIndexWhere(sqlite3rbu *p, RbuObjIter *pIter){
 
   if( rc==SQLITE_OK ){
     rc = prepareAndCollectError(p->dbMain, &pStmt, &p->zErrmsg,
-        "SELECT trim(sql) FROM sqlite_schema WHERE type='index' AND name=?"
+        "SELECT trim(sql) FROM sqlcipher_master WHERE type='index' AND name=?"
     );
   }
   if( rc==SQLITE_OK ){
@@ -203573,7 +203572,7 @@ static void rbuOpenDatabase(sqlite3rbu *p, int *pbRetry){
       int bOk = 0;
       sqlite3_stmt *pCnt = 0;
       p->rc = prepareAndCollectError(p->dbRbu, &pCnt, &p->zErrmsg,
-          "SELECT count(*) FROM stat.sqlite_schema"
+          "SELECT count(*) FROM stat.sqlcipher_master"
       );
       if( p->rc==SQLITE_OK
        && sqlite3_step(pCnt)==SQLITE_ROW
@@ -203677,7 +203676,7 @@ static void rbuOpenDatabase(sqlite3rbu *p, int *pbRetry){
   if( p->rc==SQLITE_OK ){
     p->rc = sqlite3_file_control(p->dbMain, "main", SQLITE_FCNTL_RBU, (void*)p);
   }
-  rbuMPrintfExec(p, p->dbMain, "SELECT * FROM sqlite_schema");
+  rbuMPrintfExec(p, p->dbMain, "SELECT * FROM sqlcipher_master");
 
   /* Mark the database file just opened as an RBU target database. If
   ** this call returns SQLITE_NOTFOUND, then the RBU vfs is not in use.
@@ -203770,7 +203769,7 @@ static void rbuSetupCheckpoint(sqlite3rbu *p, RbuState *pState){
   if( pState==0 ){
     p->eStage = 0;
     if( p->rc==SQLITE_OK ){
-      p->rc = sqlite3_exec(p->dbMain, "SELECT * FROM sqlite_schema", 0, 0, 0);
+      p->rc = sqlite3_exec(p->dbMain, "SELECT * FROM sqlcipher_master", 0, 0, 0);
     }
   }
 
@@ -204361,8 +204360,8 @@ static void rbuCreateTargetSchema(sqlite3rbu *p){
   p->rc = sqlite3_exec(p->dbMain, "PRAGMA writable_schema=1", 0,0, &p->zErrmsg);
   if( p->rc==SQLITE_OK ){
     p->rc = prepareAndCollectError(p->dbRbu, &pSql, &p->zErrmsg,
-      "SELECT sql FROM sqlite_schema WHERE sql!='' AND rootpage!=0"
-      " AND name!='sqlite_sequence' "
+      "SELECT sql FROM sqlcipher_master WHERE sql!='' AND rootpage!=0"
+      " AND name!='sqlcipher_sequence' "
       " ORDER BY type DESC"
     );
   }
@@ -204376,13 +204375,13 @@ static void rbuCreateTargetSchema(sqlite3rbu *p){
 
   if( p->rc==SQLITE_OK ){
     p->rc = prepareAndCollectError(p->dbRbu, &pSql, &p->zErrmsg,
-        "SELECT * FROM sqlite_schema WHERE rootpage=0 OR rootpage IS NULL"
+        "SELECT * FROM sqlcipher_master WHERE rootpage=0 OR rootpage IS NULL"
     );
   }
 
   if( p->rc==SQLITE_OK ){
     p->rc = prepareAndCollectError(p->dbMain, &pInsert, &p->zErrmsg,
-        "INSERT INTO sqlite_schema VALUES(?,?,?,?,?)"
+        "INSERT INTO sqlcipher_master VALUES(?,?,?,?,?)"
     );
   }
 
@@ -204645,7 +204644,7 @@ static void rbuIndexCntFunc(
   assert( nVal==1 );
 
   rc = prepareFreeAndCollectError(db, &pStmt, &zErrmsg,
-      sqlite3_mprintf("SELECT count(*) FROM sqlite_schema "
+      sqlite3_mprintf("SELECT count(*) FROM sqlcipher_master "
         "WHERE type='index' AND tbl_name = %Q", sqlite3_value_text(apVal[0]))
   );
   if( rc!=SQLITE_OK ){
@@ -204696,7 +204695,7 @@ static void rbuInitPhaseOneSteps(sqlite3rbu *p){
     ** occurs, nPhaseOneStep will be left set to -1. */
     if( p->rc==SQLITE_OK ){
       p->rc = prepareAndCollectError(p->dbRbu, &pStmt, &p->zErrmsg,
-          "SELECT 1 FROM sqlite_schema WHERE tbl_name = 'rbu_count'"
+          "SELECT 1 FROM sqlcipher_master WHERE tbl_name = 'rbu_count'"
       );
     }
     if( p->rc==SQLITE_OK ){
@@ -206811,10 +206810,10 @@ static int statFilter(
   pSql = sqlite3_str_new(pTab->db);
   sqlite3_str_appendf(pSql,
       "SELECT * FROM ("
-        "SELECT 'sqlite_schema' AS name,1 AS rootpage,'table' AS type"
+        "SELECT 'sqlcipher_master' AS name,1 AS rootpage,'table' AS type"
         " UNION ALL "
         "SELECT name,rootpage,type"
-        " FROM \"%w\".sqlite_schema WHERE rootpage!=0)",
+        " FROM \"%w\".sqlcipher_master WHERE rootpage!=0)",
       pTab->db->aDb[pCsr->iDb].zDbSName);
   if( zName ){
     sqlite3_str_appendf(pSql, "WHERE name=%Q", zName);
@@ -208343,7 +208342,7 @@ static int sessionTableInfo(
   assert( pazCol && pabPK );
 
   nThis = sqlite3Strlen30(zThis);
-  if( nThis==12 && 0==sqlite3_stricmp("sqlite_stat1", zThis) ){
+  if( nThis==12 && 0==sqlite3_stricmp("sqlcipher_stat1", zThis) ){
     rc = sqlite3_table_column_metadata(db, zDb, zThis, 0, 0, 0, 0, 0, 0);
     if( rc==SQLITE_OK ){
       /* For sqlite_stat1, pretend that (tbl,idx) is the PRIMARY KEY. */
@@ -208451,7 +208450,7 @@ static int sessionInitTable(sqlite3_session *pSession, SessionTable *pTab){
           break;
         }
       }
-      if( 0==sqlite3_stricmp("sqlite_stat1", pTab->zName) ){
+      if( 0==sqlite3_stricmp("sqlcipher_stat1", pTab->zName) ){
         pTab->bStat1 = 1;
       }
     }
@@ -209583,7 +209582,7 @@ static int sessionSelectStmt(
 
   if( 0==sqlite3_stricmp("sqlite_stat1", zTab) ){
     zSql = sqlite3_mprintf(
-        "SELECT tbl, ?2, stat FROM %Q.sqlite_stat1 WHERE tbl IS ?1 AND "
+        "SELECT tbl, ?2, stat FROM %Q.sqlcipher_stat1 WHERE tbl IS ?1 AND "
         "idx IS (CASE WHEN ?2=X'' THEN NULL ELSE ?2 END)", zDb
     );
     if( zSql==0 ) rc = SQLITE_NOMEM;
@@ -211091,17 +211090,17 @@ static int sessionPrepare(sqlite3 *db, sqlite3_stmt **pp, const char *zSql){
 ** other tables.
 */
 static int sessionStat1Sql(sqlite3 *db, SessionApplyCtx *p){
-  int rc = sessionSelectRow(db, "sqlite_stat1", p);
+  int rc = sessionSelectRow(db, "sqlcipher_stat1", p);
   if( rc==SQLITE_OK ){
     rc = sessionPrepare(db, &p->pInsert,
-        "INSERT INTO main.sqlite_stat1 VALUES(?1, "
+        "INSERT INTO main.sqlcipher_stat1 VALUES(?1, "
         "CASE WHEN length(?2)=0 AND typeof(?2)='blob' THEN NULL ELSE ?2 END, "
         "?3)"
     );
   }
   if( rc==SQLITE_OK ){
     rc = sessionPrepare(db, &p->pUpdate,
-        "UPDATE main.sqlite_stat1 SET "
+        "UPDATE main.sqlcipher_stat1 SET "
         "tbl = CASE WHEN ?2 THEN ?3 ELSE tbl END, "
         "idx = CASE WHEN ?5 THEN ?6 ELSE idx END, "
         "stat = CASE WHEN ?8 THEN ?9 ELSE stat END  "
@@ -211112,7 +211111,7 @@ static int sessionStat1Sql(sqlite3 *db, SessionApplyCtx *p){
   }
   if( rc==SQLITE_OK ){
     rc = sessionPrepare(db, &p->pDelete,
-        "DELETE FROM main.sqlite_stat1 WHERE tbl=?1 AND idx IS "
+        "DELETE FROM main.sqlcipher_stat1 WHERE tbl=?1 AND idx IS "
         "CASE WHEN length(?2)=0 AND typeof(?2)='blob' THEN NULL ELSE ?2 END "
         "AND (?4 OR stat IS ?3)"
     );
@@ -211776,7 +211775,7 @@ static int sessionChangesetApply(
         }
         else{
           sApply.nCol = nCol;
-          if( 0==sqlite3_stricmp(zTab, "sqlite_stat1") ){
+          if( 0==sqlite3_stricmp(zTab, "sqlcipher_stat1") ){
             if( (rc = sessionStat1Sql(db, &sApply) ) ){
               break;
             }
@@ -235444,6 +235443,7 @@ SQLITE_API int sqlite3_stmt_init(
 SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; }
 /************************** End of sqlite3.c ******************************/
 
+#pragma GCC diagnostic pop
 /************** Begin file dbdump.c ********************************************/
 /*
 ** 2016-03-13
@@ -235491,9 +235491,6 @@ SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; }
 ** of the database file, the schema, and optionally the table, forming the
 ** first three arguments of a single call to the library routine.
 */
-#include "sqlite3.h"
-#include <stdarg.h>
-#include <string.h>
 #include <ctype.h>
 
 /*
@@ -235538,7 +235535,7 @@ static void freeText(DText *p){
 ** If the third argument, quote, is not '\0', then it is used as a
 ** quote character for zAppend.
 */
-static void appendText(DText *p, char const *zAppend, char quote){
+static void appendDText(DText *p, char const *zAppend, char quote){
   int len;
   int i;
   int nAppend = (int)(strlen(zAppend) & 0x3fffffff);
@@ -235653,7 +235650,7 @@ static char **tableColumnList(DState *p, const char *zTab){
       nPK++;
       if( nPK==1
        && sqlite3_stricmp((const char*)sqlite3_column_text(pStmt,2),
-                          "INTEGER")==0 
+                          "INTEGER")==0
       ){
         isIPK = 1;
       }else{
@@ -235839,11 +235836,11 @@ static int dump_callback(void *pArg, int nArg, char **azArg, char **azCol){
   zType = azArg[1];
   zSql = azArg[2];
 
-  if( strcmp(zTable, "sqlite_sequence")==0 ){
+  if( strcmp(zTable, "sqlcipher_sequence")==0 ){
     p->xCallback("DELETE FROM sqlite_sequence;\n", p->pArg);
-  }else if( sqlite3_strglob("sqlite_stat?", zTable)==0 ){
+  }else if( sqlite3_strglob("sqlcipher_stat?", zTable)==0 ){
     p->xCallback("ANALYZE sqlite_schema;\n", p->pArg);
-  }else if( strncmp(zTable, "sqlite_", 7)==0 ){
+  }else if( strncmp(zTable, "sqlcipher_", 10)==0 ){
     return 0;
   }else if( strncmp(zSql, "CREATE VIRTUAL TABLE", 20)==0 ){
     if( !p->writableSchema ){
@@ -235876,45 +235873,50 @@ static int dump_callback(void *pArg, int nArg, char **azArg, char **azCol){
     if( azTCol==0 ) return 0;
 
     initText(&sTable);
-    appendText(&sTable, "INSERT INTO ", 0);
+    appendDText(&sTable, "INSERT INTO ", 0);
 
     /* Always quote the table name, even if it appears to be pure ascii,
     ** in case it is a keyword. Ex:  INSERT INTO "table" ... */
-    appendText(&sTable, zTable, quoteChar(zTable));
+    if (strncmp(zTable, "sqlcipher_", sizeof "sqlcipher"))
+      appendDText(&sTable, zTable, quoteChar(zTable));
+    else {
+      appendDText(&sTable, "sqlite_", 0);
+      appendDText(&sTable, zTable + sizeof "sqlcipher", 0);
+    }
 
     /* If preserving the rowid, add a column list after the table name.
     ** In other words:  "INSERT INTO tab(rowid,a,b,c,...) VALUES(...)"
     ** instead of the usual "INSERT INTO tab VALUES(...)".
     */
     if( azTCol[0] ){
-      appendText(&sTable, "(", 0);
-      appendText(&sTable, azTCol[0], 0);
+      appendDText(&sTable, "(", 0);
+      appendDText(&sTable, azTCol[0], 0);
       for(i=1; azTCol[i]; i++){
-        appendText(&sTable, ",", 0);
-        appendText(&sTable, azTCol[i], quoteChar(azTCol[i]));
+        appendDText(&sTable, ",", 0);
+        appendDText(&sTable, azTCol[i], quoteChar(azTCol[i]));
       }
-      appendText(&sTable, ")", 0);
+      appendDText(&sTable, ")", 0);
     }
-    appendText(&sTable, " VALUES(", 0);
+    appendDText(&sTable, " VALUES(", 0);
 
     /* Build an appropriate SELECT statement */
     initText(&sSelect);
-    appendText(&sSelect, "SELECT ", 0);
+    appendDText(&sSelect, "SELECT ", 0);
     if( azTCol[0] ){
-      appendText(&sSelect, azTCol[0], 0);
-      appendText(&sSelect, ",", 0);
+      appendDText(&sSelect, azTCol[0], 0);
+      appendDText(&sSelect, ",", 0);
     }
     for(i=1; azTCol[i]; i++){
-      appendText(&sSelect, azTCol[i], quoteChar(azTCol[i]));
+      appendDText(&sSelect, azTCol[i], quoteChar(azTCol[i]));
       if( azTCol[i+1] ){
-        appendText(&sSelect, ",", 0);
+        appendDText(&sSelect, ",", 0);
       }
     }
     nCol = i;
     if( azTCol[0]==0 ) nCol--;
     freeColumnList(azTCol);
-    appendText(&sSelect, " FROM ", 0);
-    appendText(&sSelect, zTable, quoteChar(zTable));
+    appendDText(&sSelect, " FROM ", 0);
+    appendDText(&sSelect, zTable, quoteChar(zTable));
 
     rc = sqlite3_prepare_v2(p->db, sSelect.z, -1, &pStmt, 0);
     if( rc!=SQLITE_OK ){
@@ -235948,7 +235950,7 @@ static int dump_callback(void *pArg, int nArg, char **azArg, char **azCol){
               break;
             }
             case SQLITE_TEXT: {
-              output_quoted_escaped_string(p, 
+              output_quoted_escaped_string(p,
                    (const char*)sqlite3_column_text(pStmt,i));
               break;
             }
@@ -236061,7 +236063,7 @@ static void run_schema_dump_query(
   va_list ap;
   va_start(ap, zQuery);
   z = sqlite3_vmprintf(zQuery, ap);
-  va_end(ap); 
+  va_end(ap);
   sqlite3_exec(p->db, z, dump_callback, p, &zErr);
   sqlite3_free(z);
   if( zErr ){
@@ -236078,8 +236080,6 @@ static void run_schema_dump_query(
 */
 int sqlite3_db_dump(
   sqlite3 *db,               /* The database connection */
-  const char *zSchema,       /* Which schema to dump.  Usually "main". */
-  const char *zTable,        /* Which table to dump.  NULL means everything. */
   int (*xCallback)(const char*,void*),   /* Output sent to this callback */
   void *pArg                             /* Second argument of the callback */
 ){
@@ -236091,41 +236091,24 @@ int sqlite3_db_dump(
   x.xCallback = xCallback;
   x.pArg = pArg;
   xCallback("PRAGMA foreign_keys=OFF;\nBEGIN TRANSACTION;\n", pArg);
-  if( zTable==0 ){
-    run_schema_dump_query(&x,
-      "SELECT name, type, sql FROM \"%w\".sqlite_schema "
-      "WHERE sql NOT NULL AND type=='table' AND name!='sqlite_sequence'",
-      zSchema
-    );
-    run_schema_dump_query(&x,
-      "SELECT name, type, sql FROM \"%w\".sqlite_schema "
-      "WHERE name=='sqlite_sequence'", zSchema
-    );
-    output_sql_from_query(&x,
-      "SELECT sql FROM sqlite_schema "
-      "WHERE sql NOT NULL AND type IN ('index','trigger','view')", 0
-    );
-  }else{
-    run_schema_dump_query(&x,
-      "SELECT name, type, sql FROM \"%w\".sqlite_schema "
-      "WHERE tbl_name=%Q COLLATE nocase AND type=='table'"
-      "  AND sql NOT NULL",
-      zSchema, zTable
-    );
-    output_sql_from_query(&x,
-      "SELECT sql FROM \"%w\".sqlite_schema "
-      "WHERE sql NOT NULL"
-      "  AND type IN ('index','trigger','view')"
-      "  AND tbl_name=%Q COLLATE nocase",
-      zSchema, zTable
-    ); 
-  }
+  run_schema_dump_query(&x,
+    "SELECT name, type, sql FROM sqlcipher_master "
+    "WHERE sql NOT NULL AND type=='table' AND name!='sqlcipher_sequence'"
+  );
+  run_schema_dump_query(&x,
+    "SELECT name, type, sql FROM sqlcipher_master "
+    "WHERE name=='sqlcipher_sequence'"
+  );
+  output_sql_from_query(&x,
+    "SELECT sql FROM sqlcipher_master "
+    "WHERE sql NOT NULL AND type IN ('index','trigger','view')", 0
+  );
   if( x.writableSchema ){
     xCallback("PRAGMA writable_schema=OFF;\n", pArg);
   }
   xCallback(x.nErr ? "ROLLBACK; -- due to errors\n" : "COMMIT;\n", pArg);
   sqlite3_exec(db, "COMMIT", 0, 0, 0);
-  return x.rc;
+  return x.rc ?: x.nErr ? SQLITE_ERROR : SQLITE_OK;
 }
 /************** End of dbdump.c ************************************************/