1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-08 14:02:16 +03:00

Fix more problems with deferred execution of CREATE. Still need to do DROP.

There is now a memory leak. (CVS 1865)

FossilOrigin-Name: 6db3f122aad25b5226670ce682b7263d55c0d301
This commit is contained in:
drh
2004-07-24 14:35:58 +00:00
parent 234c39dff7
commit 3f7d4e49d8
11 changed files with 81 additions and 45 deletions

View File

@@ -1,5 +1,5 @@
C Progress\stowards\sgetting\sprepared\sstatements\sand\sCREATE\sand\sDROP\sto\splay\nnicely\stogether.\s\sWork\sis\sincomplete.\s\sSome\stests\sare\sknown\sto\sfail.\s(CVS\s1864) C Fix\smore\sproblems\swith\sdeferred\sexecution\sof\sCREATE.\s\sStill\sneed\sto\sdo\sDROP.\nThere\sis\snow\sa\smemory\sleak.\s(CVS\s1865)
D 2004-07-24T03:30:48 D 2004-07-24T14:35:58
F Makefile.in 4a5e570a9e2d35b09c31b3cf01b78cea764ade4b F Makefile.in 4a5e570a9e2d35b09c31b3cf01b78cea764ade4b
F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457 F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457
F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
@@ -29,7 +29,7 @@ F src/attach.c 784456629b3d7e50e4691f496700658fd1f16441
F src/auth.c 60db23b98bb94c8b0178180faaf49dc116674217 F src/auth.c 60db23b98bb94c8b0178180faaf49dc116674217
F src/btree.c edf4ece708350dec7f28ebd4620c6d33afe6993a F src/btree.c edf4ece708350dec7f28ebd4620c6d33afe6993a
F src/btree.h 94dfec0a1722d33359b23e7e310f2b64ffedf029 F src/btree.h 94dfec0a1722d33359b23e7e310f2b64ffedf029
F src/build.c d1870caf93cce22e6991116e39cf5c05c73882ee F src/build.c 3075ca2e66d6da3f98840d18f6e2bc4d15ced569
F src/date.c e1bb384a7856c18dce9cadb0afbe6934ba5ddb00 F src/date.c e1bb384a7856c18dce9cadb0afbe6934ba5ddb00
F src/delete.c e81545e546f6bc87d7508a93a09ca70695265af3 F src/delete.c e81545e546f6bc87d7508a93a09ca70695265af3
F src/encode.c a876af473d1d636faa3dca51c7571f2e007eea37 F src/encode.c a876af473d1d636faa3dca51c7571f2e007eea37
@@ -39,7 +39,7 @@ F src/hash.c f0a2f22c2a7052d67053b5f4690ea3010bb3fb9f
F src/hash.h 762d95f1e567664d1eafc1687de755626be962fb F src/hash.h 762d95f1e567664d1eafc1687de755626be962fb
F src/insert.c d99ffe87e1e1397f4233afcd06841d52d6b17b18 F src/insert.c d99ffe87e1e1397f4233afcd06841d52d6b17b18
F src/legacy.c ad23746f15f67e34577621b1875f639c94839e1f F src/legacy.c ad23746f15f67e34577621b1875f639c94839e1f
F src/main.c c4ba7d8f674d7c880e2e0deea16432d63defa5b2 F src/main.c 49ea4a45223a002d06b5a4a5db36327acafc1779
F src/md5.c 7ae1c39044b95de2f62e066f47bb1deb880a1070 F src/md5.c 7ae1c39044b95de2f62e066f47bb1deb880a1070
F src/os.h d1780e0db95cad01f213d48da22ab490eb4fd345 F src/os.h d1780e0db95cad01f213d48da22ab490eb4fd345
F src/os_common.h fe9604754116bd2f2702d58f82d2d8b89998cb21 F src/os_common.h fe9604754116bd2f2702d58f82d2d8b89998cb21
@@ -60,7 +60,7 @@ F src/random.c eff68e3f257e05e81eae6c4d50a51eb88beb4ff3
F src/select.c aefda626660086addca4ce85c34aeef5d0f44c25 F src/select.c aefda626660086addca4ce85c34aeef5d0f44c25
F src/shell.c 93c96c847228c02fb84bb381875d87ee71fbbeb4 F src/shell.c 93c96c847228c02fb84bb381875d87ee71fbbeb4
F src/sqlite.h.in 80de11cde2c9f78eff4dab0aad1eb5196d6e2a3f F src/sqlite.h.in 80de11cde2c9f78eff4dab0aad1eb5196d6e2a3f
F src/sqliteInt.h 8cf9cf4bd02dacedbf3738ecfad49ea32e599e47 F src/sqliteInt.h 31d5887a802b5f218f604a1fd44fe989873cf2bc
F src/table.c 4521c278892f60e4d630788c0ea5cf4db1e75c49 F src/table.c 4521c278892f60e4d630788c0ea5cf4db1e75c49
F src/tclsqlite.c 3ce001b3c301876a9c8163472077a4c10e0d49f3 F src/tclsqlite.c 3ce001b3c301876a9c8163472077a4c10e0d49f3
F src/test1.c ef00096c283ccfec1b2ae5fdaccb85fb06e24281 F src/test1.c ef00096c283ccfec1b2ae5fdaccb85fb06e24281
@@ -68,17 +68,17 @@ F src/test2.c f4c2f3928f1998fd8cb75a81e33a60e025ea85d4
F src/test3.c 94d0a2a90bccd85802488cb42c69ec8afd2e4646 F src/test3.c 94d0a2a90bccd85802488cb42c69ec8afd2e4646
F src/test4.c a921a69821fd30209589228e64f94e9f715b6fe2 F src/test4.c a921a69821fd30209589228e64f94e9f715b6fe2
F src/test5.c b001fa7f1b9e2dc5c2331de62fc641b5ab2bd7a1 F src/test5.c b001fa7f1b9e2dc5c2331de62fc641b5ab2bd7a1
F src/tokenize.c 368c1c6eb11355188fc4423e77c1708856b16c9b F src/tokenize.c bc7a80e4cf54f42ea4b030c62261c4243133af84
F src/trigger.c 6aaf6d79cc2157c70a06031dd1531707d644cfb4 F src/trigger.c 6aaf6d79cc2157c70a06031dd1531707d644cfb4
F src/update.c b66b1896c9da54678ba3eff2bf0b4d291a95986a F src/update.c b66b1896c9da54678ba3eff2bf0b4d291a95986a
F src/utf.c f03535db72bfa09e24202ccdd245f21d2fc65f0a F src/utf.c f03535db72bfa09e24202ccdd245f21d2fc65f0a
F src/util.c 2aacc79b7bf5df5859813dafd3bf3258f67a5234 F src/util.c 2aacc79b7bf5df5859813dafd3bf3258f67a5234
F src/vacuum.c b8546f4921719458cc537b9e736df52a8256399c F src/vacuum.c 23ec8c5f3134c6315f883d648fa63b72d8c3ead3
F src/vdbe.c 5d35f08682878165bfba796b298fe3615ae9c9fc F src/vdbe.c cad659a06b30c03b870c4a00a828d78f7a69bbcf
F src/vdbe.h 75b241c02431b9c0f16eaa9cdbb34146c6287f52 F src/vdbe.h 75b241c02431b9c0f16eaa9cdbb34146c6287f52
F src/vdbeInt.h 7160653a006b6d2c4a00d204112a095bdf842ab6 F src/vdbeInt.h 3d8e08c54dcb5ca2169db8bb3a37b81a12efaecd
F src/vdbeapi.c c5c6d8f162a9581dde497b1a4034f9a0bf54c355 F src/vdbeapi.c c5c6d8f162a9581dde497b1a4034f9a0bf54c355
F src/vdbeaux.c 4de85e30ca4a83ea0a45eceb7e88ac7a48f4c237 F src/vdbeaux.c daf40a292ec458ed962845a8d95d5c96bc242e04
F src/vdbemem.c bbf621377343bee046547712a144a94f387bb1eb F src/vdbemem.c bbf621377343bee046547712a144a94f387bb1eb
F src/where.c cf8a54641eea01f1af5d09529ad69166db92f658 F src/where.c cf8a54641eea01f1af5d09529ad69166db92f658
F test/all.test 3b692eb43583b52c99c344b2fa8934512d179016 F test/all.test 3b692eb43583b52c99c344b2fa8934512d179016
@@ -140,7 +140,7 @@ F test/minmax.test 6513f9a1bb85fd35ff72b34b7b6634fad6b1e69c
F test/misc1.test 72768ec8cabc952a4cfcddca43d566f9e0bce899 F test/misc1.test 72768ec8cabc952a4cfcddca43d566f9e0bce899
F test/misc2.test 703734f5817215ca54e364833b3bf5ff36fcc21e F test/misc2.test 703734f5817215ca54e364833b3bf5ff36fcc21e
F test/misc3.test eb488314990bfc0959221a1acc465013238bf168 F test/misc3.test eb488314990bfc0959221a1acc465013238bf168
F test/misc4.test e941a0918df0bf3ab42563e35970d98288ddddf7 F test/misc4.test b31a0a08077038b03a9320fd5d9731093da708a8
F test/misuse.test 2a64ce711419f2fd12806ed95af930fd4e7bb8f3 F test/misuse.test 2a64ce711419f2fd12806ed95af930fd4e7bb8f3
F test/notnull.test 7a08117a71e74b0321aaa937dbeb41a09d6eb1d0 F test/notnull.test 7a08117a71e74b0321aaa937dbeb41a09d6eb1d0
F test/null.test c14d0f4739f21e929b8115b72bf0c765b6bb1721 F test/null.test c14d0f4739f21e929b8115b72bf0c765b6bb1721
@@ -240,7 +240,7 @@ F www/tclsqlite.tcl 06a86cba4d7fc88e2bcd633b57702d3d16abebb5
F www/vdbe.tcl 59288db1ac5c0616296b26dce071c36cb611dfe9 F www/vdbe.tcl 59288db1ac5c0616296b26dce071c36cb611dfe9
F www/version3.tcl 092a01f5ef430d2c4acc0ae558d74c4bb89638a0 F www/version3.tcl 092a01f5ef430d2c4acc0ae558d74c4bb89638a0
F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4 F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4
P 7c7f698b2eda7b1b34f5ca7fe104145d8bbd8f56 P 49b991492496e104f5eca620a5d465a742b7ff3a
R b1b16f99b3da9325a0228f34d4f42233 R 360d271fab96b9095f5b4369737eb03f
U drh U drh
Z b40eb69ee75bee6f41ad47e71f93841a Z e2b908232fc8aa315ba06b1f36120ee8

