Change the name of the OpenTemp opcode to OpenVirtual which is more

descriptive of what it does. (CVS 2541)

FossilOrigin-Name: 3bb9ce5f20d0a6bc19df31df9b8e82044c3e6004
This commit is contained in:
drh 2005-07-08 17:13:46 +00:00
parent 392e597c8a
commit 9170dd7e1c
11 changed files with 74 additions and 81 deletions

View File

@ -1,5 +1,5 @@
C Add\sthe\sEP_OptOnly\sflag\son\sexpressions\sfor\sWHERE\sclause\nterms\sthat\sare\sadded\sby\sthe\soptimizer\sbut\sshould\snot\sbe\scoded.\s(CVS\s2540)
D 2005-07-08T14:14:23
C Change\sthe\sname\sof\sthe\sOpenTemp\sopcode\sto\sOpenVirtual\swhich\sis\smore\ndescriptive\sof\swhat\sit\sdoes.\s(CVS\s2541)
D 2005-07-08T17:13:47
F Makefile.in 3c10cd7bc3ecbd60fe4d5a5c0f59bfa7fb217a66
F Makefile.linux-gcc 06be33b2a9ad4f005a5f42b22c4a19dab3cbb5c7
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@ -38,11 +38,11 @@ F src/callback.c 0910b611e0c158f107ee3ff86f8a371654971e2b
F src/date.c 7444b0900a28da77e57e3337a636873cff0ae940
F src/delete.c 250d436a68fe371b4ab403d1c0f6fdc9a6860c39
F src/experimental.c 50c1e3b34f752f4ac10c36f287db095c2b61766d
F src/expr.c fdc8b82babbb266eeded4a314fd2f1d315133797
F src/expr.c daf3515d33467090741d98227577356c108ea33f
F src/func.c e6637354fe3a66dfac063a49109f277cde9ce87d
F src/hash.c 2b1b13f7400e179631c83a1be0c664608c8f021f
F src/hash.h 1b0c445e1c89ff2aaad9b4605ba61375af001e84
F src/insert.c d61752504f8a67e28a3bd45288051a587ba899cd
F src/insert.c c4533240451b73ead88098b5d819cb70fa0880bd
F src/legacy.c d58ea507bce885298a2c8c3cbb0f4bff5d47830b
F src/main.c 7d0293d9520688d47092ff48c1ed5254cd3c4474
F src/md5.c 7ae1c39044b95de2f62e066f47bb1deb880a1070
@ -61,10 +61,10 @@ F src/pragma.c dea86dad2f0e872b29632ae9fba526e539a4ddd8
F src/prepare.c d53602d2f8e097225ae7c76ec764ae68f759ba47
F src/printf.c 3d20b21cfecadacecac3fb7274e746cb81d3d357
F src/random.c 90adff4e73a3b249eb4f1fc2a6ff9cf78c7233a4
F src/select.c 28b752e58955c7920711fbdbfdcd369a2bd09448
F src/select.c c611471052773b94af771693686bd5bcdbbb0dba
F src/shell.c 25b3217d7c64e6497225439d261a253a23efff26
F src/sqlite.h.in e06d5774e9cfa5962376ae988300a9f114a3e3d7
F src/sqliteInt.h b7b2f7fc2c24bcfcedd2c0981a685860f16eb90b
F src/sqliteInt.h f1804025f8ff45825ae2a2efa01c0be8a95738e8
F src/table.c 25b3ff2b39b7d87e8d4a5da0713d68dfc06cbee9
F src/tclsqlite.c cccaf6b78c290d824cf8ea089b8b27377e545830
F src/test1.c 83ead44dead55033adff61ce69a1e2fc3e72935e
@ -78,14 +78,14 @@ F src/update.c 49a9c618c3ba1ca57038d9ce41f14e958442fe58
F src/utf.c bda5eb85039ef16f2d17004c1e18c96e1ab0a80c
F src/util.c 1acbe299cbe51f45176ac1e48ded9bea206c3c23
F src/vacuum.c 829d9e1a6d7c094b80e0899686670932eafd768c
F src/vdbe.c 87dda3fc214e4828641dd53527777f1b7d37b85f
F src/vdbe.c 971e08e91848e0afcdf5c7312c7f10b5fc6e7cd4
F src/vdbe.h 75e466d84d362b0c4498978a9d6b1e6bd32ecf3b
F src/vdbeInt.h 9be9a6c43d38124bd03cc5cf05715605b1789fd9
F src/vdbeapi.c 7f392f0792d1258c958083d7de9eae7c3530c9a6
F src/vdbeaux.c 3732a86566a6be4da4c606e9334baf3fd98667af
F src/vdbefifo.c b8805850afe13b43f1de78d58088cb5d66f88e1e
F src/vdbemem.c da8e8d6f29dd1323f782f000d7cd120027c9ff03
F src/where.c e9c0c19052742d74783bdc8dba07ab42609debb7
F src/where.c 6326f643534a2585a3bbbfe490a39dc4fa1115a5
F tclinstaller.tcl 046e3624671962dc50f0481d7c25b38ef803eb42
F test/all.test 7f0988442ab811dfa41793b5b550f5828ce316f3
F test/alter.test 9d6837a3d946b73df692b7cef2a7644d2e2f6bc6
@ -141,7 +141,7 @@ F test/in.test ed134f8d477a6280297ced1646de83cccf8f196d
F test/index.test 51e01a0928b4b61228917ddd8c6c0e2466547f6f
F test/index2.test 9ad98243fd7fe833795a9cc662f371f0eed4ff4f
F test/index3.test 72bd07b508022db688ec536c460345d24a3912e3
F test/insert.test f48889e7ffb9fca18734751b47dfc53503fa8298
F test/insert.test b0a89e1568fe9890758f8f2b43b68e840e8f1a1a
F test/insert2.test 792ad079f59c7e14cf9397712725224e2112c838
F test/insert3.test c67f0240b1c17e71fa2ed8bb6de064928f549f95
F test/interrupt.test 170f87c2819f0e56c76e0a754949ea103d05009c
@ -191,7 +191,7 @@ F test/select2.test 01b9cbc06e5ed662ce0289aa5f47314d54541e82
F test/select3.test 44dccad96a1b9940bb8c6f982d4d218dcd262760
F test/select4.test c239f516aa31f42f2ef7c6d7cd01105f08f934ca
F test/select5.test 2d414f712bff8e590091e08f9b7287600731be00
F test/select6.test 6e5a1a70a788cdbe515d1252dd0917d7e9d1d71e
F test/select6.test 6559d16ad16edb7d6864f7e74a3d204d0af72486
F test/select7.test 1bf795b948c133a15a2a5e99d3270e652ec58ce6
F test/sort.test 312eade533cb3c7667110ccfa6e818db1078fd6c
F test/subquery.test 0e37f0f032799c28aa8fcc0dc04ee28a78e5ce8b
@ -221,7 +221,7 @@ F test/utf16.test 5fb019e09601774743858ef7380b6c02103ff120
F test/vacuum.test 5d4857ae2afc9c20d0edb8acc58bdc8d630126a9
F test/vacuum2.test 5d77e98c458bcdbeecc6327de5107179ba1aa095
F test/varint.test ab7b110089a08b9926ed7390e7e97bdefeb74102
F test/view.test e24553116e482a94e9cd22a4eea4909b1c6ed1c6
F test/view.test 3c79232a2ee45918c62a0cf90411525899404a76
F test/where.test 9de2426d0b8296b3aa7801cef5f81daf51f8e516
F tool/diffdb.c 7524b1b5df217c20cd0431f6789851a4e0cb191b
F tool/lemon.c c88936c67f6411608db8fa4254d254f509fa40f6
@ -285,7 +285,7 @@ F www/tclsqlite.tcl 425be741b8ae664f55cb1ef2371aab0a75109cf9
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b
F www/whentouse.tcl 528299b8316726dbcc5548e9aa0648c8b1bd055b
P b72bff81f9937378417a0af0610d8558279b67a7
R c4fc77478fdb3a3d8e789b5f5aefe0b7
P f4a66ed04dfd8714746b766b4859682ea18e328f
R 7dbd5cf11e082700c07694668805a635
U drh
Z bbe2b8533b9721f74ae254c674c04a75
Z 2074933014582e5567aec0bab96430cb

