]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add the SQLITE_LIKE_DOESNT_MATCH_BLOBS compile-time option.
authordrh <drh@noemail.net>
Tue, 1 Dec 2015 21:23:07 +0000 (21:23 +0000)
committerdrh <drh@noemail.net>
Tue, 1 Dec 2015 21:23:07 +0000 (21:23 +0000)
FossilOrigin-Name: 9e1d6d4c391ff90077f0d1cdeb567969fee9f747

14 files changed:
manifest
manifest.uuid
src/ctime.c
src/func.c
src/test_config.c
src/vdbe.c
src/where.c
src/whereInt.h
src/wherecode.c
test/analyze3.test
test/enc3.test
test/like.test
test/like3.test
test/where8.test

index 25c8979c2934b3bac5dad6f139cdaf85f3093a94..1171656df0b0c65472012123dcdf3d049b7a1d83 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C The\stest_fs.c\stest\smodule\snow\sworks\son\sWindows.
-D 2015-12-01T17:48:45.370
+C Add\sthe\sSQLITE_LIKE_DOESNT_MATCH_BLOBS\scompile-time\soption.
+D 2015-12-01T21:23:07.560
 F Makefile.in 23d9a63484a383fc64951b25ef44067930f98dc6
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc e8fdca1cb89a1b58b5f4d3a130ea9a3d28cb314d
@@ -288,14 +288,14 @@ F src/btreeInt.h 3ab435ed27adea54d040584b0bcc488ee7db1e38
 F src/build.c e83da4d004a4e050c01acbb821ff7a7b1019c29b
 F src/callback.c 7b44ce59674338ad48b0e84e7b72f935ea4f68b0
 F src/complete.c addcd8160b081131005d5bc2d34adf20c1c5c92f
-F src/ctime.c 509ef9c64d1321f42448f111da86400b1799218a
+F src/ctime.c 58eda76364fb6f374e044aa4493219b13abf9400
 F src/date.c fb1c99172017dcc8e237339132c91a21a0788584
 F src/dbstat.c ffd63fc8ba7541476ced189b95e95d7f2bc63f78
 F src/delete.c 00af9f08a15ddc5cba5962d3d3e5bf2d67b2e7da
 F src/expr.c cb1a419508e5b27769a91e00e36e94724e7b1d51
 F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
 F src/fkey.c 31900763094a3736a5fc887469202eb579fef2d0
-F src/func.c 5790a898a0c53e6787020ec268425d415e7e03c9
+F src/func.c fe50a9ab977acc0bb0fcd46741e0071fa388888e
 F src/global.c 508e4087f7b41d688e4762dcf4d4fe28cfbc87f9
 F src/hash.c 4263fbc955f26c2e8cdc0cf214bc42435aa4e4f5
 F src/hash.h c8f3c31722cf3277d03713909761e152a5b81094
@@ -363,7 +363,7 @@ F src/test_autoext.c dea8a01a7153b9adc97bd26161e4226329546e12
 F src/test_backup.c 2e6e6a081870150f20c526a2e9d0d29cda47d803
 F src/test_blob.c e5a7a81d61a780da79101aeb1e60d300af169e07
 F src/test_btree.c 2e9978eca99a9a4bfa8cae949efb00886860a64f
-F src/test_config.c f2824de39f59d8d621e2d6ec5cc67006d000b2eb
+F src/test_config.c 48850687dd5abc8260e23835632511054ccae172
 F src/test_demovfs.c 0de72c2c89551629f58486fde5734b7d90758852
 F src/test_devsym.c e7498904e72ba7491d142d5c83b476c4e76993bc
 F src/test_fs.c aab47ac456316502faa265daadf9ac832fea12b9
@@ -404,7 +404,7 @@ F src/update.c 17332f9fe818cbc0444c36a811800af8498af4c3
 F src/utf.c fc6b889ba0779b7722634cdeaa25f1930d93820c
 F src/util.c e802e8e311a0d6c48cd1b3e89db164f6f0248d70
 F src/vacuum.c 2ddd5cad2a7b9cef7f9e431b8c7771634c6b1701
-F src/vdbe.c b56b2fc9b2f2d0a99d1dbd02d47efaacec253a4c
+F src/vdbe.c 4d75375fa8bf911aa76ab8383d6f7eea0dec0fda
 F src/vdbe.h efb7a8c1459e31f3ea4377824c6a7e4cb5068637
 F src/vdbeInt.h 75c2e82ee3357e9210c06474f8d9bdf12c81105d
 F src/vdbeapi.c 020681b943e77766b32ae1cddf86d7831b7374ca