View File

@@ -1 +1 @@
49b991492496e104f5eca620a5d465a742b7ff3a 6db3f122aad25b5226670ce682b7263d55c0d301

View File

@@ -23,7 +23,7 @@
** ROLLBACK ** ROLLBACK
** PRAGMA ** PRAGMA
** **
** $Id: build.c,v 1.241 2004/07/24 03:30:48 drh Exp $ ** $Id: build.c,v 1.242 2004/07/24 14:35:58 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
#include <ctype.h> #include <ctype.h>
@@ -82,6 +82,10 @@ void sqlite3FinishCoding(Parse *pParse){
} }
} }
#ifndef NDEBUG
sqlite3VdbeOp3(v, OP_Noop, 0, 0, pParse->zSql, pParse->zTail - pParse->zSql);
#endif
/* Get the VDBE program ready for execution /* Get the VDBE program ready for execution
*/ */
if( v && pParse->nErr==0 ){ if( v && pParse->nErr==0 ){
@@ -1138,8 +1142,7 @@ char sqlite3AffinityType(const char *zType, int nType){
} }
/* /*
** Come up with a new random value for the schema cookie. Make sure ** Generate code that will increment the schema cookie.
** the new value is different from the old.
** **
** The schema cookie is used to determine when the schema for the ** The schema cookie is used to determine when the schema for the
** database changes. After each schema change, the cookie value ** database changes. After each schema change, the cookie value
@@ -1155,13 +1158,7 @@ char sqlite3AffinityType(const char *zType, int nType){
** 1 chance in 2^32. So we're safe enough. ** 1 chance in 2^32. So we're safe enough.
*/ */
void sqlite3ChangeCookie(sqlite *db, Vdbe *v, int iDb){ void sqlite3ChangeCookie(sqlite *db, Vdbe *v, int iDb){
unsigned char r; sqlite3VdbeAddOp(v, OP_Integer, db->aDb[iDb].schema_cookie+1, 0);
int *pSchemaCookie = &(db->aDb[iDb].schema_cookie);
sqlite3Randomness(1, &r);
*pSchemaCookie = *pSchemaCookie + r + 1;
db->flags |= SQLITE_InternChanges;
sqlite3VdbeAddOp(v, OP_Integer, *pSchemaCookie, 0);
sqlite3VdbeAddOp(v, OP_SetCookie, iDb, 0); sqlite3VdbeAddOp(v, OP_SetCookie, iDb, 0);
} }

View File

@@ -14,7 +14,7 @@
** other files are for internal use by SQLite and should not be ** other files are for internal use by SQLite and should not be
** accessed by users of the library. ** accessed by users of the library.
** **
** $Id: main.c,v 1.247 2004/07/24 03:30:48 drh Exp $ ** $Id: main.c,v 1.248 2004/07/24 14:35:58 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
#include "os.h" #include "os.h"
@@ -1025,7 +1025,7 @@ int sqlite3_prepare(
goto prepare_out; goto prepare_out;
} }
if( sParse.rc==SQLITE_DONE ) sParse.rc = SQLITE_OK; if( sParse.rc==SQLITE_DONE ) sParse.rc = SQLITE_OK;
if( sParse.checkSchema && !schemaIsValid(db) ){ if( sParse.rc!=SQLITE_OK && sParse.checkSchema && !schemaIsValid(db) ){
sParse.rc = SQLITE_SCHEMA; sParse.rc = SQLITE_SCHEMA;
} }
if( sParse.rc==SQLITE_SCHEMA ){ if( sParse.rc==SQLITE_SCHEMA ){

View File

@@ -11,7 +11,7 @@
************************************************************************* *************************************************************************
** Internal interface definitions for SQLite. ** Internal interface definitions for SQLite.
** **
** @(#) $Id: sqliteInt.h,v 1.309 2004/07/24 03:30:48 drh Exp $ ** @(#) $Id: sqliteInt.h,v 1.310 2004/07/24 14:35:58 drh Exp $
*/ */
#ifndef _SQLITEINT_H_ #ifndef _SQLITEINT_H_
#define _SQLITEINT_H_ #define _SQLITEINT_H_
@@ -983,6 +983,7 @@ struct Parse {
Token sErrToken; /* The token at which the error occurred */ Token sErrToken; /* The token at which the error occurred */
Token sNameToken; /* Token with unqualified schema object name */ Token sNameToken; /* Token with unqualified schema object name */
Token sLastToken; /* The last token parsed */ Token sLastToken; /* The last token parsed */
const char *zSql; /* All SQL text */
const char *zTail; /* All SQL text past the last semicolon parsed */ const char *zTail; /* All SQL text past the last semicolon parsed */
Table *pNewTable; /* A table being constructed by CREATE TABLE */ Table *pNewTable; /* A table being constructed by CREATE TABLE */
Vdbe *pVdbe; /* An engine for executing database bytecode */ Vdbe *pVdbe; /* An engine for executing database bytecode */

View File

@@ -15,7 +15,7 @@
** individual tokens and sends those tokens one-by-one over to the ** individual tokens and sends those tokens one-by-one over to the
** parser for analysis. ** parser for analysis.
** **
** $Id: tokenize.c,v 1.79 2004/07/24 03:30:48 drh Exp $ ** $Id: tokenize.c,v 1.80 2004/07/24 14:35:59 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
#include "os.h" #include "os.h"
@@ -431,13 +431,8 @@ int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzErrMsg){
sqlite3SetString(pzErrMsg, "out of memory", (char*)0); sqlite3SetString(pzErrMsg, "out of memory", (char*)0);
return 1; return 1;
} }
#ifndef NDEBUG
if( sqlite3OsFileExists("vdbe_sqltrace") ){
printf("SQL To Compiler: [%s]\n", zSql);
}
#endif
pParse->sLastToken.dyn = 0; pParse->sLastToken.dyn = 0;
pParse->zTail = zSql; pParse->zTail = pParse->zSql = zSql;
while( sqlite3_malloc_failed==0 && zSql[i]!=0 ){ while( sqlite3_malloc_failed==0 && zSql[i]!=0 ){
assert( i>=0 ); assert( i>=0 );
pParse->sLastToken.z = &zSql[i]; pParse->sLastToken.z = &zSql[i];

View File

@@ -14,7 +14,7 @@
** Most of the code in this file may be omitted by defining the ** Most of the code in this file may be omitted by defining the
** SQLITE_OMIT_VACUUM macro. ** SQLITE_OMIT_VACUUM macro.
** **
** $Id: vacuum.c,v 1.26 2004/06/30 09:49:24 danielk1977 Exp $ ** $Id: vacuum.c,v 1.27 2004/07/24 14:35:59 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
#include "os.h" #include "os.h"
@@ -247,6 +247,7 @@ end_of_vacuum:
sqliteFree(zTemp); sqliteFree(zTemp);
} }
if( zSql ) sqliteFree( zSql ); if( zSql ) sqliteFree( zSql );
sqlite3ResetInternalSchema(db, 0);
#endif #endif
return rc; return rc;
} }

