Add the "queryplanner" test permutation. Continuing refinements to NGQP.
FossilOrigin-Name: 25e2cde105a19293bdb9c001b48624e5d7f8c4e5
This commit is contained in:
parent
e217efc822
commit
fd5874d23d
20
manifest
20
manifest
@ -1,5 +1,5 @@
|
||||
C Continue\srefining\sthe\sNGQP
|
||||
D 2013-06-12T03:48:41.127
|
||||
C Add\sthe\s"queryplanner"\stest\spermutation.\s\sContinuing\srefinements\sto\sNGQP.
|
||||
D 2013-06-12T14:52:39.194
|
||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||
F Makefile.in 5e41da95d92656a5004b03d3576e8b226858a28e
|
||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||
@ -289,7 +289,7 @@ F src/vtab.c b05e5f1f4902461ba9f5fc49bb7eb7c3a0741a83
|
||||
F src/wal.c 436bfceb141b9423c45119e68e444358ee0ed35d
|
||||
F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
|
||||
F src/walker.c 4fa43583d0a84b48f93b1e88f11adf2065be4e73
|
||||
F src/where.c 3f38f769ef1365d7c8ff5b0ae9341b32f49bf46e
|
||||
F src/where.c 67d70ce776aae6e81eddc182357bd5542dc9e023
|
||||
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
||||
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
|
||||
F test/aggnested.test 45c0201e28045ad38a530b5a144b73cd4aa2cfd6
|
||||
@ -707,7 +707,7 @@ F test/pagesize.test 1dd51367e752e742f58e861e65ed7390603827a0
|
||||
F test/pcache.test 065aa286e722ab24f2e51792c1f093bf60656b16
|
||||
F test/pcache2.test a83efe2dec0d392f814bfc998def1d1833942025
|
||||
F test/percentile.test 4614301e38398df7fdd5f28f4ed8f272b328251b
|
||||
F test/permutations.test d997a947ab8aabb15f763d50a030b3c11e8ef1b6
|
||||
F test/permutations.test 2ab3937fdd34e18712be8f4159ac354c4d27ce1d
|
||||
F test/pragma.test 5e7de6c32a5d764f09437d2025f07e4917b9e178
|
||||
F test/pragma2.test 3a55f82b954242c642f8342b17dffc8b47472947
|
||||
F test/printf.test ec9870c4dce8686a37818e0bf1aba6e6a1863552
|
||||
@ -1036,15 +1036,15 @@ F test/where4.test e9b9e2f2f98f00379e6031db6a6fca29bae782a2
|
||||
F test/where5.test fdf66f96d29a064b63eb543e28da4dfdccd81ad2
|
||||
F test/where6.test 5da5a98cec820d488e82708301b96cb8c18a258b
|
||||
F test/where7.test e0741d85b6069effe53c6ed7682e18aa078f4b11
|
||||
F test/where8.test d6a283eb7348a8967d44e2a753f117ab0d21d4f3
|
||||
F test/where8.test f6b9559723564a042927ee0f22003ac9bed71b21
|
||||
F test/where8m.test da346596e19d54f0aba35ebade032a7c47d79739
|
||||
F test/where9.test 4094299aea1c5a1ebe172ad832c2467cba23133a
|
||||
F test/where9.test f5752185fc19a1ee826a2386a249f05dbc25979b
|
||||
F test/whereA.test 24c234263c8fe358f079d5e57d884fb569d2da0a
|
||||
F test/whereB.test 0def95db3bdec220a731c7e4bec5930327c1d8c5
|
||||
F test/whereC.test d6f4ecd4fa2d9429681a5b22a25d2bda8e86ab8a
|
||||
F test/whereD.test 6c2feb79ef1f68381b07f39017fe5f9b96da8d62
|
||||
F test/whereE.test b3a055eef928c992b0a33198a7b8dc10eea5ad2f
|
||||
F test/whereF.test a0e296643cabe5278379bc1a0aa158cf3c54a1c9
|
||||
F test/whereF.test 136a7301512d72a08a272806c8767066311b7bc1
|
||||
F test/wherelimit.test 5e9fd41e79bb2b2d588ed999d641d9c965619b31
|
||||
F test/win32lock.test 7a6bd73a5dcdee39b5bb93e92395e1773a194361
|
||||
F test/zeroblob.test caaecfb4f908f7bc086ed238668049f96774d688
|
||||
@ -1095,7 +1095,7 @@ F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||
F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
|
||||
F tool/wherecosttest.c 4d0393bdbe7230adb712e925863744dd2b7ffc5b
|
||||
F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac
|
||||
P ba897100fed291d2025f68d09334f9985312298b
|
||||
R 5ed376a4396f55c99b307b2ce75a8d86
|
||||
P 40567fddd468d00295275af8df09a7a1785e684a
|
||||
R 8ad423cc8976bc762dc67ac33e49e948
|
||||
U drh
|
||||
Z 47a7a33cc642ca844caf03a37d1ebaba
|
||||
Z 7a74b3f46b1e20d0df5f0a7a123b8d69
|
||||
|
@ -1 +1 @@
|
||||
40567fddd468d00295275af8df09a7a1785e684a
|
||||
25e2cde105a19293bdb9c001b48624e5d7f8c4e5
|
34
src/where.c
34
src/where.c
@ -604,7 +604,7 @@ static void whereSplit(WhereClause *pWC, Expr *pExpr, int op){
|
||||
/*
|
||||
** Initialize an expression mask set (a WhereMaskSet object)
|
||||
*/
|
||||
#define initMaskSet(P) memset(P, 0, sizeof(*P))
|
||||
#define initMaskSet(P) (P)->n=0
|
||||
|
||||
/*
|
||||
** Return the bitmask for the given cursor number. Return 0 if
|
||||
@ -4361,7 +4361,7 @@ static int indexMightHelpWithOrderBy(
|
||||
** Return a bitmask where 1s indicate that the corresponding column of
|
||||
** the table is used by an index. Only the first 63 columns are considered.
|
||||
*/
|
||||
static Bitmask columnsUsedByIndex(Index *pIdx){
|
||||
static Bitmask columnsInIndex(Index *pIdx){
|
||||
Bitmask m = 0;
|
||||
int j;
|
||||
for(j=pIdx->nColumn-1; j>=0; j--){
|
||||
@ -4431,7 +4431,6 @@ static int whereLoopAddBtree(
|
||||
|
||||
/* Automatic indexes */
|
||||
if( !pBuilder->pBest
|
||||
// && pTabList->nSrc>1
|
||||
&& (pWInfo->pParse->db->flags & SQLITE_AutoIndex)!=0
|
||||
&& !pSrc->viaCoroutine
|
||||
&& !pSrc->notIndexed
|
||||
@ -4476,11 +4475,11 @@ static int whereLoopAddBtree(
|
||||
/* Full table scan */
|
||||
pNew->iSortIdx = b ? iSortIdx : 0;
|
||||
pNew->nOut = rSize;
|
||||
pNew->rRun = whereCostAdd(rSize,rLogSize) + 16 + b*4;
|
||||
pNew->rRun = whereCostAdd(rSize,rLogSize) + 16 - b;
|
||||
rc = whereLoopInsert(pBuilder, pNew);
|
||||
if( rc ) break;
|
||||
}else{
|
||||
Bitmask m = pSrc->colUsed & ~columnsUsedByIndex(pProbe);
|
||||
Bitmask m = pSrc->colUsed & ~columnsInIndex(pProbe);
|
||||
pNew->wsFlags = (m==0) ? (WHERE_IDX_ONLY|WHERE_INDEXED) : WHERE_INDEXED;
|
||||
|
||||
/* Full scan via index */
|
||||
@ -4493,8 +4492,7 @@ static int whereLoopAddBtree(
|
||||
pNew->iSortIdx = b ? iSortIdx : 0;
|
||||
pNew->nOut = rSize;
|
||||
pNew->rRun = whereCostAdd(rSize,rLogSize);
|
||||
if( m!=0 ) pNew->rRun += rLogSize;
|
||||
if( b ) pNew->rRun--;
|
||||
pNew->rRun += ((m!=0) ? rLogSize : 10) - b;
|
||||
rc = whereLoopInsert(pBuilder, pNew);
|
||||
if( rc ) break;
|
||||
}
|
||||
@ -4737,15 +4735,17 @@ static int whereLoopAddOr(WhereLoopBuilder *pBuilder, Bitmask mExtra){
|
||||
prereq |= sBest.prereq;
|
||||
}
|
||||
assert( pNew->nLSlot>=1 );
|
||||
pNew->nLTerm = 1;
|
||||
pNew->aLTerm[0] = pTerm;
|
||||
pNew->wsFlags = WHERE_MULTI_OR;
|
||||
pNew->rSetup = 0;
|
||||
pNew->rRun = rTotal;
|
||||
pNew->nOut = nRow;
|
||||
pNew->prereq = prereq;
|
||||
memset(&pNew->u, 0, sizeof(pNew->u));
|
||||
rc = whereLoopInsert(pBuilder, pNew);
|
||||
if( sBest.maskSelf ){
|
||||
pNew->nLTerm = 1;
|
||||
pNew->aLTerm[0] = pTerm;
|
||||
pNew->wsFlags = WHERE_MULTI_OR;
|
||||
pNew->rSetup = 0;
|
||||
pNew->rRun = rTotal;
|
||||
pNew->nOut = nRow;
|
||||
pNew->prereq = prereq;
|
||||
memset(&pNew->u, 0, sizeof(pNew->u));
|
||||
rc = whereLoopInsert(pBuilder, pNew);
|
||||
}
|
||||
whereLoopClear(pWInfo->pParse->db, &sBest);
|
||||
}
|
||||
}
|
||||
@ -5327,7 +5327,7 @@ static int whereShortCut(WhereLoopBuilder *pBuilder){
|
||||
}
|
||||
if( j!=pIdx->nColumn ) continue;
|
||||
pLoop->wsFlags = WHERE_COLUMN_EQ|WHERE_ONEROW|WHERE_INDEXED;
|
||||
if( (pItem->colUsed & ~columnsUsedByIndex(pIdx))==0 ){
|
||||
if( (pItem->colUsed & ~columnsInIndex(pIdx))==0 ){
|
||||
pLoop->wsFlags |= WHERE_IDX_ONLY;
|
||||
}
|
||||
pLoop->nLTerm = j;
|
||||
|
@ -213,6 +213,83 @@ test_suite "nofaultsim" -prefix "" -description {
|
||||
unset -nocomplain ::G(valgrind)
|
||||
}
|
||||
|
||||
test_suite "queryplanner" -prefix "" -description {
|
||||
Tests of the query planner and query optimizer
|
||||
} -files {
|
||||
alter2.test alter3.test alter4.test alter.test analyze3.test
|
||||
analyze4.test analyze5.test analyze6.test analyze7.test analyze8.test
|
||||
analyze.test attach2.test attach3.test attach4.test attachmalloc.test
|
||||
attach.test autoinc.test autoindex1.test between.test cast.test
|
||||
check.test closure01.test coalesce.test collate1.test collate2.test
|
||||
collate3.test collate4.test collate5.test collate6.test collate7.test
|
||||
collate8.test collate9.test collateA.test colmeta.test colname.test
|
||||
conflict.test count.test coveridxscan.test createtab.test cse.test
|
||||
date.test dbstatus2.test dbstatus.test default.test delete2.test
|
||||
delete3.test delete.test descidx1.test descidx2.test descidx3.test
|
||||
distinctagg.test distinct.test e_createtable.test e_delete.test
|
||||
e_droptrigger.test e_dropview.test e_expr.test e_fkey.test e_insert.test
|
||||
eqp.test e_reindex.test e_resolve.test e_select2.test e_select.test
|
||||
e_update.test exists.test expr.test fkey1.test fkey2.test fkey3.test
|
||||
fkey4.test fkey5.test fkey_malloc.test format4.test func2.test
|
||||
func3.test func.test fuzz2.test fuzz3.test fuzzer1.test fuzz-oss1.test
|
||||
fuzz.test in2.test in3.test in4.test in5.test index2.test index3.test
|
||||
index4.test index5.test indexedby.test indexfault.test index.test
|
||||
insert2.test insert3.test insert4.test insert5.test insert.test
|
||||
instr.test in.test intpkey.test join2.test join3.test join4.test
|
||||
join5.test join6.test join.test like2.test like.test limit.test
|
||||
minmax2.test minmax3.test minmax4.test minmax.test misc1.test misc2.test
|
||||
misc3.test misc4.test misc5.test misc6.test misc7.test orderby1.test
|
||||
orderby2.test orderby3.test orderby4.test randexpr1.test regexp1.test
|
||||
reindex.test rowhash.test rowid.test schema2.test schema3.test
|
||||
schema4.test schema5.test schema.test securedel2.test securedel.test
|
||||
select1.test select2.test select3.test select4.test select5.test
|
||||
select6.test select7.test select8.test select9.test selectA.test
|
||||
selectB.test selectC.test selectD.test selectE.test sidedelete.test
|
||||
sort.test spellfix.test subquery2.test subquery.test subselect.test
|
||||
substr.test tkt-02a8e81d44.test tkt1435.test tkt1443.test tkt1444.test
|
||||
tkt1449.test tkt1473.test tkt1501.test tkt1512.test tkt1514.test
|
||||
tkt1536.test tkt1537.test tkt1567.test tkt1644.test tkt1667.test
|
||||
tkt1873.test tkt2141.test tkt2192.test tkt2213.test tkt2251.test
|
||||
tkt2285.test tkt2332.test tkt2339.test tkt2391.test tkt2409.test
|
||||
tkt2450.test tkt2565.test tkt2640.test tkt2643.test tkt2686.test
|
||||
tkt-26ff0c2d1e.test tkt2767.test tkt2817.test tkt2820.test tkt2822.test
|
||||
tkt2832.test tkt2854.test tkt2920.test tkt2927.test tkt2942.test
|
||||
tkt-2a5629202f.test tkt-2d1a5c67d.test tkt-2ea2425d34.test tkt3080.test
|
||||
tkt3093.test tkt3121.test tkt-31338dca7e.test tkt-313723c356.test
|
||||
tkt3201.test tkt3292.test tkt3298.test tkt3334.test tkt3346.test
|
||||
tkt3357.test tkt3419.test tkt3424.test tkt3442.test tkt3457.test
|
||||
tkt3461.test tkt3493.test tkt3508.test tkt3522.test tkt3527.test
|
||||
tkt3541.test tkt3554.test tkt3581.test tkt35xx.test tkt3630.test
|
||||
tkt3718.test tkt3731.test tkt3757.test tkt3761.test tkt3762.test
|
||||
tkt3773.test tkt3791.test tkt3793.test tkt3810.test tkt3824.test
|
||||
tkt3832.test tkt3838.test tkt3841.test tkt-385a5b56b9.test tkt3871.test
|
||||
tkt3879.test tkt-38cb5df375.test tkt3911.test tkt3918.test tkt3922.test
|
||||
tkt3929.test tkt3935.test tkt3992.test tkt3997.test tkt-3998683a16.test
|
||||
tkt-3a77c9714e.test tkt-3fe897352e.test tkt4018.test tkt-4a03edc4c8.test
|
||||
tkt-4dd95f6943.test tkt-54844eea3f.test tkt-5d863f876e.test
|
||||
tkt-5e10420e8d.test tkt-5ee23731f.test tkt-6bfb98dfc0.test
|
||||
tkt-752e1646fc.test tkt-78e04e52ea.test tkt-7a31705a7e6.test
|
||||
tkt-7bbfb7d442.test tkt-80ba201079.test tkt-80e031a00f.test
|
||||
tkt-8454a207b9.test tkt-91e2e8ba6f.test tkt-94c04eaadb.test
|
||||
tkt-9d68c883.test tkt-a7b7803e.test tkt-b1d3a2e531.test
|
||||
tkt-b351d95f9.test tkt-b72787b1.test tkt-bd484a090c.test
|
||||
tkt-bdc6bbbb38.test tkt-c48d99d690.test tkt-cbd054fa6b.test
|
||||
tkt-d11f09d36e.test tkt-d635236375.test tkt-d82e3f3721.test
|
||||
tkt-f3e5abed55.test tkt-f777251dc7a.test tkt-f7b4edec.test
|
||||
tkt-f973c7ac31.test tkt-fa7bf5ec.test tkt-fc62af4523.test
|
||||
tkt-fc7bd6358f.test trigger1.test trigger2.test trigger3.test
|
||||
trigger4.test trigger5.test trigger6.test trigger7.test trigger8.test
|
||||
trigger9.test triggerA.test triggerB.test triggerC.test triggerD.test
|
||||
types2.test types3.test types.test unique.test unordered.test
|
||||
update.test view.test vtab1.test vtab2.test vtab3.test vtab4.test
|
||||
vtab5.test vtab6.test vtab7.test vtab8.test vtab9.test vtab_alter.test
|
||||
vtabA.test vtabB.test vtabC.test vtabD.test vtab_err.test vtabE.test
|
||||
vtabF.test where2.test where3.test where4.test where5.test where6.test
|
||||
where7.test where8m.test where8.test where9.test whereA.test whereB.test
|
||||
whereC.test whereD.test whereE.test whereF.test wherelimit.test
|
||||
where.test
|
||||
}
|
||||
|
||||
lappend ::testsuitelist xxx
|
||||
#-------------------------------------------------------------------------
|
||||
# Define the coverage related test suites:
|
||||
|
@ -268,7 +268,7 @@ do_test where8-3.12 {
|
||||
execsql_status {
|
||||
SELECT a, d FROM t1, t2 WHERE (a=d OR b=e) AND +a<5 ORDER BY a
|
||||
}
|
||||
} {1 1 2 2 3 3 4 2 4 4 0 0}
|
||||
} {1 1 2 2 3 3 4 2 4 4 9 0}
|
||||
do_test where8-3.13 {
|
||||
execsql_status {
|
||||
SELECT a, d FROM t1, t2 WHERE (a=d OR b=e) AND +a<5
|
||||
|
@ -420,7 +420,7 @@ do_test where9-4.5 {
|
||||
AND (c=31031 OR d IS NULL)
|
||||
ORDER BY +a
|
||||
}
|
||||
} {1 {cannot use index: t1b}}
|
||||
} {1 {no query solution}}
|
||||
do_test where9-4.6 {
|
||||
count_steps {
|
||||
SELECT a FROM t1 NOT INDEXED
|
||||
@ -436,7 +436,7 @@ do_test where9-4.7 {
|
||||
AND (c=31031 OR d IS NULL)
|
||||
ORDER BY +a
|
||||
}
|
||||
} {1 {cannot use index: t1c}}
|
||||
} {1 {no query solution}}
|
||||
do_test where9-4.8 {
|
||||
catchsql {
|
||||
SELECT a FROM t1 INDEXED BY t1d
|
||||
@ -444,7 +444,7 @@ do_test where9-4.8 {
|
||||
AND (c=31031 OR d IS NULL)
|
||||
ORDER BY +a
|
||||
}
|
||||
} {1 {cannot use index: t1d}}
|
||||
} {1 {no query solution}}
|
||||
|
||||
ifcapable explain {
|
||||
# The (c=31031 OR d IS NULL) clause is preferred over b>1000 because
|
||||
@ -598,7 +598,7 @@ do_test where9-6.3.5 {
|
||||
OR (b NOT NULL AND c IS NULL AND d NOT NULL)
|
||||
OR (b NOT NULL AND c NOT NULL AND d IS NULL)
|
||||
}
|
||||
} {scan 98 sort 0} ;# DELETEs rows 90 91 92 97
|
||||
} {scan 0 sort 0} ;# DELETEs rows 90 91 92 97
|
||||
do_test where9-6.3.6 {
|
||||
db eval {
|
||||
SELECT count(*) FROM t1 UNION ALL
|
||||
@ -615,7 +615,7 @@ do_test where9-6.3.7 {
|
||||
OR (b NOT NULL AND +c IS NULL AND d NOT NULL)
|
||||
OR (b NOT NULL AND c NOT NULL AND d IS NULL)
|
||||
}
|
||||
} {scan 98 sort 0} ;# Add 100 to rowids 90 91 92 97
|
||||
} {scan 0 sort 0} ;# Add 100 to rowids 90 91 92 97
|
||||
do_test where9-6.3.8 {
|
||||
db eval {
|
||||
SELECT count(*) FROM t1 UNION ALL
|
||||
@ -705,7 +705,7 @@ do_test where9-6.6.1 {
|
||||
OR (b NOT NULL AND +c IS NULL AND d NOT NULL)
|
||||
OR (b NOT NULL AND c NOT NULL AND d IS NULL)
|
||||
}
|
||||
} {scan 98 sort 0} ;# DELETEs rows 90 91 92 97
|
||||
} {scan 0 sort 0} ;# DELETEs rows 90 91 92 97
|
||||
do_test where9-6.6.2 {
|
||||
db eval {
|
||||
SELECT count(*) FROM t1 UNION ALL
|
||||
@ -722,7 +722,7 @@ do_test where9-6.6.3 {
|
||||
OR (b NOT NULL AND +c IS NULL AND d NOT NULL)
|
||||
OR (b NOT NULL AND c NOT NULL AND d IS NULL)
|
||||
}
|
||||
} {scan 98 sort 0} ;# Add 100 to rowids 90 91 92 97
|
||||
} {scan 0 sort 0} ;# Add 100 to rowids 90 91 92 97
|
||||
do_test where9-6.6.4 {
|
||||
db eval {
|
||||
SELECT count(*) FROM t1 UNION ALL
|
||||
@ -768,19 +768,35 @@ do_test where9-6.7.4 {
|
||||
do_test where9-6.8.1 {
|
||||
catchsql {
|
||||
DELETE FROM t1 INDEXED BY t1b
|
||||
WHERE (b IS NULL AND c NOT NULL AND d NOT NULL)
|
||||
WHERE (+b IS NULL AND c NOT NULL AND d NOT NULL)
|
||||
OR (b NOT NULL AND c IS NULL AND d NOT NULL)
|
||||
OR (b NOT NULL AND c NOT NULL AND d IS NULL)
|
||||
}
|
||||
} {1 {cannot use index: t1b}}
|
||||
} {1 {no query solution}}
|
||||
do_test where9-6.8.2 {
|
||||
catchsql {
|
||||
UPDATE t1 INDEXED BY t1b SET a=a+100
|
||||
WHERE (+b IS NULL AND c NOT NULL AND d NOT NULL)
|
||||
OR (b NOT NULL AND c IS NULL AND d NOT NULL)
|
||||
OR (b NOT NULL AND c NOT NULL AND d IS NULL)
|
||||
}
|
||||
} {1 {no query solution}}
|
||||
do_test where9-6.8.3 {
|
||||
catchsql {
|
||||
UPDATE t1 INDEXED BY t1b SET a=a+100
|
||||
WHERE (b IS NULL AND c NOT NULL AND d NOT NULL)
|
||||
OR (b NOT NULL AND c IS NULL AND d NOT NULL)
|
||||
OR (b NOT NULL AND c NOT NULL AND d IS NULL)
|
||||
}
|
||||
} {1 {cannot use index: t1b}}
|
||||
} {0 {}}
|
||||
do_test where9-6.8.4 {
|
||||
catchsql {
|
||||
DELETE FROM t1 INDEXED BY t1b
|
||||
WHERE (b IS NULL AND c NOT NULL AND d NOT NULL)
|
||||
OR (b NOT NULL AND c IS NULL AND d NOT NULL)
|
||||
OR (b NOT NULL AND c NOT NULL AND d IS NULL)
|
||||
}
|
||||
} {0 {}}
|
||||
|
||||
############################################################################
|
||||
# Test cases where terms inside an OR series are combined with AND terms
|
||||
|
@ -46,7 +46,7 @@
|
||||
|
||||
set testdir [file dirname $argv0]
|
||||
source $testdir/tester.tcl
|
||||
set testprefix x
|
||||
set testprefix whereF
|
||||
|
||||
do_execsql_test 1.0 {
|
||||
PRAGMA automatic_index = 0;
|
||||
@ -63,7 +63,7 @@ foreach {tn sql} {
|
||||
} {
|
||||
do_test 1.$tn {
|
||||
db eval "EXPLAIN QUERY PLAN $sql"
|
||||
} {/.*SCAN TABLE t2 .*SEARCH TABLE t1 .*/}
|
||||
} {/.*SCAN TABLE t2\y.*SEARCH TABLE t1\y.*/}
|
||||
}
|
||||
|
||||
do_execsql_test 2.0 {
|
||||
@ -84,7 +84,7 @@ foreach {tn sql} {
|
||||
} {
|
||||
do_test 2.$tn {
|
||||
db eval "EXPLAIN QUERY PLAN $sql"
|
||||
} {/.*SCAN TABLE t2 .*SEARCH TABLE t1 .*/}
|
||||
} {/.*SCAN TABLE t2\y.*SEARCH TABLE t1\y.*/}
|
||||
}
|
||||
|
||||
do_execsql_test 3.0 {
|
||||
@ -109,7 +109,7 @@ foreach {tn sql} {
|
||||
} {
|
||||
do_test 3.$tn {
|
||||
db eval "EXPLAIN QUERY PLAN $sql"
|
||||
} {/.*SCAN TABLE t2 .*SEARCH TABLE t1 .*/}
|
||||
} {/.*SCAN TABLE t2\y.*SEARCH TABLE t1\y.*/}
|
||||
}
|
||||
|
||||
finish_test
|
||||
|
Loading…
x
Reference in New Issue
Block a user