]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
New test-only SQL functions: implies_nonnull_row(), expr_compare(), and
authordrh <drh@noemail.net>
Wed, 1 Jan 2020 15:43:30 +0000 (15:43 +0000)
committerdrh <drh@noemail.net>
Wed, 1 Jan 2020 15:43:30 +0000 (15:43 +0000)
expr_implies_expr().  The SQLITE_TESTCTRL_INTERNAL_FUNCTIONS test-control
is modified to toggle internal function access on and off for a single
database connection.

FossilOrigin-Name: 473892a8eceacf24d57fd0c72ff2a0b8be4e0d75e0af7a30bdb24fbc3b453601

15 files changed:
manifest
manifest.uuid
src/expr.c
src/func.c
src/global.c
src/main.c
src/resolve.c
src/shell.c.in
src/sqliteInt.h
src/test1.c
test/alter.test
test/altercol.test
test/altertab.test
test/fkey2.test
test/without_rowid3.test

index 1899d7f3fbbcbe7e503fdc9b4144f7e3285fad69..e18705c664c3fae87281cbcd1440c02bbcd1c81e 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Factor\sout\scode\sgeneration\sfor\sin-line\sSQL\sfunctions\sinto\sa\sseparate\sroutine\ninside\sof\sexpr.c.
-D 2020-01-01T13:55:08.668
+C New\stest-only\sSQL\sfunctions:\simplies_nonnull_row(),\sexpr_compare(),\sand\nexpr_implies_expr().\s\sThe\sSQLITE_TESTCTRL_INTERNAL_FUNCTIONS\stest-control\nis\smodified\sto\stoggle\sinternal\sfunction\saccess\son\sand\soff\sfor\sa\ssingle\ndatabase\sconnection.
+D 2020-01-01T15:43:30.603
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -480,11 +480,11 @@ F src/date.c e1d8ac7102f3f283e63e13867acb0efa33861cf34f0faf4cdbaf9fa7a1eb7041
 F src/dbpage.c 135eb3b5e74f9ef74bde5cec2571192c90c86984fa534c88bf4a055076fa19b7
 F src/dbstat.c 6c407e549406c10fde9ac3987f6d734459205239ad370369bc5fcd683084a4fa
 F src/delete.c a5c59b9c0251cf7682bc52af0d64f09b1aefc6781a63592c8f1136f7b73c66e4
-F src/expr.c afde0ea1060266338820277d210edc0ed383416c59e5f3472a253f121b5a9de3
+F src/expr.c 971e442fd52c493826a23e993de94e504adb10e5979d69169786af594687911b
 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
 F src/fkey.c 92a248ec0fa4ed8ab60c98d9b188ce173aaf218f32e7737ba77deb2a684f9847
-F src/func.c de2641a4763c78b872099649c12adedc638a83df0c41dcb0cb99efc6ceb5f69b
-F src/global.c a1a8d698762ddd9a1543aac26c1e0029b20fcc3fcb56bfa41ec8cea2368f2798
+F src/func.c 259496e4856bd0a3215d16804992f3339f3e8db29f129a5a7285c341488bbe9c
+F src/global.c bdd582ba2be6f29ffa5b9b91635c0dbea98101a25c92da15d1caca5ac999c7bb
 F src/hash.c 8d7dda241d0ebdafb6ffdeda3149a412d7df75102cecfc1021c98d6219823b19
 F src/hash.h 9d56a9079d523b648774c1784b74b89bd93fac7b365210157482e4319a468f38
 F src/hwtime.h cb1d7e3e1ed94b7aa6fde95ae2c2daccc3df826be26fc9ed7fd90d1750ae6144
@@ -492,7 +492,7 @@ F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71
 F src/insert.c 2cadbc8a81ea03f6cc1b629f6019192c9c5e6bcfaa8356e53511047f290cdd76
 F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa
 F src/loadext.c d74f5e7bd51f3c9d283442473eb65aef359664efd6513591c03f01881c4ae2da
-F src/main.c 868ae7db7a54fe859bf2ca8b7a4f24e9fa03a6134abfb7c9801d08411ef5dacb
+F src/main.c a76071a978b59055e63d4b5befa1efacc34e985984943251b300e682fee0e776
 F src/malloc.c 550021fcae36f0ffe9f8563d83e6385f9df307a854d55d7d0abb7241ee8dbcc6
 F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
 F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de