View File

@@ -43,7 +43,7 @@
** in this file for details. If in doubt, do not deviate from existing ** in this file for details. If in doubt, do not deviate from existing
** commenting and indentation practices when changing or adding code. ** commenting and indentation practices when changing or adding code.
** **
** $Id: vdbe.c,v 1.404 2004/07/24 03:30:48 drh Exp $ ** $Id: vdbe.c,v 1.405 2004/07/24 14:35:59 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
#include "os.h" #include "os.h"
@@ -508,9 +508,19 @@ int sqlite3VdbeExec(
*/ */
#ifndef NDEBUG #ifndef NDEBUG
if( p->trace ){ if( p->trace ){
if( pc==0 ){
printf("VDBE Execution Trace:\n");
sqlite3VdbePrintSql(p);
}
sqlite3VdbePrintOp(p->trace, pc, pOp); sqlite3VdbePrintOp(p->trace, pc, pOp);
} }
#endif #endif
#ifdef SQLITE_TEST
if( p->trace==0 && pc==0 && sqlite3OsFileExists("vdbe_sqltrace") ){
sqlite3VdbePrintSql(p);
}
#endif
/* Check to see if we need to simulate an interrupt. This only happens /* Check to see if we need to simulate an interrupt. This only happens
** if we have a special test build. ** if we have a special test build.
@@ -2283,13 +2293,20 @@ case OP_ReadCookie: {
** A transaction must be started before executing this opcode. ** A transaction must be started before executing this opcode.
*/ */
case OP_SetCookie: { case OP_SetCookie: {
Db *pDb;
assert( pOp->p2<SQLITE_N_BTREE_META ); assert( pOp->p2<SQLITE_N_BTREE_META );
assert( pOp->p1>=0 && pOp->p1<db->nDb ); assert( pOp->p1>=0 && pOp->p1<db->nDb );
assert( db->aDb[pOp->p1].pBt!=0 ); pDb = &db->aDb[pOp->p1];
assert( pDb->pBt!=0 );
assert( pTos>=p->aStack ); assert( pTos>=p->aStack );
Integerify(pTos); Integerify(pTos);
/* See note about index shifting on OP_ReadCookie */ /* See note about index shifting on OP_ReadCookie */
rc = sqlite3BtreeUpdateMeta(db->aDb[pOp->p1].pBt, 1+pOp->p2, (int)pTos->i); rc = sqlite3BtreeUpdateMeta(pDb->pBt, 1+pOp->p2, (int)pTos->i);
if( pOp->p2==0 ){
/* When the schema cookie changes, record the new cookie internally */
pDb->schema_cookie = pTos->i;
db->flags |= SQLITE_InternChanges;
}
assert( (pTos->flags & MEM_Dyn)==0 ); assert( (pTos->flags & MEM_Dyn)==0 );
pTos--; pTos--;
break; break;
@@ -3730,6 +3747,7 @@ case OP_ParseSchema: {
InitData initData; InitData initData;
assert( iDb>=0 && iDb<db->nDb ); assert( iDb>=0 && iDb<db->nDb );
if( !DbHasProperty(db, iDb, DB_SchemaLoaded) ) break;
zMaster = iDb==1 ? TEMP_MASTER_NAME : MASTER_NAME; zMaster = iDb==1 ? TEMP_MASTER_NAME : MASTER_NAME;
initData.db = db; initData.db = db;
initData.pzErrMsg = &p->zErrMsg; initData.pzErrMsg = &p->zErrMsg;

View File

@@ -367,6 +367,7 @@ int sqlite3VdbeCursorMoveto(Cursor*);
#if !defined(NDEBUG) || defined(VDBE_PROFILE) #if !defined(NDEBUG) || defined(VDBE_PROFILE)
void sqlite3VdbePrintOp(FILE*, int, Op*); void sqlite3VdbePrintOp(FILE*, int, Op*);
#endif #endif
void sqlite3VdbePrintSql(Vdbe*);
int sqlite3VdbeSerialTypeLen(u32); int sqlite3VdbeSerialTypeLen(u32);
u32 sqlite3VdbeSerialType(Mem*); u32 sqlite3VdbeSerialType(Mem*);
int sqlite3VdbeSerialPut(unsigned char*, Mem*); int sqlite3VdbeSerialPut(unsigned char*, Mem*);

View File

@@ -416,7 +416,7 @@ static char *displayP3(Op *pOp, char *zTemp, int nTemp){
} }
default: { default: {
zP3 = pOp->p3; zP3 = pOp->p3;
if( zP3==0 ){ if( zP3==0 || pOp->opcode==OP_Noop ){
zP3 = ""; zP3 = "";
} }
} }
@@ -521,6 +521,23 @@ int sqlite3VdbeList(
return rc; return rc;
} }
/*
** Print the SQL that was used to generate a VDBE program.
*/
void sqlite3VdbePrintSql(Vdbe *p){
#ifdef SQLITE_DEBUG
int nOp = p->nOp;
VdbeOp *pOp;
if( nOp<2 ) return;
pOp = &p->aOp[nOp-2];
if( pOp->opcode==OP_Noop && pOp->p3!=0 ){
const char *z = pOp->p3;
while( isspace(*z) ) z++;
printf("SQL: [%s]\n", z);
}
#endif
}
/* /*
** Prepare a virtual machine for execution. This involves things such ** Prepare a virtual machine for execution. This involves things such
** as allocating stack space and initializing the program counter. ** as allocating stack space and initializing the program counter.
@@ -571,12 +588,12 @@ void sqlite3VdbeMakeReady(
){ ){
int i; int i;
printf("VDBE Program Listing:\n"); printf("VDBE Program Listing:\n");
sqlite3VdbePrintSql(p);
for(i=0; i<p->nOp; i++){ for(i=0; i<p->nOp; i++){
sqlite3VdbePrintOp(stdout, i, &p->aOp[i]); sqlite3VdbePrintOp(stdout, i, &p->aOp[i]);
} }
} }
if( sqlite3OsFileExists("vdbe_trace") ){ if( sqlite3OsFileExists("vdbe_trace") ){
printf("VDBE Execution Trace:\n");
p->trace = stdout; p->trace = stdout;
} }
#endif #endif

View File

@@ -13,7 +13,7 @@
# This file implements tests for miscellanous features that were # This file implements tests for miscellanous features that were
# left out of other test files. # left out of other test files.
# #
# $Id: misc4.test,v 1.4 2004/07/24 03:30:49 drh Exp $ # $Id: misc4.test,v 1.5 2004/07/24 14:35:59 drh Exp $
set testdir [file dirname $argv0] set testdir [file dirname $argv0]
source $testdir/tester.tcl source $testdir/tester.tcl
@@ -28,6 +28,8 @@ do_test misc4-1.1 {
CREATE TABLE t1(x); CREATE TABLE t1(x);
INSERT INTO t1 VALUES(1); INSERT INTO t1 VALUES(1);
} }
} {}
do_test misc4-1.2 {
set sql {CREATE TEMP TABLE t2 AS SELECT * FROM t1} set sql {CREATE TEMP TABLE t2 AS SELECT * FROM t1}
set stmt [sqlite3_prepare $DB $sql -1 TAIL] set stmt [sqlite3_prepare $DB $sql -1 TAIL]
execsql { execsql {
@@ -36,7 +38,11 @@ do_test misc4-1.1 {
INSERT INTO t1 SELECT * FROM t1; INSERT INTO t1 SELECT * FROM t1;
ROLLBACK; ROLLBACK;
} }
} {}
do_test misc4-1.3 {
sqlite3_step $stmt sqlite3_step $stmt
} SQLITE_DONE
do_test misc4-1.4 {
execsql { execsql {
SELECT * FROM temp.t2; SELECT * FROM temp.t2;
} }
@@ -45,12 +51,12 @@ do_test misc4-1.1 {
# Drop the temporary table, then rerun the prepared statement to # Drop the temporary table, then rerun the prepared statement to
# recreate it again. This recreates ticket #807. # recreate it again. This recreates ticket #807.
# #
do_test misc4-1.2 { do_test misc4-1.5 {
execsql {DROP TABLE t2} execsql {DROP TABLE t2}
sqlite3_reset $stmt sqlite3_reset $stmt
sqlite3_step $stmt sqlite3_step $stmt
} {SQLITE_ERROR} } {SQLITE_ERROR}
do_test misc4-1.3 { do_test misc4-1.6 {
sqlite3_finalize $stmt sqlite3_finalize $stmt
} {SQLITE_SCHEMA} } {SQLITE_SCHEMA}