@@ -418,9 +418,9 @@ F src/vxworks.h c18586c8edc1bddbc15c004fa16aeb1e1342b4fb
 F src/wal.c 18b0ed49830cf04fe2d68224b41838a73ac6cd24
 F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
 F src/walker.c 2e14d17f592d176b6dc879c33fbdec4fbccaa2ba
-F src/where.c 9c04982ba9ecfc7751c670ed5a3bddc81d7eb74c
-F src/whereInt.h 6afc0d70cf6213e58e8fbe10b6e50d1aa16f122f
-F src/wherecode.c 4c96182e7b25e4be54008dee2da5b9c2f8480b9b
+F src/where.c b18edbb9e5afabb77f4f27550c471c5c824e0fe7
+F src/whereInt.h e20801d89e34de1912bb6a3babb30c390da27add
+F src/wherecode.c dfbfe198e418b01f208b489e088edd230c91a4e7
 F src/whereexpr.c eebba8340c90de73b3d3bbe8c43b84559b8e6e2c
 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
 F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd
@@ -435,7 +435,7 @@ F test/alter4.test c461150723ac957f3b2214aa0b11552cd72023ec
 F test/altermalloc.test e81ac9657ed25c6c5bb09bebfa5a047cd8e4acfc
 F test/amatch1.test b5ae7065f042b7f4c1c922933f4700add50cdb9f
 F test/analyze.test 3eb35a4af972f98422e5dc0586501b17d103d321
-F test/analyze3.test 0f0ee6135b293a0e5af471a8423b80b688469d71
+F test/analyze3.test 1dccda46a6c374018af617fba00bfe297a61d442
 F test/analyze4.test eff2df19b8dd84529966420f29ea52edc6b56213
 F test/analyze5.test 765c4e284aa69ca172772aa940946f55629bc8c4
 F test/analyze6.test f1c552ce39cca4ec922a7e4e0e5d0203d6b3281f
@@ -610,7 +610,7 @@ F test/e_walckpt.test 65e29b6631e51f210f83e4ff11571e647ba93608
 F test/e_walhook.test da3ea8b3483d1af72190337bda50155a91a4b664
 F test/enc.test e54531cd6bf941ee6760be041dff19a104c7acea
 F test/enc2.test 83437a79ba1545a55fb549309175c683fb334473
-F test/enc3.test 90683ad0e6ea587b9d5542ca93568af9a9858c40
+F test/enc3.test 6807f7a7740a00361ca8d0ccd66bc60c8dc5f2b6
 F test/enc4.test c8f1ce3618508fd0909945beb8b8831feef2c020
 F test/eqp.test 85873fa5816c48915c82c4e74cb5c35a5b48160f
 F test/errmsg.test f31592a594b44ee121371d25ddd5d63497bb3401
@@ -829,9 +829,9 @@ F test/json102.test bf3fe7a706d30936a76a0f7a0375e1e8e73aff5a
 F test/keyword1.test 37ef6bba5d2ed5b07ecdd6810571de2956599dff
 F test/lastinsert.test 42e948fd6442f07d60acbd15d33fb86473e0ef63
 F test/laststmtchanges.test ae613f53819206b3222771828d024154d51db200
-F test/like.test 4f2a71d36a536233727f71995fef900756705e56
+F test/like.test edcf6d0a055816fd793eab92454597c1be91f720
 F test/like2.test 3b2ee13149ba4a8a60b59756f4e5d345573852da
-F test/like3.test 7b0525a39e4f25c4fd113de7e2e28eb712dcdedf
+F test/like3.test 3608a2042b6f922f900fbfd5d3ce4e7eca57f7c4
 F test/limit.test 0c99a27a87b14c646a9d583c7c89fd06c352663e
 F test/loadext.test 648cb95f324d1775c54a55c12271b2d1156b633b
 F test/loadext2.test 0408380b57adca04004247179837a18e866a74f7
@@ -1315,7 +1315,7 @@ F test/where4.test 4a371bfcc607f41d233701bdec33ac2972908ba8
 F test/where5.test fdf66f96d29a064b63eb543e28da4dfdccd81ad2
 F test/where6.test 5da5a98cec820d488e82708301b96cb8c18a258b
 F test/where7.test 5a4b0abc207d71da4deecd734ad8579e8dd40aa8
