]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add support for SQLITE_TESTCTRL_TUNE and the ".testctrl tune ID VALUE" command
authordrh <>
Fri, 4 Jun 2021 13:16:46 +0000 (13:16 +0000)
committerdrh <>
Fri, 4 Jun 2021 13:16:46 +0000 (13:16 +0000)
in the CLI.

FossilOrigin-Name: f1199d58b9cfdcddb83bc35544ce38299ac4ed50d7ab90d33463f6ccce526feb

manifest
manifest.uuid
src/main.c
src/shell.c.in
src/sqlite.h.in
src/sqliteInt.h

index 5aab8fbf36917b25730ae1dce3d8f647c5bf4967..4df6ed003c63ba99c7f55fc3b581051d120d3ebc 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Merge\srecent\strunk\senchancements\sinto\sthe\sseekscan-improvements\sbranch.
-D 2021-06-04T12:29:22.099
+C Add\ssupport\sfor\sSQLITE_TESTCTRL_TUNE\sand\sthe\s".testctrl\stune\sID\sVALUE"\scommand\nin\sthe\sCLI.
+D 2021-06-04T13:16:46.112
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -508,7 +508,7 @@ F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71
 F src/insert.c 2189e0e596010a0dc5405d9f14f78db1ee2fa71138c931f5b6ea96610b95bfc1
 F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa
 F src/loadext.c 8c9c8cd2bd8eecdb06d9b6e89de7e9e65bae45cc8fc33609cc74023a5c296067
-F src/main.c 2b2044221a10e7c5f49a98f50563ce9a944511241ba5946d1754dcc2a7437a07
+F src/main.c 3d9a09ebfcf5e1fa704afa3a1e957bc13b03c994c346bcec8c6b6ae5d5277caf
 F src/malloc.c cbc93cdd429c4594912017d92ab656e2579aca64dbd1c6888551275bed46f25b
 F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
 F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de
@@ -545,11 +545,11 @@ F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384
 F src/resolve.c 35630effd4d16d2373caa41bae40a3d71f853f3ad0cb4f572f2ed4b8c350c1e9
 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92
 F src/select.c 2f4429e0b0ca031e360489c45dca5dfa06cd85480e12c0d1360b91e1c8e7f7a2
-F src/shell.c.in ab37c8869390a7624e594cb1459277319d16521d4644c42f4ee6a3866cf5f0cd
-F src/sqlite.h.in 5c950066775ca9efdaa49077c05d38d0bef6418f3bd07d2dce0210f1d2f3c326
+F src/shell.c.in d10dd74a98c7d360ae3a2dffe867540648809581f3575fa3970d9c994814ebe6
+F src/sqlite.h.in 7f184776cfd85900905420ea3c62e44929ba348ddc015bc5933835ee0529188e
 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
 F src/sqlite3ext.h 61b38c073d5e1e96a3d45271b257aef27d0d13da2bea5347692ae579475cd95e
-F src/sqliteInt.h de7cf989dad75a3287a8b486083b21149bdead3669794b5a9c7e331668443ae1
+F src/sqliteInt.h 96c6caf72c227310dcf401488c2227d7f5586453bc95372fa822fb10c810822f
 F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657
 F src/status.c 4b8bc2a6905163a38b739854a35b826c737333fab5b1f8e03fa7eb9a4799c4c1
 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
@@ -1918,7 +1918,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P f674c41e5cbbb08ffc3cc00ab449229b672054c872e209337f12e7eacb531fe5 4a587c3492faa99490fd67ca1de9fceafcdc12d220f42817791923be258b73f1
-R e31162f50a8fe0f7f09f83d8467f9ef2
+P d9e85fe80cdd3d798a583a5f99148235d0c3f39adfabbc661615893c387e6e45
+R 6791cad4e90a4fac84f0f4c8722de676
 U drh
-Z f3a9a5e483214de7c18a55211d90eb86
+Z 52da6a38608d38de5f10fc4c527493c0
index 9b65ccd6043dd750553af0001581c66d2456b9f7..64285d1936fd3b21ba0d956cc1f9698cbec038c9 100644 (file)
@@ -1 +1 @@
-d9e85fe80cdd3d798a583a5f99148235d0c3f39adfabbc661615893c387e6e45
\ No newline at end of file
+f1199d58b9cfdcddb83bc35544ce38299ac4ed50d7ab90d33463f6ccce526feb
\ No newline at end of file
index bd92f7661afa36a8f038e07312b5761fabca6389..5d50a1681b04185ddce0f66af22430d72bbabfd3 100644 (file)
@@ -4283,6 +4283,29 @@ int sqlite3_test_control(int op, ...){
        }
        break;
     }