@@ -526,19 +526,19 @@ F src/pragma.h ec3b31eac9b1df040f1cc8cb3d89bc06605c3b4cb3d76f833de8d6d6c3f77f04
 F src/prepare.c 6049beb71385f017af6fc320d2c75a4e50b75e280c54232442b785fbb83df057
 F src/printf.c 9be6945837c839ba57837b4bc3af349eba630920fa5532aa518816defe42a7d4
 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384
-F src/resolve.c e231da7dd307f99772c40e76096abaf05c6fedcb4f1f045de23a61c194df6da6
+F src/resolve.c 17c74d7c180b50c703c404c1be7b80769536d9a1913fee4fc176cd95e445966b
 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93
 F src/select.c 2a753ec714703c32e4aade5b0115033bbee8a377b215cb0fbe88ab2fa4b3e028
-F src/shell.c.in 4a3a9e1c11847b1904f2b01d087af1c052f660902755abab457cab1756817ded
+F src/shell.c.in 36fb3732ee465f1a418add45aec616ecc5d936245c616be761f3b6ba7bb3661e
 F src/sqlite.h.in 51f69c62ba3e980aca1e39badcaf9ad13f008774fe1bb8e7f57e3e456c656670
 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
 F src/sqlite3ext.h 72af51aa4e912e14cd495fb6e7fac65f0940db80ed950d90911aff292cc47ce2
-F src/sqliteInt.h a7d75ef422e07c85eaeb12309b071f3342497d960bf0a353dca8665be6ceb576
+F src/sqliteInt.h e6db732b65fa526ceb75183fbb03cd4b00d4a7741485bcb0dc71222323f52166
 F src/sqliteLimit.h 1513bfb7b20378aa0041e7022d04acb73525de35b80b252f1b83fedb4de6a76b
 F src/status.c 46e7aec11f79dad50965a5ca5fa9de009f7d6bde08be2156f1538a0a296d4d0e
 F src/table.c b46ad567748f24a326d9de40e5b9659f96ffff34
 F src/tclsqlite.c 8cd2600e8de23dff6cdf84d39f46ca57139b061b28f6f80b166bace17d52ab1c
-F src/test1.c c654981c1d86ebc90dd23fcc0969e6c85e28112f0acc2e2224a97a2a33e7c42f
+F src/test1.c 4d0ab2f67053a4fff87d1d3586ecc0e5322a1fc45dd4119ab11dc96de44f17a1
 F src/test2.c 3efb99ab7f1fc8d154933e02ae1378bac9637da5
 F src/test3.c 61798bb0d38b915067a8c8e03f5a534b431181f802659a6616f9b4ff7d872644
 F src/test4.c 405834f6a93ec395cc4c9bb8ecebf7c3d8079e7ca16ae65e82d01afd229694bb
@@ -626,17 +626,17 @@ F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
 F test/aggnested.test 12106f0748e8e9bfc1a8e6840e203e051eae06a26ed13fc9fd5db108a8d6db54
 F test/alias.test 4529fbc152f190268a15f9384a5651bbbabc9d87
 F test/all.test 2ecb8bbd52416642e41c9081182a8df05d42c75637afd4488aace78cc4b69e13
-F test/alter.test 16ed8d2470193f34bc711e51506ff1211ebfab8025ca3b9510ff2aef139874cb
+F test/alter.test 77f0092d137dd9470fc683b64ed92868e188462e713e52f48deae8902ea60b96
 F test/alter2.test a966ccfcddf9ce0a4e0e6ff1aca9e6e7948e0e242cd7e43fc091948521807687
 F test/alter3.test 9351a9f0c59ff9dddecccaaa2f777ffee5369870c63d30d3a74add815254ec0f
 F test/alter4.test 74b22251c5e9c48093cfc4921ed9c11b59df84634aeeb00e501773320beb8424
 F test/alterauth.test 63442ba61ceb0c1eeb63aac1f4f5cebfa509d352276059d27106ae256bafc959
 F test/alterauth2.test c0a1ddf5b93d93cb0d15ba7acaf0c5c6fb515bbe861ede75b2d3fabad33b6499
