]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
The ANALYZE command adds the sqlite_stat2.cnt column if it does not already
authordrh <drh@noemail.net>
Sun, 7 Aug 2011 00:21:17 +0000 (00:21 +0000)
committerdrh <drh@noemail.net>
Sun, 7 Aug 2011 00:21:17 +0000 (00:21 +0000)
exist.

FossilOrigin-Name: 794fde6f918b405ebe47068dea76a2d3f7d97733

manifest
manifest.uuid
src/analyze.c
test/analyze8.test

index 63feae0747584d3f9c2b6397c5f31f73c4fc5d69..9fc556900041eb322b7a39c04c9b341c79c0b246 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C The\ssqlite_stat2.cnt\sfield\sis\sparsed\sif\sit\sis\spresent.\s\sBut\sit\sis\snot\syet\nused.\s\sA\slarge\scomment\sadded\sto\sanalyze.c\sto\sexplain\sthe\sformat\sof\sthe\nANALYZE\ssystem\stables.
-D 2011-08-06T19:48:53.187
+C The\sANALYZE\scommand\sadds\sthe\ssqlite_stat2.cnt\scolumn\sif\sit\sdoes\snot\salready\nexist.
+D 2011-08-07T00:21:17.038
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 1e6988b3c11dee9bd5edc0c804bd4468d74a9cdc
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -118,7 +118,7 @@ F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
 F sqlite3.1 6be1ad09113570e1fc8dcaff84c9b0b337db5ffc
 F sqlite3.pc.in ae6f59a76e862f5c561eb32a380228a02afc3cad
 F src/alter.c ac80a0f31189f8b4a524ebf661e47e84536ee7f5
-F src/analyze.c 8a5343a20ae69fd27247249cf40262b0021e379e
+F src/analyze.c ab43a0dea4df603b644a0bc883aeea47856169a6
 F src/attach.c 12c6957996908edc31c96d7c68d4942c2474405f
 F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34
 F src/backup.c 986c15232757f2873dff35ee3b35cbf935fc573c
@@ -267,7 +267,7 @@ F test/analyze4.test 757b37875cf9bb528d46f74497bc789c88365045
 F test/analyze5.test f6c250012b173f9b10ae5d577e9592767b376b1c
 F test/analyze6.test c125622a813325bba1b4999040ddc213773c2290
 F test/analyze7.test ed672a2c09c4b5a5b528ca38951318af463bb17e
-F test/analyze8.test 8a9c83bf735311daf812c9f762d79234f9069404
+F test/analyze8.test fbb378563ec2f68f8dff4b6f70b7d35088acfd7b
 F test/async.test 1d0e056ba1bb9729283a0f22718d3a25e82c277b
 F test/async2.test c0a9bd20816d7d6a2ceca7b8c03d3d69c28ffb8b
 F test/async3.test d73a062002376d7edc1fe3edff493edbec1fc2f7
@@ -956,7 +956,7 @@ F tool/symbols.sh caaf6ccc7300fd43353318b44524853e222557d5
 F tool/tostr.awk 11760e1b94a5d3dcd42378f3cc18544c06cfa576
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
 F tool/warnings.sh 2ebae31e1eb352696f3c2f7706a34c084b28c262
-P 2daab6bd42b34b32de46db513437cc4d6ca17975
-R cec8d2f4d5cd3f2eecb5e9f36d91b967
+P 6d1e2372fe73f4c04561108aac6bc8c95f6e7a1a
+R bbffc4c86ec6cf77283985eee0cedc8e
 U drh
-Z deea39c8beb81cdf79c7b9366ab4e7a9
+Z 16b3ea4435ed857a5ccfcdb15256b70e
index 07b496588b1c15bb9337afa82cd4604792500979..d8fb4d6ec49c147702e9a1a0e2acff0f8257af49 100644 (file)
@@ -1 +1 @@
-6d1e2372fe73f4c04561108aac6bc8c95f6e7a1a
\ No newline at end of file
+794fde6f918b405ebe47068dea76a2d3f7d97733
\ No newline at end of file
index 8689cee4bcf37e51b80d168548cb83c7a8fabb7a..6aa0242e945ff8a046950763fcefd409ce0fbc35 100644 (file)
@@ -179,6 +179,15 @@ static void openStatTable(
         /* The sqlite_stat[12] table already exists.  Delete all rows. */
         sqlite3VdbeAddOp2(v, OP_Clear, aRoot[i], iDb);
       }
+#ifdef SQLITE_ENABLE_STAT2
+      if( i==1 && iDb!=1 && pStat->nCol==4 ){
+        sqlite3NestedParse(pParse,
+           "UPDATE %Q.sqlite_master SET sql='CREATE TABLE sqlite_stat2(%s)'"
+           " WHERE name='sqlite_stat2'", pDb->zName, aTable[i].zCols
+        );
+        sqlite3ChangeCookie(pParse, iDb);
+      }
+#endif
     }
   }
 
@@ -607,7 +616,7 @@ void sqlite3Analyze(Parse *pParse, Token *pName1, Token *pName2){
         }
         sqlite3DbFree(db, z);
       }
-    }   
+    }
   }
 }
 
index 123e5cc28b752ec57bfd17ee5db6d4f41b458c75..c7f7fa7aa5b41e61160c8a54e89c3be8c9198636 100644 (file)
@@ -162,4 +162,40 @@ do_test analyze8-3.6 {
   }
 } {2 2 20 38 20 38 20 38 20 38 20 38 20 38 20 38 20 38 20 38}
 
+
+
+# Verify that the 5th "cnt" column is added to the sqlite_stat2 table
+# on a full ANALYZE if the column is not already present.
+#
+do_test analyze8-4.0 {
+  execsql {
+    UPDATE t1 SET a=b;
+    ANALYZE;
+    PRAGMA writable_schema=ON;
+    UPDATE sqlite_master 
+       SET sql='CREATE TABLE sqlite_stat2(tbl,idx,sampleno,sample)'
+     WHERE name='sqlite_stat2';
+  }
+  db close
+  sqlite3 db test.db
+  execsql {
+    SELECT sample FROM sqlite_stat2 WHERE idx='t1all' ORDER BY sampleno
+  }
+} {2 4 6 8 10 12 14 16 18 20}
+do_test analyze8-4.1 {
+  catchsql {SELECT sample, cnt FROM sqlite_stat2}
+} {1 {no such column: cnt}}
+do_test analyze8-4.2 {
+  execsql {
+    ANALYZE;
+  }
+  db close;
+  sqlite3 db test.db
+  execsql {
+    SELECT sample, +cnt FROM sqlite_stat2 WHERE idx='t1all' ORDER BY sampleno;
+  }
+} {2 2 4 2 6 2 8 2 10 2 12 2 14 2 16 2 18 2 20 2}
+
+
+
 finish_test