+
+#ifdef SQLITE_DEBUG
+    /* sqlite3_test_control(SQLITE_TESTCTRL_TUNE, id, val)
+    **
+    ** "id" must be an integer between 0 and SQLITE_NTUNE-1.  "val"
+    ** is a 64-bit signed integer.  This test-control sets tuning parameter
+    ** id to the value val.  
+    **
+    ** Tuning parameters are for use during transient development builds,
+    ** to help find the best values for constants in the query planner.
+    ** Access tuning parameters using the Tuning(ID) macro.  Set the
+    ** parameters in the CLI using ".testctrl tune ID VALUE".
+    **
+    ** Transient use only.  Tuning parameters should not be used in
+    ** checked-in code.
+    */
+    case SQLITE_TESTCTRL_TUNE: {
+      int id = va_arg(ap, int);
+      int val = va_arg(ap, sqlite3_int64);
+      if( id>=0 && id<SQLITE_NTUNE ) Tuning(id) = val;
+      break;
+    }
+#endif
   }
   va_end(ap);
 #endif /* SQLITE_UNTESTABLE */
index 4e23ad84e3e3bcf12ecb246b43d87ff3aa8ec092..67edb122d50dbb255e8368ad4a615359ceb346fd 100644 (file)
@@ -9974,6 +9974,7 @@ static int do_meta_command(char *zLine, ShellState *p){
       { "prng_save",          SQLITE_TESTCTRL_PRNG_SAVE,     ""               },
       { "prng_seed",          SQLITE_TESTCTRL_PRNG_SEED,     "SEED ?db?"      },
       { "seek_count",         SQLITE_TESTCTRL_SEEK_COUNT,    ""               },
+      { "tune",               SQLITE_TESTCTRL_TUNE,          "ID VALUE"       },
     };
     int testctrl = -1;
     int iCtrl = -1;
@@ -10118,11 +10119,24 @@ static int do_meta_command(char *zLine, ShellState *p){
         }
 
 #ifdef YYCOVERAGE
-        case SQLITE_TESTCTRL_PARSER_COVERAGE:
+        case SQLITE_TESTCTRL_PARSER_COVERAGE: {
           if( nArg==2 ){
             sqlite3_test_control(testctrl, p->out);
             isOk = 3;
           }
+          break;
+        }
+#endif
+#ifdef SQLITE_DEBUG
+        case SQLITE_TESTCTRL_TUNE: {
+          if( nArg==4 ){
+            int id = (int)integerValue(azArg[2]);
+            i64 val = integerValue(azArg[3]);
+            rc2 = sqlite3_test_control(testctrl, id, val);
+            isOk = 3;
+          }
+          break;
+        }
 #endif
       }
     }
index ef452e3244f3b1fda92b8bed42089cf245697299..92ea416111f152118a7c8ed26dcd2c7ea06311dc 100644 (file)
@@ -7811,7 +7811,8 @@ int sqlite3_test_control(int op, ...);
 #define SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS     29
 #define SQLITE_TESTCTRL_SEEK_COUNT              30
 #define SQLITE_TESTCTRL_TRACEFLAGS              31
-#define SQLITE_TESTCTRL_LAST                    31  /* Largest TESTCTRL */
+#define SQLITE_TESTCTRL_TUNE                    32
+#define SQLITE_TESTCTRL_LAST                    32  /* Largest TESTCTRL */
 
 /*
 ** CAPI3REF: SQL Keyword Checking
index 1ada072ebb577dbddcaca45b57247b68b535d450..112168ed862b3b6ced64759cd161070b8897dd84 100644 (file)
@@ -3741,6 +3741,20 @@ typedef struct {
 #define INITFLAG_AlterRename   0x0001  /* Reparse after a RENAME */
 #define INITFLAG_AlterDrop     0x0002  /* Reparse after a DROP COLUMN */
 
+/* Tuning parameters are set using SQLITE_TESTCTRL_TUNE and are controlled
+** on debug-builds of the CLI using ".testctrl tune ID VALUE".  Tuning
+** parameters are for temporary use during development, to help find
+** optimial values for parameters in the query planner.  The should not
+** be used on trunk check-ins.  They are a temporary mechanism available
+** for transient development builds only.
+*/
+#define SQLITE_NTUNE  6             /* Should be zero for all trunk check-ins */
+#ifdef SQLITE_DEBUG
+# define Tuning(X)  (sqlite3Config.aTune[X])
+#else
+# define Tuning(X)  0
+#endif
+
 /*
 ** Structure containing global configuration data for the SQLite library.
 **
@@ -3805,6 +3819,10 @@ struct Sqlite3Config {
   int iOnceResetThreshold;          /* When to reset OP_Once counters */
   u32 szSorterRef;                  /* Min size in bytes to use sorter-refs */
   unsigned int iPrngSeed;           /* Alternative fixed seed for the PRNG */
+  /* vvvv--- must be last ---vvv */
+#ifdef SQLITE_DEBUG
+  sqlite3_int64 aTune[SQLITE_NTUNE]; /* Tuning parameters */
+#endif
 };
 
 /*