-F test/altercol.test 54374d2ba18af25bb24e23acf18a60270d4ec120b7ec0558078b59d5aa1a31ad
+F test/altercol.test 1d6a6fe698b81e626baea4881f5717f9bc53d7d07f1cd23ee7ad1b931f117ddf
 F test/alterlegacy.test 82022721ce0de29cedc9a7af63bc9fcc078b0ee000f8283b4b6ea9c3eab2f44b
 F test/altermalloc.test 167a47de41b5c638f5f5c6efb59784002b196fff70f98d9b4ed3cd74a3fb80c9
 F test/altermalloc2.test fa7b1c1139ea39b8dec407cf1feb032ca8e0076bd429574969b619175ad0174b
-F test/altertab.test 4d8b79b0b88b62b90b710390df14fe99e0a3578345526886eaa550e28e3065dc
+F test/altertab.test bd61e5b73d495ec4707133db91b07f09d57e339d988de5ec5a76d34a2198e8f2
 F test/altertab2.test b0d62f323ca5dab42b0bc028c52e310ebdd13e655e8fac070fe622bad7852c2b
 F test/altertab3.test 155b8dc225ce484454a7fb4c8ba745680b6fa0fc3e08919cbbc19f9309d128ff
 F test/amatch1.test b5ae7065f042b7f4c1c922933f4700add50cdb9f
@@ -867,7 +867,7 @@ F test/filter2.tcl 44e525497ce07382915f01bd29ffd0fa49dab3adb87253b5e5103ba8f9339
 F test/filter2.test 485cf95d1f6d6ceee5632201ca52a71868599836f430cdee42e5f7f14666e30a
 F test/filterfault.test c08fb491d698e8df6c122c98f7db1c65ffcfcad2c1ab0e07fa8a5be1b34eaa8b
 F test/fkey1.test d11dbb8a93ead9b5c46ae5d02da016d61245d47662fb2d844c99214f6163f768
-F test/fkey2.test d35d1c81e7569bdd2b872e91750f7098117d2e8291369f70b7e3d50a0e523dc2
+F test/fkey2.test 65c86b11127c11f80c0f450b3480321e0f087edea3031b9daa1978e3c020c91b
 F test/fkey3.test 76d475c80b84ee7a5d062e56ccb6ea68882e2b49
 F test/fkey4.test 86446017011273aad8f9a99c1a65019e7bd9ca9d
 F test/fkey5.test 24dd28eb3d9f1b5a174f47e9899ace5facb08373a4223593c8c631e6cf9f7d5a
@@ -1740,7 +1740,7 @@ F test/with4.test 257be66c0c67fee1defbbac0f685c3465e2cad037f21ce65f23f86084f1982
 F test/withM.test 693b61765f2b387b5e3e24a4536e2e82de15ff64
 F test/without_rowid1.test 9cfb83705c506e3849fa7efc88a3c9a15f9a50bf9b1516b41757a7cef9bba8c3
 F test/without_rowid2.test af260339f79d13cb220288b67cd287fbcf81ad99
-F test/without_rowid3.test ea4b59dd1b0d7f5f5e4b7cca978cdb905752a9d7c57dc4344a591dba765a3691
+F test/without_rowid3.test 392e6e12f275d11d931a8bc4580e573342f391639c87ffb631010a7b3cedfdc0
 F test/without_rowid4.test 4e08bcbaee0399f35d58b5581881e7a6243d458a
 F test/without_rowid5.test 89b1c587bd92a0590e440da33e7666bf4891572a
 F test/without_rowid6.test 8463b20098e9f75a501a9f17dfb42fffc79068eac0b2775fe56ef2281d2df45e
@@ -1853,7 +1853,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 e3330861b4deab7c7cc09ad8b936d633c600b9fb4e274801efeaaf94e5c860b4
-R cfe1bf37072aa553a15293de91196bb1
+P 586a65a28fc6cac77309612abc32a2e1017c65e0387f9f438f5d8ac8406da8eb
+R 3b4f115c4445c4450469f73abe883b1d
 U drh
