]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add an experimental pragma "PRAGMA preload;" that preloads the pcache with preload-pragma
authordrh <drh@noemail.net>
Mon, 2 Feb 2015 22:19:05 +0000 (22:19 +0000)
committerdrh <drh@noemail.net>
Mon, 2 Feb 2015 22:19:05 +0000 (22:19 +0000)
the entire database file.

FossilOrigin-Name: 6dca23e64e9c8b7343082e2c7d6b7ba2d62fdb5b

manifest
manifest.uuid
src/pragma.c
src/pragma.h
tool/mkpragmatab.tcl

index a2f72263ab6623d12da555c9144864421e85906d..3da24156ee6d6126b7097a824f5da2abc7eead47 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Break\sout\sthe\s(script-generated)\spragma\sparsing\stables\sinto\sa\sseparate\sfile,\npragma.h,\sto\smake\sediting\seasier.
-D 2015-02-02T21:34:54.408
+C Add\san\sexperimental\spragma\s"PRAGMA\spreload;"\sthat\spreloads\sthe\spcache\swith\nthe\sentire\sdatabase\sfile.
+D 2015-02-02T22:19:05.803
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in cbe64ed4d90a19062b804f7fbd319080f851b004
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -223,8 +223,8 @@ F src/parse.y c5d0d964f9ac023e8154cad512e54b0b6058e086
 F src/pcache.c d210cf90d04365a74f85d21374dded65af67b0cb
 F src/pcache.h b44658c9c932d203510279439d891a2a83e12ba8
 F src/pcache1.c 1e77432b40b7d3288327d9cdf399dcdfd2b6d3bf
-F src/pragma.c 58044728a29a0240d14a850c3870e5ac3da436b2
-F src/pragma.h 28804eae1286aab6f2ffa3682dc0b06b58c51834
+F src/pragma.c a5b397bd62def3b4b1f670b512ca11a1d2805b29
+F src/pragma.h 32eb95f87ccb49e7eec028d6e981b8cc2e0fa65c
 F src/prepare.c 173a5a499138451b2561614ecb87d78f9f4644b9
 F src/printf.c 05edc41450d0eb2c05ef7db113bf32742ae65325
 F src/random.c ba2679f80ec82c4190062d756f22d0c358180696
@@ -1203,7 +1203,7 @@ F tool/logest.c eef612f8adf4d0993dafed0416064cf50d5d33c6
 F tool/mkautoconfamal.sh d1a2da0e15b2ed33d60af35c7e9d483f13a8eb9f
 F tool/mkkeywordhash.c dfff09dbbfaf950e89af294f48f902181b144670
 F tool/mkopts.tcl 66ac10d240cc6e86abd37dc908d50382f84ff46e
-F tool/mkpragmatab.tcl 4b4e91f6b8fc45596686798b918999e923b91fc7
+F tool/mkpragmatab.tcl 848a74446f372451cd4d3a60a3d9aee29c258f1e
 F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97
 F tool/mksqlite3c-noext.tcl 9ef48e1748dce7b844f67e2450ff9dfeb0fb4ab5
 F tool/mksqlite3c.tcl 6b8e572a90eb4e0086e3ba90d88b76c085919863
@@ -1239,7 +1239,10 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 42d5601739c90434e5adfda8fa99ef7b903877db
-R ad79dcf7ddc97ee53618558cb6690870
+P 32c0325bcb083fe3f0f0cfe999d00f754e15299e
+R ccc9897517b2c20b95a8eb47a0bf1dbc
+T *branch * preload-pragma
+T *sym-preload-pragma *
+T -sym-trunk *
 U drh
-Z 0fdc8db6e22e6c93e424fbfcfceed021
+Z 4ac85c2d90b0f57362188f2ac4ef8b13
index b9ef8ce9ed34ad78d277ec1b6d34caf2bc896bae..e256d6957fb6454f3f8fed75b097f88d86bf7095 100644 (file)
@@ -1 +1 @@
-32c0325bcb083fe3f0f0cfe999d00f754e15299e
\ No newline at end of file
+6dca23e64e9c8b7343082e2c7d6b7ba2d62fdb5b
\ No newline at end of file
index f680fb21388f66c20a72d6c73da9f4c1c857b33b..6ed013379e59f1aa90346c493d4cafd031e57432 100644 (file)
@@ -1343,6 +1343,28 @@ void sqlite3Pragma(
   }
   break;
 