-F test/where8.test 2eafe74e01cc10355985874e1ff868ac03dbae5e
+F test/where8.test 98eedca0d375fb400b8377269c4b4686582dfb45
 F test/where8m.test da346596e19d54f0aba35ebade032a7c47d79739
 F test/where9.test 729c3ba9b47e8f9f1aab96bae7dad2a524f1d1a2
 F test/whereA.test 4d253178d135ec46d1671e440cd8f2b916aa6e6b
@@ -1408,8 +1408,7 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 9eefa449792f03c4c149edcbc6b9b7692617994c f3ffb3aeea95712e92919fd5071741327add9643
-R e64b655038c6ea5e388ada04c5bc3077
-T +closed f3ffb3aeea95712e92919fd5071741327add9643
+P e3d8628456848a70035bbdeca6dc6c21f688b9a5
+R ee2257e707ea5c58e9d484a1c772cd3c
 U drh
-Z d6f52c287ea9591be795be1577b20991
+Z b3c4a1b23e3be107d1964e5242f6524b
index e2f8fb6ba3200516eb0c076823d3a58334e56db7..b0e59d95bbc2f2b81b6bd1b1b28be0a1cdd3233c 100644 (file)
@@ -1 +1 @@
-e3d8628456848a70035bbdeca6dc6c21f688b9a5
\ No newline at end of file
+9e1d6d4c391ff90077f0d1cdeb567969fee9f747
\ No newline at end of file
index 17dd710bc337b6d30df2692d20644680dab690e9..c3149ad9133313a594d6e8f96355e102b62bd1e3 100644 (file)
@@ -158,6 +158,9 @@ static const char * const azCompileOpt[] = {
 #ifdef SQLITE_INT64_TYPE
   "INT64_TYPE",
 #endif
+#ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS
+  "LIKE_DOESNT_MATCH_BLOBS",
+#endif
 #if SQLITE_LOCK_TRACE
   "LOCK_TRACE",
 #endif
index b134c1a7c247606f61ce48f6ca461055cf148ed6..3fbd2b736bb9ca6a706d4862132a4952227f0237 100644 (file)
@@ -802,6 +802,17 @@ static void likeFunc(
   int nPat;
   sqlite3 *db = sqlite3_context_db_handle(context);
 
+#ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS
+  if( sqlite3_value_type(argv[0])==SQLITE_BLOB
+   || sqlite3_value_type(argv[1])==SQLITE_BLOB
+  ){
+#ifdef SQLITE_TEST
+    sqlite3_like_count++;
+#endif
+    sqlite3_result_int(context, 0);
+    return;
+  }
+#endif
   zB = sqlite3_value_text(argv[0]);
   zA = sqlite3_value_text(argv[1]);
 
index b84424bbdca70e4a5cde3b1855b0b7bc38afcba2..a9ef182e027ce62d9f261fa6dbc425dbe65400a9 100644 (file)
@@ -185,6 +185,12 @@ static void set_options(Tcl_Interp *interp){
   Tcl_SetVar2(interp, "sqlite_options", "json1", "0", TCL_GLOBAL_ONLY);
 #endif
 
+#ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS
+  Tcl_SetVar2(interp, "sqlite_options", "like_match_blobs", "0", TCL_GLOBAL_ONLY);
+#else
+  Tcl_SetVar2(interp, "sqlite_options", "like_match_blobs", "1", TCL_GLOBAL_ONLY);
+#endif
+
 #ifdef SQLITE_OMIT_ATTACH
   Tcl_SetVar2(interp, "sqlite_options", "attach", "0", TCL_GLOBAL_ONLY);
 #else
index 66b507b2856799492e41e1401304b1163e2951f3..f87fddafed9aceb6da84ec53e57797d4f5b9181e 100644 (file)
@@ -1088,6 +1088,7 @@ case OP_String: {          /* out2 */
   pOut->n = pOp->p1;
   pOut->enc = encoding;
   UPDATE_MAX_BLOBSIZE(pOut);
+#ifndef SQLITE_LIKE_DOESNT_MATCH_BLOBS
   if( pOp->p5 ){
     assert( pOp->p3>0 );
     assert( pOp->p3<=(p->nMem-p->nCursor) );
@@ -1095,6 +1096,7 @@ case OP_String: {          /* out2 */
     assert( pIn3->flags & MEM_Int );
     if( pIn3->u.i ) pOut->flags = MEM_Blob|MEM_Static|MEM_Term;
   }
+#endif
   break;
 }
 
index 30ad58e01b66f2ea9b49a10efbdee948b66a2c0f..7d686645987234f5a7ada3227d9efd85fc8cd958 100644 (file)
@@ -4492,6 +4492,7 @@ void sqlite3WhereEnd(WhereInfo *pWInfo){
       sqlite3VdbeJumpHere(v, pLevel->addrSkip);
       sqlite3VdbeJumpHere(v, pLevel->addrSkip-2);
     }
+#ifndef SQLITE_LIKE_DOESNT_MATCH_BLOBS
     if( pLevel->addrLikeRep ){
       int op;
       if( sqlite3VdbeGetOp(v, pLevel->addrLikeRep-1)->p1 ){
@@ -4502,6 +4503,7 @@ void sqlite3WhereEnd(WhereInfo *pWInfo){
       sqlite3VdbeAddOp2(v, op, pLevel->iLikeRepCntr, pLevel->addrLikeRep);
       VdbeCoverage(v);
     }
+#endif
     if( pLevel->iLeftJoin ){
       addr = sqlite3VdbeAddOp1(v, OP_IfPos, pLevel->iLeftJoin); VdbeCoverage(v);
       assert( (pLoop->wsFlags & WHERE_IDX_ONLY)==0
index 86164d8c1f66f5ea68b23556199b7b404797a03a..63d2d71cb48cbc2584f7252c333d22a5aac2af5c 100644 (file)
@@ -69,8 +69,10 @@ struct WhereLevel {
   int addrCont;         /* Jump here to continue with the next loop cycle */
   int addrFirst;        /* First instruction of interior of the loop */
   int addrBody;         /* Beginning of the body of this loop */
+#ifndef SQLITE_LIKE_DOESNT_MATCH_BLOBS
   int iLikeRepCntr;     /* LIKE range processing counter register */
   int addrLikeRep;      /* LIKE range processing address */
+#endif
   u8 iFrom;             /* Which entry in the FROM clause */
   u8 op, p3, p5;        /* Opcode, P3 & P5 of the opcode that ends the loop */
   int p1, p2;           /* Operands of the opcode used to ends the loop */
index 87db0e0a2575faf3b7f991d05a043152b21990ea..bc72e0ac7d2819e416d7866fa16b6fa99ce7d802 100644 (file)
@@ -561,6 +561,7 @@ static int codeAllEqualityTerms(
   return regBase;
 }
 
+#ifndef SQLITE_LIKE_DOESNT_MATCH_BLOBS
 /*
 ** If the most recently coded instruction is a constant range contraint
 ** that originated from the LIKE optimization, then change the P3 to be
@@ -572,6 +573,10 @@ static int codeAllEqualityTerms(
 ** The OP_String opcodes on the second pass convert the upper and lower
 ** bound string contants to blobs.  This routine makes the necessary changes
 ** to the OP_String opcodes for that to happen.
+**
+** Except, of course, if SQLITE_LIKE_DOESNT_MATCH_BLOBS is defined, then
+** only the one pass through the string space is required, so this routine
+** becomes a no-op.
 */
 static void whereLikeOptimizationStringFixup(
   Vdbe *v,                /* prepared statement under construction */
@@ -589,6 +594,9 @@ static void whereLikeOptimizationStringFixup(
     pOp->p5 = 1;
   }
 }
+#else
+# define whereLikeOptimizationStringFixup(A,B,C)
+#endif
 
 #ifdef SQLITE_ENABLE_CURSOR_HINTS
 /*
@@ -1075,6 +1083,7 @@ Bitmask sqlite3WhereCodeOneLoopStart(
     if( pLoop->wsFlags & WHERE_TOP_LIMIT ){
       pRangeEnd = pLoop->aLTerm[j++];
       nExtraReg = 1;
+#ifndef SQLITE_LIKE_DOESNT_MATCH_BLOBS
       if( (pRangeEnd->wtFlags & TERM_LIKEOPT)!=0 ){
         assert( pRangeStart!=0 );                     /* LIKE opt constraints */
         assert( pRangeStart->wtFlags & TERM_LIKEOPT );   /* occur in pairs */
@@ -1087,6 +1096,7 @@ Bitmask sqlite3WhereCodeOneLoopStart(
         VdbeComment((v, "LIKE loop counter"));
         pLevel->addrLikeRep = sqlite3VdbeCurrentAddr(v);
       }
+#endif
       if( pRangeStart==0
        && (j = pIdx->aiColumn[nEq])>=0 
        && pIdx->pTable->aCol[j].notNull==0
@@ -1590,9 +1600,13 @@ Bitmask sqlite3WhereCodeOneLoopStart(
       continue;
     }
     if( pTerm->wtFlags & TERM_LIKECOND ){
+#ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS
+      continue;
+#else
       assert( pLevel->iLikeRepCntr>0 );
       skipLikeAddr = sqlite3VdbeAddOp1(v, OP_IfNot, pLevel->iLikeRepCntr);
       VdbeCoverage(v);
+#endif
     }
     sqlite3ExprIfFalse(pParse, pE, addrCont, SQLITE_JUMPIFNULL);
     if( skipLikeAddr ) sqlite3VdbeJumpHere(v, skipLikeAddr);
index d61d21a9474b0d996b193b8075271271d26328fc..2fb558d16a285708f13185c21bc27aff19930546 100644 (file)
@@ -283,9 +283,17 @@ do_eqp_test analyze3-2.3 {
   SELECT count(a) FROM t1 WHERE b LIKE '%a'
 } {0 0 0 {SCAN TABLE t1}}
 
+# Return the first argument if like_match_blobs is true (the default)
+# or the second argument if not
+#
+proc ilmb {a b} {
+  ifcapable like_match_blobs {return $a}
+  return $b
+}
+
 do_test analyze3-2.4 {
   sf_execsql { SELECT count(*) FROM t1 WHERE b LIKE 'a%' }
-} {102 0 100}
+} [list [ilmb 102 101] 0 100]
 do_test analyze3-2.5 {
   sf_execsql { SELECT count(*) FROM t1 WHERE b LIKE '%a' }
 } {999 999 100}
@@ -293,7 +301,7 @@ do_test analyze3-2.5 {
 do_test analyze3-2.6 {
   set like "a%"
   sf_execsql { SELECT count(*) FROM t1 WHERE b LIKE $like }
-} {102 0 100}
+} [list [ilmb 102 101] 0 100]
 do_test analyze3-2.7 {
   set like "%a"
   sf_execsql { SELECT count(*) FROM t1 WHERE b LIKE $like }
@@ -301,19 +309,19 @@ do_test analyze3-2.7 {
 do_test analyze3-2.8 {
   set like "a"
   sf_execsql { SELECT count(*) FROM t1 WHERE b LIKE $like }
-} {102 0 0}
+} [list [ilmb 102 101] 0 0]
 do_test analyze3-2.9 {
   set like "ab"
   sf_execsql { SELECT count(*) FROM t1 WHERE b LIKE $like }
-} {12 0 0}
+} [list [ilmb 12 11] 0 0]
 do_test analyze3-2.10 {
   set like "abc"
   sf_execsql { SELECT count(*) FROM t1 WHERE b LIKE $like }
-} {3 0 1}
+} [list [ilmb 3 2] 0 1]
 do_test analyze3-2.11 {
   set like "a_c"
   sf_execsql { SELECT count(*) FROM t1 WHERE b LIKE $like }
-} {102 0 10}
+} [list [ilmb 102 101] 0 10]
 
 
 #-------------------------------------------------------------------------
index 1d8a258165217c370934fbc04063803fa9827892..7ede2b716f427d83ecaf5d2dac84f6347f9ff16d 100644 (file)
@@ -62,7 +62,7 @@ ifcapable {bloblit && utf16} {
     execsql {
       CREATE TABLE t2(a);
       INSERT INTO t2 VALUES(x'61006200630064006500');
-      SELECT CAST(a AS text) FROM t2 WHERE a LIKE 'abc%';
+      SELECT CAST(a AS text) FROM t2 WHERE CAST(a AS text) LIKE 'abc%';
     }
   } {abcde}
   do_test enc3-2.3 {
@@ -72,7 +72,8 @@ ifcapable {bloblit && utf16} {
   } {abcde}
   do_test enc3-2.4 {
     execsql {
-      SELECT rowid FROM t2 WHERE a LIKE x'610062002500';
+      SELECT rowid FROM t2
+       WHERE CAST(a AS text) LIKE CAST(x'610062002500' AS text);
     }
   } {1}
 }
index 18a01dc9967e50108d14e6c6cdd703b611976345..ceb5f2bfaca67caabc1c24cdb6c28d7bdbc2ebeb 100644 (file)
@@ -745,11 +745,19 @@ ifcapable like_opt&&!icu {
       SELECT a FROM t10 WHERE e LIKE '12%' ORDER BY +a;
     }
   } {12 123 scan 5 like 6}
-  do_test like-10.5 {
-    count {
-      SELECT a FROM t10 WHERE f LIKE '12%' ORDER BY +a;
-    }
-  } {12 123 scan 4 like 0}
+  ifcapable like_match_blobs {
+    do_test like-10.5a {
+      count {
+        SELECT a FROM t10 WHERE f LIKE '12%' ORDER BY +a;
+      }
+    } {12 123 scan 4 like 0}
+  } else {
+    do_test like-10.5b {
+      count {
+        SELECT a FROM t10 WHERE f LIKE '12%' ORDER BY +a;
+      }
+    } {12 123 scan 3 like 0}
+  }
   do_test like-10.6 {
     count {
       SELECT a FROM t10 WHERE a LIKE '12%' ORDER BY +a;
@@ -786,11 +794,19 @@ ifcapable like_opt&&!icu {
       SELECT a FROM t10b WHERE e GLOB '12*' ORDER BY +a;
     }
   } {12 123 scan 5 like 6}
-  do_test like-10.14 {
-    count {
-      SELECT a FROM t10b WHERE f GLOB '12*' ORDER BY +a;
-    }
-  } {12 123 scan 4 like 0}
+  ifcapable like_match_blobs {
+    do_test like-10.14 {
+      count {
+        SELECT a FROM t10b WHERE f GLOB '12*' ORDER BY +a;
+      }
+    } {12 123 scan 4 like 0}
+  } else {
+    do_test like-10.14 {
+      count {
+        SELECT a FROM t10b WHERE f GLOB '12*' ORDER BY +a;
+      }
+    } {12 123 scan 3 like 0}
+  }
   do_test like-10.15 {
     count {
       SELECT a FROM t10b WHERE a GLOB '12*' ORDER BY +a;
index a1faf769150ca021dbde56b29c2da2d10bd4f6c7..9280c2c5d2d1c72e6082cbc9b38be3d29b71c8fb 100644 (file)
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
 
+ifcapable !like_match_blobs {
+  finish_test
+  return
+}
+
 do_execsql_test like3-1.1 {
   PRAGMA encoding=UTF8;
   CREATE TABLE t1(a,b TEXT COLLATE nocase);
@@ -107,6 +112,4 @@ do_execsql_test like3-4.2ck {
   SELECT quote(x) FROM t4 WHERE x LIKE 'ab%' ORDER BY +x ASC;
 } {'abc' 'abd' 'abe' X'616263' X'616264' X'616265'}
 
-
-
 finish_test
index a155a95ab222dcd1e6f0f1e2f69314d3802c014d..38214bc895d3877989e6d64e2192e96f859be9c5 100644 (file)
@@ -64,13 +64,21 @@ do_test where8-1.3 {
   execsql_status2 { SELECT c FROM t1 WHERE a > 8 OR b = 'two' }
 } {IX X II 0 0 6}
 
-do_test where8-1.4 { 
-  execsql_status2 { SELECT c FROM t1 WHERE a > 8 OR b GLOB 't*' }
-} {IX X III II 0 0 10}
-
-do_test where8-1.5 { 
-  execsql_status2 { SELECT c FROM t1 WHERE a > 8 OR b GLOB 'f*' }
-} {IX X V IV 0 0 10}
+ifcapable like_match_blobs {
+  do_test where8-1.4a { 
+    execsql_status2 { SELECT c FROM t1 WHERE a > 8 OR b GLOB 't*' }
+  } {IX X III II 0 0 10}
+  do_test where8-1.5a { 
+    execsql_status2 { SELECT c FROM t1 WHERE a > 8 OR b GLOB 'f*' }
+  } {IX X V IV 0 0 10}
+} else {
+  do_test where8-1.4b { 
+    execsql_status2 { SELECT c FROM t1 WHERE a > 8 OR b GLOB 't*' }
+  } {IX X III II 0 0 9}
+  do_test where8-1.5 { 
+    execsql_status2 { SELECT c FROM t1 WHERE a > 8 OR b GLOB 'f*' }
+  } {IX X V IV 0 0 9}
+}
 
 do_test where8-1.6 { 
   execsql_status { SELECT c FROM t1 WHERE a = 1 OR b = 'three' ORDER BY rowid }