-Z 1739d48acd97cb5e3553660f1568a9b2
+Z 13c9af33d91ecf550a075017a4801480
index 82209644bd899d9e892495a22fe7e3307dd7e535..d2123d7daa6c450b1e180629d7224ab39e5e27c6 100644 (file)
@@ -1 +1 @@
-586a65a28fc6cac77309612abc32a2e1017c65e0387f9f438f5d8ac8406da8eb
\ No newline at end of file
+473892a8eceacf24d57fd0c72ff2a0b8be4e0d75e0af7a30bdb24fbc3b453601
\ No newline at end of file
index 629768f3a2d6ced085529fe748dcfc4ff80b483e..da7e4bc34906cc1fa9274efe844d7cc7db31e2fe 100644 (file)
@@ -3608,15 +3608,52 @@ static int exprCodeInlineFunction(
       break;
     }
 
-    case INLINEFUNC_unlikely: {   
+    default: {   
       /* The UNLIKELY() function is a no-op.  The result is the value
       ** of the first argument.
       */
-      assert( nFarg>=1 );
+      assert( nFarg==1 || nFarg==2 );
       target = sqlite3ExprCodeTarget(pParse, pFarg->a[0].pExpr, target);
       break;
     }
 
+  /***********************************************************************
+  ** Test-only SQL functions that are only usable if enabled
+  ** via SQLITE_TESTCTRL_INTERNAL_FUNCTIONS
+  */
+    case INLINEFUNC_expr_compare: {
+      /* Compare two expressions using sqlite3ExprCompare() */
+      assert( nFarg==2 );
+      sqlite3VdbeAddOp2(v, OP_Integer, 
+         sqlite3ExprCompare(0,pFarg->a[0].pExpr, pFarg->a[1].pExpr,-1),
+         target);
+      break;
+    }
+
+    case INLINEFUNC_expr_implies_expr: {
+      /* Compare two expressions using sqlite3ExprImpliesExpr() */
+      assert( nFarg==2 );
+      sqlite3VdbeAddOp2(v, OP_Integer, 
+         sqlite3ExprImpliesExpr(pParse,pFarg->a[0].pExpr, pFarg->a[1].pExpr,-1),
+         target);
+      break;
+    }
+
+    case INLINEFUNC_implies_nonnull_row: {
+      /* REsult of sqlite3ExprImpliesNonNullRow() */
+      Expr *pA1;
+      assert( nFarg==2 );
+      pA1 = pFarg->a[1].pExpr;
+      if( pA1->op==TK_COLUMN ){
+        sqlite3VdbeAddOp2(v, OP_Integer, 
+           sqlite3ExprImpliesNonNullRow(pFarg->a[0].pExpr,pA1->iTable),
+           target);
+      }else{
+        sqlite3VdbeAddOp2(v, OP_Null, 0, target);
+      }
+      break;
+    }
+
 #ifdef SQLITE_DEBUG
     case INLINEFUNC_affinity: {
       /* The AFFINITY() function evaluates to a string that describes
index 31b548ff93eb170b730a5368d7023453a2cb415d..be4975afcc98468624a926722aaa4fbe139e2dff 100644 (file)
@@ -1907,6 +1907,14 @@ void sqlite3RegisterBuiltinFunctions(void){
   ** For peak efficiency, put the most frequently used function last.
   */
   static FuncDef aBuiltinFunc[] = {
+/***** Functions only available with SQLITE_TESTCTRL_INTERNAL_FUNCTIONS *****/
+    TEST_FUNC(implies_nonnull_row, 2, INLINEFUNC_implies_nonnull_row, 0),
+    TEST_FUNC(expr_compare,        2, INLINEFUNC_expr_compare,        0),
+    TEST_FUNC(expr_implies_expr,   2, INLINEFUNC_expr_implies_expr,   0),
+#ifdef SQLITE_DEBUG
+    TEST_FUNC(affinity,          1, INLINEFUNC_affinity, 0),
+#endif
+/***** Regular functions *****/
 #ifdef SQLITE_SOUNDEX
     FUNCTION(soundex,            1, 0, 0, soundexFunc      ),
 #endif
@@ -1924,9 +1932,6 @@ void sqlite3RegisterBuiltinFunctions(void){
     INLINE_FUNC(unlikely,        1, INLINEFUNC_unlikely, SQLITE_FUNC_UNLIKELY),
     INLINE_FUNC(likelihood,      2, INLINEFUNC_unlikely, SQLITE_FUNC_UNLIKELY),
     INLINE_FUNC(likely,          1, INLINEFUNC_unlikely, SQLITE_FUNC_UNLIKELY),
-#ifdef SQLITE_DEBUG
-    TEST_FUNC(affinity,          1, INLINEFUNC_affinity, 0),
-#endif
 #ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC
     FUNCTION2(sqlite_offset,     1, 0, 0, noopFunc,  SQLITE_FUNC_OFFSET|
                                                      SQLITE_FUNC_TYPEOF),
index 4689e94bb4eca405472c5793e593f916cd2ae1f3..d8b3e1d31a745bc56abdb6cdef0abbbc71ed1aa6 100644 (file)
@@ -258,7 +258,6 @@ SQLITE_WSD struct Sqlite3Config sqlite3Config = {
    0,                         /* xTestCallback */
 #endif
    0,                         /* bLocaltimeFault */
-   0,                         /* bInternalFunctions */
    0x7ffffffe,                /* iOnceResetThreshold */
    SQLITE_DEFAULT_SORTERREF_SIZE,   /* szSorterRef */
    0,                         /* iPrngSeed */
index 1afeee0bdbda676e68faee76984c73dee7858ee4..880106a850a04701e2ada120b0353befc64677f4 100644 (file)
@@ -4044,15 +4044,14 @@ int sqlite3_test_control(int op, ...){
       break;
     }
 
-    /*   sqlite3_test_control(SQLITE_TESTCTRL_INTERNAL_FUNCS, int onoff);
+    /*   sqlite3_test_control(SQLITE_TESTCTRL_INTERNAL_FUNCTIONS, sqlite3*);
     **
-    ** If parameter onoff is non-zero, internal-use-only SQL functions
-    ** are visible to ordinary SQL.  This is useful for testing but is
-    ** unsafe because invalid parameters to those internal-use-only functions
-    ** can result in crashes or segfaults.
+    ** Toggle the ability to use internal functions on or off for
+    ** the database connection given in the argument.
     */
     case SQLITE_TESTCTRL_INTERNAL_FUNCTIONS: {
-      sqlite3GlobalConfig.bInternalFunctions = va_arg(ap, int);
+      sqlite3 *db = va_arg(ap, sqlite3*);
+      db->mDbFlags ^= DBFLAG_InternalFunc;
       break;
     }
 
index a0f9c0f22f2be6e7cf10aec0bd371bc294d3d5c3..ec082ba256bafc52b313f2c90fc1a3ec96005060 100644 (file)
@@ -874,7 +874,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
         }
         if( (pDef->funcFlags & SQLITE_FUNC_INTERNAL)!=0
          && pParse->nested==0
-         && sqlite3Config.bInternalFunctions==0
+         && (pParse->db->mDbFlags & DBFLAG_InternalFunc)==0
         ){
           /* Internal-use-only functions are disallowed unless the
           ** SQL is being compiled using sqlite3NestedParse() */
index e6b6f1a1b35bb7ad8a76c720fa88a761e2dd63dc..1143d5309ad46a5e804fe935e145f38fb8b99d66 100644 (file)
@@ -9219,7 +9219,7 @@ static int do_meta_command(char *zLine, ShellState *p){
       { "extra_schema_checks",SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS,"BOOLEAN"   },
     /*{ "fault_install",      SQLITE_TESTCTRL_FAULT_INSTALL, ""             },*/
       { "imposter",         SQLITE_TESTCTRL_IMPOSTER, "SCHEMA ON/OFF ROOTPAGE"},
-      { "internal_functions", SQLITE_TESTCTRL_INTERNAL_FUNCTIONS, "BOOLEAN"   },
+      { "internal_functions", SQLITE_TESTCTRL_INTERNAL_FUNCTIONS, "" },
       { "localtime_fault",    SQLITE_TESTCTRL_LOCALTIME_FAULT,"BOOLEAN"       },
       { "never_corrupt",      SQLITE_TESTCTRL_NEVER_CORRUPT, "BOOLEAN"        },
       { "optimizations",      SQLITE_TESTCTRL_OPTIMIZATIONS, "DISABLE-MASK"   },
@@ -9335,7 +9335,6 @@ static int do_meta_command(char *zLine, ShellState *p){
         /* sqlite3_test_control(int, int) */
         case SQLITE_TESTCTRL_ASSERT:
         case SQLITE_TESTCTRL_ALWAYS:
-        case SQLITE_TESTCTRL_INTERNAL_FUNCTIONS:
           if( nArg==3 ){
             int opt = booleanValue(azArg[2]);
             rc2 = sqlite3_test_control(testctrl, opt);
@@ -9353,6 +9352,11 @@ static int do_meta_command(char *zLine, ShellState *p){
           }
           break;
 
+        /* sqlite3_test_control(sqlite3*) */
+        case SQLITE_TESTCTRL_INTERNAL_FUNCTIONS:
+          rc2 = sqlite3_test_control(testctrl, p->db);
+          break;
+
         case SQLITE_TESTCTRL_IMPOSTER:
           if( nArg==5 ){
             rc2 = sqlite3_test_control(testctrl, p->db,
index d696ffd3a04c130cba54d53bd5f27e0635a96f8d..8090f77cc1c504e37774b2cfc06861a1337b6d36 100644 (file)
@@ -1589,6 +1589,7 @@ struct sqlite3 {
 #define DBFLAG_Vacuum         0x0004  /* Currently in a VACUUM */
 #define DBFLAG_VacuumInto     0x0008  /* Currently running VACUUM INTO */
 #define DBFLAG_SchemaKnownOk  0x0010  /* Schema is known to be valid */
+#define DBFLAG_InternalFunc   0x0020  /* Allow use of internal functions */
 
 /*
 ** Bits of the sqlite3.dbOptFlags field that are used by the
@@ -1721,9 +1722,12 @@ struct FuncDestructor {
 #define SQLITE_FUNC_INLINE   0x00200000 /* Functions implemented in-line */
 
 /* Identifier numbers for each in-line function */
-#define INLINEFUNC_unlikely       0      /* unlikely(EXPR) and friends */
-#define INLINEFUNC_coalesce       1      /* coalesce(EXPR,...) */
-#define INLINEFUNC_affinity       2      /* affinity(EXPR) */
+#define INLINEFUNC_coalesce             0
+#define INLINEFUNC_implies_nonnull_row  1
+#define INLINEFUNC_expr_implies_expr    2
+#define INLINEFUNC_expr_compare         3      
+#define INLINEFUNC_affinity             4
+#define INLINEFUNC_unlikely            99  /* Default case */
 
 /*
 ** The following three macros, FUNCTION(), LIKEFUNC() and AGGREGATE() are
@@ -3561,7 +3565,6 @@ struct Sqlite3Config {
   int (*xTestCallback)(int);        /* Invoked by sqlite3FaultSim() */
 #endif
   int bLocaltimeFault;              /* True to fail localtime() calls */
-  int bInternalFunctions;           /* Internal SQL functions are visible */
   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 */
index b6a39aad5e7e4c9cbbf80478780acbbd708aaa3d..5b07aef2d5016cae5cf109f1551c7abb391ac9b8 100644 (file)
@@ -6872,7 +6872,16 @@ static int SQLITE_TCLAPI test_test_control(
 
   iFlag = aVerb[iVerb].i;
   switch( iFlag ){
-    case SQLITE_TESTCTRL_INTERNAL_FUNCTIONS:
+    case SQLITE_TESTCTRL_INTERNAL_FUNCTIONS: {
+      sqlite3 *db = 0;
+      if( objc!=3 ){
+        Tcl_WrongNumArgs(interp, 2, objv, "DB");
+        return TCL_ERROR;
+      }
+      if( getDbPointer(interp, Tcl_GetString(objv[2]), &db) ) return TCL_ERROR;
+      sqlite3_test_control(SQLITE_TESTCTRL_INTERNAL_FUNCTIONS, db);
+      break;
+    }
     case SQLITE_TESTCTRL_LOCALTIME_FAULT: {
       int val;
       if( objc!=3 ){
index a82456d47bd784c01a922c7aac479cca6bf6619b..0ec485ef81cc1a4f194e6df4c7d202d35e84af41 100644 (file)
@@ -684,7 +684,7 @@ do_test alter-8.2 {
 # alter-9.X - Special test: Make sure the sqlite_rename_column() and
 # rename_table() functions do not crash when handed bad input.
 #
-sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 1
+sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS db
 do_test alter-9.1 {
   execsql {SELECT SQLITE_RENAME_COLUMN(0,0,0,0,0,0,0,0,0)}
 } {{}}
@@ -697,7 +697,7 @@ foreach {tn sql} {
     catch { execsql $sql }
   } 1
 }
-sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 0
+sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS db
 
 # If the INTERNAL_FUNCTIONS test-control is disabled (which is the default),
 # then the sqlite_rename_table() SQL function is not accessible to ordinary SQL.
index d71a9b06e42bf643cf1c0819ffbdf98dbcce10e0..1479b3a7d3fd91541737b2c99fd86308959344cb 100644 (file)
@@ -618,7 +618,7 @@ foreach {tn trigger error} {
 #-------------------------------------------------------------------------
 # Passing invalid parameters directly to sqlite_rename_column().
 #
-sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 1
+sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS db
 do_execsql_test 14.1 {
   CREATE TABLE ddd(sql, type, object, db, tbl, icol, znew, bquote);
   INSERT INTO ddd VALUES(
@@ -641,7 +641,7 @@ do_execsql_test 14.2 {
   sqlite_rename_column(sql, type, object, db, tbl, icol, znew, bquote, 0)
   FROM ddd;
 } {{} {} {} {}}
-sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 0
+sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS db
 
 # If the INTERNAL_FUNCTIONS test-control is disabled (which is the default)
 # then the sqlite_rename_table() SQL function is not accessible to
index 3f0398fd5e1ee32131fe11daa9d9365dc9b33115..7dcf8a5e0dfb2de1a7d254c7b01e7e63a3379abd 100644 (file)
@@ -240,13 +240,13 @@ ifcapable vtab {
     );
   } {}
   
-  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 1
+  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS db
   do_execsql_test 7.2 {
     SELECT 
     sqlite_rename_table(db, 0, 0, sql, zOld, zNew, bTemp)
     FROM ddd;
   } {{} {} {}}
-  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 0
+  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS db
 }
 
 #-------------------------------------------------------------------------
index 86316f293606a3c3c1dca4725d137a2f549fd0b9..e7fa7b6457287b3d93086fc173ec0f723138c154 100644 (file)
@@ -987,7 +987,7 @@ ifcapable altertable {
         'main', 'table', 't1', $zCreate, $zOld, $zNew, 0
     )}
   }
-  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 1
+  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS db
   do_test fkey2-14.2.1.1 {
     test_rename_parent {CREATE TABLE t1(a REFERENCES t2)} t2 t3
   } {{CREATE TABLE t1(a REFERENCES "t3")}}
@@ -997,7 +997,7 @@ ifcapable altertable {
   do_test fkey2-14.2.1.3 {
     test_rename_parent {CREATE TABLE t1(a REFERENCES "t2")} t2 t3
   } {{CREATE TABLE t1(a REFERENCES "t3")}}
-  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 0
+  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS db
   
   # Test ALTER TABLE RENAME TABLE a bit.
   #
@@ -1070,7 +1070,7 @@ ifcapable altertable {
     }
   } {{CREATE TABLE t2(a, b, c REFERENCES t1, d DEFAULT NULL REFERENCES t1, e REFERENCES t1 DEFAULT NULL, h DEFAULT 'text' REFERENCES t1)}}
 
-  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 1
+  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS db
   do_test fkey2-14.2tmp.1.1 {
     test_rename_parent {CREATE TABLE t1(a REFERENCES t2)} t2 t3
   } {{CREATE TABLE t1(a REFERENCES "t3")}}
@@ -1080,7 +1080,7 @@ ifcapable altertable {
   do_test fkey2-14.2tmp.1.3 {
     test_rename_parent {CREATE TABLE t1(a REFERENCES "t2")} t2 t3
   } {{CREATE TABLE t1(a REFERENCES "t3")}}
-  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 0
+  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS db
   
   # Test ALTER TABLE RENAME TABLE a bit.
   #
@@ -1154,7 +1154,7 @@ ifcapable altertable {
     }
   } {{CREATE TABLE t2(a, b, c REFERENCES t1, d DEFAULT NULL REFERENCES t1, e REFERENCES t1 DEFAULT NULL, h DEFAULT 'text' REFERENCES t1)}}
 
-  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 1
+  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS db
   do_test fkey2-14.2aux.1.1 {
     test_rename_parent {CREATE TABLE t1(a REFERENCES t2)} t2 t3
   } {{CREATE TABLE t1(a REFERENCES "t3")}}
@@ -1164,7 +1164,7 @@ ifcapable altertable {
   do_test fkey2-14.2aux.1.3 {
     test_rename_parent {CREATE TABLE t1(a REFERENCES "t2")} t2 t3
   } {{CREATE TABLE t1(a REFERENCES "t3")}}
-  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 0
+  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS db
   
   # Test ALTER TABLE RENAME TABLE a bit.
   #
index b895f06cf3668bc38a6bd738c0d90c462e38233a..24ef2304de379f0ad95085ca09f4fe95759d366a 100644 (file)
@@ -953,7 +953,7 @@ ifcapable altertable {
         'main', 'table', 't1', $zCreate, $zOld, $zNew, 0
     )}
   }
-  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 1
+  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS db
   do_test without_rowid3-14.2.1.1 {
     test_rename_parent {CREATE TABLE t1(a REFERENCES t2)} t2 t3
   } {{CREATE TABLE t1(a REFERENCES "t3")}}
@@ -963,7 +963,7 @@ ifcapable altertable {
   do_test without_rowid3-14.2.1.3 {
     test_rename_parent {CREATE TABLE t1(a REFERENCES "t2")} t2 t3
   } {{CREATE TABLE t1(a REFERENCES "t3")}}
-  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 0
+  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS db
   
   # Test ALTER TABLE RENAME TABLE a bit.
   #
@@ -1039,7 +1039,7 @@ ifcapable altertable {
     }
   } {{CREATE TABLE t2(a, b, c REFERENCES t1, d DEFAULT NULL REFERENCES t1, e REFERENCES t1 DEFAULT NULL, h DEFAULT 'text' REFERENCES t1)}}
 
-  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 1
+  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS db
   do_test without_rowid3-14.2tmp.1.1 {
     test_rename_parent {CREATE TABLE t1(a REFERENCES t2)} t2 t3
   } {{CREATE TABLE t1(a REFERENCES "t3")}}
@@ -1049,7 +1049,7 @@ ifcapable altertable {
   do_test without_rowid3-14.2tmp.1.3 {
     test_rename_parent {CREATE TABLE t1(a REFERENCES "t2")} t2 t3
   } {{CREATE TABLE t1(a REFERENCES "t3")}}
-  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 0
+  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS db
   
   # Test ALTER TABLE RENAME TABLE a bit.
   #
@@ -1126,7 +1126,7 @@ ifcapable altertable {
     }
   } {{CREATE TABLE t2(a, b, c REFERENCES t1, d DEFAULT NULL REFERENCES t1, e REFERENCES t1 DEFAULT NULL, h DEFAULT 'text' REFERENCES t1)}}
 
-  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 1
+  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS db
   do_test without_rowid3-14.2aux.1.1 {
     test_rename_parent {CREATE TABLE t1(a REFERENCES t2)} t2 t3
   } {{CREATE TABLE t1(a REFERENCES "t3")}}
@@ -1136,7 +1136,7 @@ ifcapable altertable {
   do_test without_rowid3-14.2aux.1.3 {
     test_rename_parent {CREATE TABLE t1(a REFERENCES "t2")} t2 t3
   } {{CREATE TABLE t1(a REFERENCES "t3")}}
-  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 0
+  sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS db
   
   # Test ALTER TABLE RENAME TABLE a bit.
   #