+  /* Try to load the entire database file into the pcache.
+  */
+  case PragTyp_PRELOAD: {
+    Pager *pPager = sqlite3BtreePager(pDb->pBt);
+    Pgno i, nPage;
+    int rc = SQLITE_OK;
+    DbPage *pPage, *pPage0 = 0;
+    if( pPager
+     && sqlite3PagerSharedLock(pPager)==SQLITE_OK
+     && sqlite3PagerGet(pPager, 1, &pPage0)==SQLITE_OK
+    ){
+      sqlite3PagerPagecount(pPager, (int*)&nPage);
+      for(i=2; rc==SQLITE_OK && i<=nPage; i++){
+        rc = sqlite3PagerGet(pPager, i, &pPage);
+        sqlite3PagerUnref(pPage);
+      }
+      if( rc ) sqlite3ErrorMsg(pParse, "preload failed");
+    }
+    sqlite3PagerUnref(pPage0);
+    break;
+  }
+
 #ifndef SQLITE_INTEGRITY_CHECK_ERROR_MAX
 # define SQLITE_INTEGRITY_CHECK_ERROR_MAX 100
 #endif
index e5ffeb35c95ea652512e7cf3325be9d0d433008a..058f3a838fc19726511ae9bb32b0cc16645388eb 100644 (file)
 #define PragTyp_PAGE_COUNT                    22
 #define PragTyp_MMAP_SIZE                     23
 #define PragTyp_PAGE_SIZE                     24
-#define PragTyp_SECURE_DELETE                 25
-#define PragTyp_SHRINK_MEMORY                 26
-#define PragTyp_SOFT_HEAP_LIMIT               27
-#define PragTyp_STATS                         28
-#define PragTyp_SYNCHRONOUS                   29
-#define PragTyp_TABLE_INFO                    30
-#define PragTyp_TEMP_STORE                    31
-#define PragTyp_TEMP_STORE_DIRECTORY          32
-#define PragTyp_THREADS                       33
-#define PragTyp_WAL_AUTOCHECKPOINT            34
-#define PragTyp_WAL_CHECKPOINT                35
-#define PragTyp_ACTIVATE_EXTENSIONS           36
-#define PragTyp_HEXKEY                        37
-#define PragTyp_KEY                           38
-#define PragTyp_REKEY                         39
-#define PragTyp_LOCK_STATUS                   40
-#define PragTyp_PARSER_TRACE                  41
+#define PragTyp_PRELOAD                       25
+#define PragTyp_SECURE_DELETE                 26
+#define PragTyp_SHRINK_MEMORY                 27
+#define PragTyp_SOFT_HEAP_LIMIT               28
+#define PragTyp_STATS                         29
+#define PragTyp_SYNCHRONOUS                   30
+#define PragTyp_TABLE_INFO                    31
+#define PragTyp_TEMP_STORE                    32
+#define PragTyp_TEMP_STORE_DIRECTORY          33
+#define PragTyp_THREADS                       34
+#define PragTyp_WAL_AUTOCHECKPOINT            35
+#define PragTyp_WAL_CHECKPOINT                36
+#define PragTyp_ACTIVATE_EXTENSIONS           37
+#define PragTyp_HEXKEY                        38
+#define PragTyp_KEY                           39
+#define PragTyp_REKEY                         40
+#define PragTyp_LOCK_STATUS                   41
+#define PragTyp_PARSER_TRACE                  42
 #define PragFlag_NeedSchema           0x01
 #define PragFlag_ReadOnly             0x02
 static const struct sPragmaNames {
@@ -305,6 +306,10 @@ static const struct sPragmaNames {
     /* ePragFlag: */ 0,
     /* iArg:      */ 0 },
 #endif
+  { /* zName:     */ "preload",
+    /* ePragTyp:  */ PragTyp_PRELOAD,
+    /* ePragFlag: */ 0,
+    /* iArg:      */ 0 },
 #if !defined(SQLITE_OMIT_FLAG_PRAGMAS)
   { /* zName:     */ "query_only",
     /* ePragTyp:  */ PragTyp_FLAG,
@@ -452,4 +457,4 @@ static const struct sPragmaNames {
     /* iArg:      */ SQLITE_WriteSchema|SQLITE_RecoveryMode },
 #endif
 };
-/* Number of pragmas: 58 on by default, 71 total. */
+/* Number of pragmas: 59 on by default, 72 total. */
index 2ba8c9da2ad35e8913fe6063098e7bfafc6ca2e0..54a09f9a142505b84fa25a6102945527bcced1bf 100644 (file)
@@ -307,6 +307,8 @@ set pragma_def {
   NAME: soft_heap_limit
 
   NAME: threads
+
+  NAME: preload
 }
 
 # Open the output file