View File

@ -1 +1 @@
f4a66ed04dfd8714746b766b4859682ea18e328f
3bb9ce5f20d0a6bc19df31df9b8e82044c3e6004

View File

@ -12,7 +12,7 @@
** This file contains routines used for analyzing expressions and
** for generating VDBE code that evaluates expressions in SQLite.
**
** $Id: expr.c,v 1.209 2005/06/30 17:04:21 drh Exp $
** $Id: expr.c,v 1.210 2005/07/08 17:13:47 drh Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>
@ -530,7 +530,7 @@ Select *sqlite3SelectDup(Select *p){
pNew->pOffset = sqlite3ExprDup(p->pOffset);
pNew->iLimit = -1;
pNew->iOffset = -1;
pNew->ppOpenTemp = 0;
pNew->ppOpenVirtual = 0;
pNew->isResolved = p->isResolved;
pNew->isAgg = p->isAgg;
return pNew;
@ -1263,7 +1263,7 @@ void sqlite3CodeSubselect(Parse *pParse, Expr *pExpr){
case TK_IN: {
char affinity;
KeyInfo keyInfo;
int addr; /* Address of OP_OpenTemp instruction */
int addr; /* Address of OP_OpenVirtual instruction */
affinity = sqlite3ExprAffinity(pExpr->pLeft);
@ -1281,7 +1281,7 @@ void sqlite3CodeSubselect(Parse *pParse, Expr *pExpr){
** is used.
*/
pExpr->iTable = pParse->nTab++;
addr = sqlite3VdbeAddOp(v, OP_OpenTemp, pExpr->iTable, 0);
addr = sqlite3VdbeAddOp(v, OP_OpenVirtual, pExpr->iTable, 0);
memset(&keyInfo, 0, sizeof(keyInfo));
keyInfo.nField = 1;
sqlite3VdbeAddOp(v, OP_SetNumColumns, pExpr->iTable, 1);

View File

@ -12,7 +12,7 @@
** This file contains C code routines that are called by the parser
** to handle INSERT statements in SQLite.
**
** $Id: insert.c,v 1.140 2005/06/24 03:53:06 drh Exp $
** $Id: insert.c,v 1.141 2005/07/08 17:13:47 drh Exp $
*/
#include "sqliteInt.h"
@ -373,7 +373,7 @@ void sqlite3Insert(
** back up and execute the SELECT code above.
*/
sqlite3VdbeChangeP2(v, iInitCode, sqlite3VdbeCurrentAddr(v));
sqlite3VdbeAddOp(v, OP_OpenTemp, srcTab, 0);
sqlite3VdbeAddOp(v, OP_OpenVirtual, srcTab, 0);
sqlite3VdbeAddOp(v, OP_SetNumColumns, srcTab, nColumn);
sqlite3VdbeAddOp(v, OP_Goto, 0, iSelectLoop);
sqlite3VdbeResolveLabel(v, iCleanup);

View File

@ -12,7 +12,7 @@
** This file contains C code routines that are called by the parser
** to handle SELECT statements in SQLite.
**
** $Id: select.c,v 1.252 2005/06/12 21:35:52 drh Exp $
** $Id: select.c,v 1.253 2005/07/08 17:13:47 drh Exp $
*/
#include "sqliteInt.h"
@ -1322,9 +1322,9 @@ static void computeLimitRegisters(Parse *pParse, Select *p){
** DISTINCT, UNION, INTERSECT and EXCEPT select statements (but not
** UNION ALL).
**
** The value returned is the address of the OP_OpenTemp instruction.
** The value returned is the address of the OP_OpenVirtual instruction.
*/
static int openTempIndex(Parse *pParse, Select *p, int iTab){
static int openVirtualIndex(Parse *pParse, Select *p, int iTab){
KeyInfo *pKeyInfo;
int nColumn;
sqlite3 *db = pParse->db;
@ -1346,18 +1346,18 @@ static int openTempIndex(Parse *pParse, Select *p, int iTab){
pKeyInfo->aColl[i] = db->pDfltColl;
}
}
addr = sqlite3VdbeOp3(v, OP_OpenTemp, iTab, 0,
addr = sqlite3VdbeOp3(v, OP_OpenVirtual, iTab, 0,
(char*)pKeyInfo, P3_KEYINFO_HANDOFF);
return addr;
}
#ifndef SQLITE_OMIT_COMPOUND_SELECT
/*
** Add the address "addr" to the set of all OpenTemp opcode addresses
** that are being accumulated in p->ppOpenTemp.
** Add the address "addr" to the set of all OpenVirtual opcode addresses
** that are being accumulated in p->ppOpenVirtual.
*/
static int multiSelectOpenTempAddr(Select *p, int addr){
IdList *pList = *p->ppOpenTemp = sqlite3IdListAppend(*p->ppOpenTemp, 0);
static int multiSelectOpenVirtualAddr(Select *p, int addr){
IdList *pList = *p->ppOpenVirtual = sqlite3IdListAppend(*p->ppOpenVirtual, 0);
if( pList==0 ){
return SQLITE_NOMEM;
}
@ -1430,7 +1430,7 @@ static int multiSelect(
int rc = SQLITE_OK; /* Success code from a subroutine */
Select *pPrior; /* Another SELECT immediately to our left */
Vdbe *v; /* Generate code to this VDBE */
IdList *pOpenTemp = 0;/* OP_OpenTemp opcodes that need a KeyInfo */
IdList *pOpenVirtual = 0;/* OP_OpenVirtual opcodes that need a KeyInfo */
int aAddr[5]; /* Addresses of SetNumColumns operators */
int nAddr = 0; /* Number used */
int nCol; /* Number of columns in the result set */
@ -1465,21 +1465,21 @@ static int multiSelect(
}
/* If *p this is the right-most select statement, then initialize
** p->ppOpenTemp to point to pOpenTemp. If *p is not the right most
** statement then p->ppOpenTemp will have already been initialized
** by a prior call to this same procedure. Pass along the pOpenTemp
** p->ppOpenVirtual to point to pOpenVirtual. If *p is not the right most
** statement then p->ppOpenVirtual will have already been initialized
** by a prior call to this same procedure. Pass along the pOpenVirtual
** pointer to pPrior, the next statement to our left.
*/
if( p->ppOpenTemp==0 ){
p->ppOpenTemp = &pOpenTemp;
if( p->ppOpenVirtual==0 ){
p->ppOpenVirtual = &pOpenVirtual;
}
pPrior->ppOpenTemp = p->ppOpenTemp;
pPrior->ppOpenVirtual = p->ppOpenVirtual;
/* Create the destination temporary table if necessary
*/
if( eDest==SRT_TempTable ){
assert( p->pEList );
sqlite3VdbeAddOp(v, OP_OpenTemp, iParm, 0);
sqlite3VdbeAddOp(v, OP_OpenVirtual, iParm, 0);
assert( nAddr==0 );
aAddr[nAddr++] = sqlite3VdbeAddOp(v, OP_SetNumColumns, iParm, 0);
eDest = SRT_Table;
@ -1536,9 +1536,9 @@ static int multiSelect(
rc = 1;
goto multi_select_end;
}
addr = sqlite3VdbeAddOp(v, OP_OpenTemp, unionTab, 0);
addr = sqlite3VdbeAddOp(v, OP_OpenVirtual, unionTab, 0);
if( p->op!=TK_ALL ){
rc = multiSelectOpenTempAddr(p, addr);
rc = multiSelectOpenVirtualAddr(p, addr);
if( rc!=SQLITE_OK ){
goto multi_select_end;
}
@ -1628,8 +1628,8 @@ static int multiSelect(
goto multi_select_end;
}
addr = sqlite3VdbeAddOp(v, OP_OpenTemp, tab1, 0);
rc = multiSelectOpenTempAddr(p, addr);
addr = sqlite3VdbeAddOp(v, OP_OpenVirtual, tab1, 0);
rc = multiSelectOpenVirtualAddr(p, addr);
if( rc!=SQLITE_OK ){
goto multi_select_end;
}
@ -1646,8 +1646,8 @@ static int multiSelect(
/* Code the current SELECT into temporary table "tab2"
*/
addr = sqlite3VdbeAddOp(v, OP_OpenTemp, tab2, 0);
rc = multiSelectOpenTempAddr(p, addr);
addr = sqlite3VdbeAddOp(v, OP_OpenVirtual, tab2, 0);
rc = multiSelectOpenVirtualAddr(p, addr);
if( rc!=SQLITE_OK ){
goto multi_select_end;
}
@ -1725,11 +1725,11 @@ static int multiSelect(
** SELECT might also skip this part if it has no ORDER BY clause and
** no temp tables are required.
*/
if( p->pOrderBy || (pOpenTemp && pOpenTemp->nId>0) ){
if( p->pOrderBy || (pOpenVirtual && pOpenVirtual->nId>0) ){
int i; /* Loop counter */
KeyInfo *pKeyInfo; /* Collating sequence for the result set */
assert( p->ppOpenTemp == &pOpenTemp );
assert( p->ppOpenVirtual == &pOpenVirtual );
pKeyInfo = sqliteMalloc(sizeof(*pKeyInfo)+nCol*sizeof(CollSeq*));
if( !pKeyInfo ){
rc = SQLITE_NOMEM;
@ -1746,9 +1746,9 @@ static int multiSelect(
}
}
for(i=0; pOpenTemp && i<pOpenTemp->nId; i++){
for(i=0; pOpenVirtual && i<pOpenVirtual->nId; i++){
int p3type = (i==0?P3_KEYINFO_HANDOFF:P3_KEYINFO);
int addr = pOpenTemp->a[i].idx;
int addr = pOpenVirtual->a[i].idx;
sqlite3VdbeChangeP3(v, addr, (char *)pKeyInfo, p3type);
}
@ -1768,17 +1768,17 @@ static int multiSelect(
generateSortTail(pParse, p, v, p->pEList->nExpr, eDest, iParm);
}
if( !pOpenTemp ){
if( !pOpenVirtual ){
/* This happens for UNION ALL ... ORDER BY */
sqliteFree(pKeyInfo);
}
}
multi_select_end:
if( pOpenTemp ){
sqlite3IdListDelete(pOpenTemp);
if( pOpenVirtual ){
sqlite3IdListDelete(pOpenVirtual);
}
p->ppOpenTemp = 0;
p->ppOpenVirtual = 0;
return rc;
}
#endif /* SQLITE_OMIT_COMPOUND_SELECT */
@ -2183,7 +2183,7 @@ static int simpleMinMaxQuery(Parse *pParse, Select *p, int eDest, int iParm){
/* If the output is destined for a temporary table, open that table.
*/
if( eDest==SRT_TempTable ){
sqlite3VdbeAddOp(v, OP_OpenTemp, iParm, 0);
sqlite3VdbeAddOp(v, OP_OpenVirtual, iParm, 0);
sqlite3VdbeAddOp(v, OP_SetNumColumns, iParm, 1);
}
@ -2653,7 +2653,7 @@ int sqlite3Select(
/* If the output is destined for a temporary table, open that table.
*/
if( eDest==SRT_TempTable ){
sqlite3VdbeAddOp(v, OP_OpenTemp, iParm, 0);
sqlite3VdbeAddOp(v, OP_OpenVirtual, iParm, 0);
sqlite3VdbeAddOp(v, OP_SetNumColumns, iParm, pEList->nExpr);
}
@ -2737,7 +2737,7 @@ int sqlite3Select(
*/
if( isDistinct ){
distinct = pParse->nTab++;
openTempIndex(pParse, p, distinct);
openVirtualIndex(pParse, p, distinct);
}else{
distinct = -1;
}

View File

@ -11,7 +11,7 @@
*************************************************************************
** Internal interface definitions for SQLite.
**
** @(#) $Id: sqliteInt.h,v 1.391 2005/07/08 14:14:23 drh Exp $
** @(#) $Id: sqliteInt.h,v 1.392 2005/07/08 17:13:47 drh Exp $
*/
#ifndef _SQLITEINT_H_
#define _SQLITEINT_H_
@ -1036,7 +1036,7 @@ struct Select {
Expr *pLimit; /* LIMIT expression. NULL means not used. */
Expr *pOffset; /* OFFSET expression. NULL means not used. */
int iLimit, iOffset; /* Memory registers holding LIMIT & OFFSET counters */
IdList **ppOpenTemp; /* OP_OpenTemp addresses used by multi-selects */
IdList **ppOpenVirtual;/* OP_OpenVirtual addresses used by multi-selects */
u8 isResolved; /* True once sqlite3SelectResolve() has run. */
u8 isAgg; /* True if this is an aggregate query */
};

View File

@ -43,7 +43,7 @@
** in this file for details. If in doubt, do not deviate from existing
** commenting and indentation practices when changing or adding code.
**
** $Id: vdbe.c,v 1.473 2005/07/08 13:08:00 drh Exp $
** $Id: vdbe.c,v 1.474 2005/07/08 17:13:47 drh Exp $
*/
#include "sqliteInt.h"
#include "os.h"
@ -2596,25 +2596,18 @@ case OP_OpenWrite: { /* no-push */
break;
}
/* Opcode: OpenTemp P1 * P3
/* Opcode: OpenVirtual P1 * P3
**
** Open a new cursor to a transient table.
** The transient cursor is always opened read/write even if
** the main database is read-only. The transient table is deleted
** automatically when the cursor is closed.
** Open a new cursor to a transient or virtual table.
** The cursor is always opened read/write even if
** the main database is read-only. The transient or virtual
** table is deleted automatically when the cursor is closed.
**
** The cursor points to a BTree table if P3==0 and to a BTree index
** if P3 is not 0. If P3 is not NULL, it points to a KeyInfo structure
** that defines the format of keys in the index.
**
** This opcode is used for tables that exist for the duration of a single
** SQL statement only. Tables created using CREATE TEMPORARY TABLE
** are opened using OP_OpenRead or OP_OpenWrite. "Temporary" in the
** context of this opcode means for the duration of a single SQL statement
** whereas "Temporary" in the context of CREATE TABLE means for the duration
** of the connection to the database. Same word; different meanings.
*/
case OP_OpenTemp: { /* no-push */
case OP_OpenVirtual: { /* no-push */
int i = pOp->p1;
Cursor *pCx;
assert( i>=0 );

View File

@ -16,7 +16,7 @@
** so is applicable. Because this module is responsible for selecting
** indices, you might also think of this module as the "query optimizer".
**
** $Id: where.c,v 1.141 2005/07/08 14:14:23 drh Exp $
** $Id: where.c,v 1.142 2005/07/08 17:13:47 drh Exp $
*/
#include "sqliteInt.h"
@ -507,7 +507,7 @@ static void codeEqualityTerm(
}
/*
** The number of bits in a Bitmask
** The number of bits in a Bitmask. "BMS" means "BitMask Size".
*/
#define BMS (sizeof(Bitmask)*8-1)

View File

@ -11,7 +11,7 @@
# This file implements regression tests for SQLite library. The
# focus of this file is testing the INSERT statement.
#
# $Id: insert.test,v 1.26 2005/05/29 14:23:13 danielk1977 Exp $
# $Id: insert.test,v 1.27 2005/07/08 17:13:47 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
@ -247,7 +247,7 @@ ifcapable tempdb {
set x [execsql {
EXPLAIN INSERT INTO t4 SELECT x+2 FROM t4;
}]
expr {[lsearch $x OpenTemp]>0}
expr {[lsearch $x OpenVirtual]>0}
} {1}
}

View File

@ -12,7 +12,7 @@
# focus of this file is testing SELECT statements that contain
# subqueries in their FROM clause.
#
# $Id: select6.test,v 1.17 2005/01/29 08:32:46 danielk1977 Exp $
# $Id: select6.test,v 1.18 2005/07/08 17:13:47 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
@ -381,7 +381,7 @@ ifcapable {!explain} {
# sqliteFlattenSubquery() routine in select.c is doing its job.
#
proc is_flat {sql} {
return [expr 0>[lsearch [execsql "EXPLAIN $sql"] OpenTemp]]
return [expr 0>[lsearch [execsql "EXPLAIN $sql"] OpenVirtual]]
}
# Check that the flattener works correctly for deeply nested subqueries

View File

@ -11,7 +11,7 @@
# This file implements regression tests for SQLite library. The
# focus of this file is testing VIEW statements.
#
# $Id: view.test,v 1.25 2005/06/06 15:32:08 drh Exp $
# $Id: view.test,v 1.26 2005/07/08 17:13:47 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
@ -219,7 +219,7 @@ ifcapable {explain} {
do_test view-5.3 {
lsearch [execsql {
EXPLAIN SELECT * FROM v5;
}] OpenTemp
}] OpenVirtual
} {-1}
do_test view-5.4 {
execsql {
@ -229,7 +229,7 @@ do_test view-5.4 {
do_test view-5.5 {
lsearch [execsql {
EXPLAIN SELECT * FROM v5 AS a, t2 AS b WHERE a.w=b.y;
}] OpenTemp
}] OpenVirtual
} {-1}
do_test view-5.6 {
execsql {
@ -239,7 +239,7 @@ do_test view-5.6 {
do_test view-5.7 {
lsearch [execsql {
EXPLAIN SELECT * FROM t2 AS b, v5 AS a WHERE a.w=b.y;
}] OpenTemp
}] OpenVirtual
} {-1}
do_test view-5.8 {
execsql {
@ -249,7 +249,7 @@ do_test view-5.8 {
do_test view-5.9 {
lsearch [execsql {
EXPLAIN SELECT * FROM t1 AS a, v5 AS b, t2 AS c WHERE a.x=b.v AND b.w=c.y;
}] OpenTemp
}] OpenVirtual
} {-1}
} ;# endif explain