-C file\sspaceanal.tcl\swas\sinitially\sadded\son\sbranch\sversion_2.\s(CVS\s1638)
-D 2004-06-19T11:57:40
+C Omit\sthe\ssqlite3VdbeCode()\sroutine.\s\sUse\ssqlite3NameFromToken()\smore\sto\nreduce\sthe\samount\sof\scode.\s(CVS\s1639)
+D 2004-06-19T14:49:12
F Makefile.in d69d53c543518c1572ee0a8e8723d7e00bdb2266
F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457
F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
F sqlite.1 83f4a9d37bdf2b7ef079a82d54eaf2e3509ee6ea
F sqlite.pc.in 30552343140c53304c2a658c080fbe810cd09ca2
F sqlite3.def c4bc3f10bccded91d06328c4b2b742ace4d3ed9f
-F src/attach.c 293da1e8e3ea6e9244bb3d744da930606fbb4ab0
+F src/attach.c 78ca379f2db3701cca20055cdd802c6bd3b49870
F src/auth.c 204e1e9c45e64315589bc8b62cba5d9de29b6a3c
F src/btree.c 0cf8a52a57a7eb13d50719114ee1fa353e89d7d3
F src/btree.h 32f96abef464cf8765b23ca669acfe90d191fcc5
-F src/build.c d7827169529c76cb86760bc1bc06a931c4ff6c8c
+F src/build.c c843ef3d4440b591e154d0e78c664e213236db68
F src/date.c b3e8b2bef1e3f2ce24e5b057203036defb18c3f1
F src/delete.c a5191011b7429dff939df631b8bdcc1714b8d7aa
F src/encode.c a876af473d1d636faa3dca51c7571f2e007eea37
-F src/expr.c 01cdf6a632ff66acfff667932c41bb79d18d5077
+F src/expr.c 9ae0e55a230802da35a55fd6e87533cca0301af9
F src/func.c b7a8b55200d34bf01fe2a52462db27399f291777
F src/hash.c 440c2f8cb373ee1b4e13a0988489c7cd95d55b6f
F src/hash.h 762d95f1e567664d1eafc1687de755626be962fb
F src/pager.c d627c5e46084b0c757a16cec2c17adcc8046f8ee
F src/pager.h bc58d32a9dee464f7268fb68652c130a4216e438
F src/parse.y 097438674976355a10cf177bd97326c548820b86
-F src/pragma.c 42de2b327d17af5167de66744a731f8dae8bbe96
+F src/pragma.c 424d812d7411a83816f0d7c41170a5d6e13b3824
F src/printf.c 823b6a5cbedb6971a9e62f5d83204fe9b0be7c1b
F src/random.c eff68e3f257e05e81eae6c4d50a51eb88beb4ff3
-F src/select.c 91570af7f13d1c5584f3b711676e1226ee12194e
+F src/select.c 9aa82bbc63983a304bc51d4a7c259e759f92c8dc
F src/shell.c 24b641700c9d90f361fcfa4f432c5b4aff704e6d
F src/sqlite.h.in c34414b9f5330f875e26a69fe685e38ca45f11b9
-F src/sqliteInt.h 6c141ab926097c9671e22641fbb70e24c58b883c
+F src/sqliteInt.h 6a34196b2fc203b738ed3596c5ffef1d0748cc95
F src/table.c af14284fa36c8d41f6829e3f2819dce07d3e2de2
F src/tclsqlite.c ddef9b18271fb46344d3d35446bd7c001465a69a
F src/test1.c ee426e026ad9223483e7a84bb68849fc6e9f542e
F src/test4.c a921a69821fd30209589228e64f94e9f715b6fe2
F src/test5.c 1b7c275b2929dbd034a567255d2aca339410d1d6
F src/tokenize.c 900374b6b37f04748bcd48c2d29a41c251542935
-F src/trigger.c b05699cf40e99a330649eabfb1cece05ff73e469
+F src/trigger.c fb38c34d933f32dbb6c31b48935f33d868cc7658
F src/update.c f9a03233577e0c3d57234d1957963875fc941da2
F src/utf.c 3a2596013e4b9582d075ca742de7f067ff7dee95
F src/util.c 1b3743413e11cae51a899dc03fa9b829a3a1f160
F src/vacuum.c fcb930215a3f6c50087300782555f61ad11dd80c
F src/vdbe.c 324ad6157f9bd0a770be70a4e7dca2cb0d27bd82
-F src/vdbe.h 46f74444a213129bc4b5ce40124dd8ed613b0cde
+F src/vdbe.h 9ad64674c4c7acd6744174cab5d34013413ef0d3
F src/vdbeInt.h 54af2e00301cde7573b86ea8a9b29a2152e762f7
F src/vdbeapi.c 1601fb2d015fc88ce3dd6a6a50cf44b6419fdbbf
-F src/vdbeaux.c 82074da25adb94aabd80a407b32f91fa9389baca
+F src/vdbeaux.c cf9caac1163ea384e49b11cb0d405082eef8741d
F src/vdbemem.c 9359c53386e070fea9f5403cab0c6f0cfe36496b
F src/where.c 6507074d8ce3f78e7a4cd33f667f11e62020553e
F test/all.test 569a92a8ee88f5300c057cc4a8f50fbbc69a3242
F www/vdbe.tcl 59288db1ac5c0616296b26dce071c36cb611dfe9
F www/version3.tcl af528563442e3039928f9018327a18157e53a44f
F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4
-P a5c98a272ec30971a9aa9ba2a6e2dec1a4dd8c18
-R 5f8f7f04d9aeffdc923f82538c2bcc15
+P 936e60d7b122079de23db301a55c6e8510c82e18
+R ed730593128daa92468fa18fd3a57762
U drh
-Z 27045e58200021e41670a7eb9cdb0650
+Z f5520e1d232faa01844b8961883e0286
-936e60d7b122079de23db301a55c6e8510c82e18
\ No newline at end of file
+99d0436e0ee1c917b2b7bbf005f05288b535648a
\ No newline at end of file
*************************************************************************
** This file contains code used to implement the ATTACH and DETACH commands.
**
-** $Id: attach.c,v 1.15 2004/06/19 09:08:16 danielk1977 Exp $
+** $Id: attach.c,v 1.16 2004/06/19 14:49:12 drh Exp $
*/
#include "sqliteInt.h"
return;
}
- zFile = 0;
- sqlite3SetNString(&zFile, pFilename->z, pFilename->n, 0);
+ zFile = sqlite3NameFromToken(pFilename);;
if( zFile==0 ) return;
- sqlite3Dequote(zFile);
#ifndef SQLITE_OMIT_AUTHORIZATION
if( sqlite3AuthCheck(pParse, SQLITE_ATTACH, zFile, 0, 0)!=SQLITE_OK ){
sqliteFree(zFile);
}
#endif /* SQLITE_OMIT_AUTHORIZATION */
- zName = 0;
- sqlite3SetNString(&zName, pDbname->z, pDbname->n, 0);
+ zName = sqlite3NameFromToken(pDbname);
if( zName==0 ) return;
- sqlite3Dequote(zName);
for(i=0; i<db->nDb; i++){
if( db->aDb[i].zName && sqlite3StrICmp(db->aDb[i].zName, zName)==0 ){
sqlite3ErrorMsg(pParse, "database %z is already in use", zName);
}
return 0;
}
-
-
-
** ROLLBACK
** PRAGMA
**
-** $Id: build.c,v 1.224 2004/06/19 09:35:36 danielk1977 Exp $
+** $Id: build.c,v 1.225 2004/06/19 14:49:12 drh Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>
}
/*
-** Construct the name of a user table or index from a token.
+** Given a token, return a string that consists of the text of that
+** token with any quotations removed. Space to hold the returned string
+** is obtained from sqliteMalloc() and must be freed by the calling
+** function.
**
-** Space to hold the name is obtained from sqliteMalloc() and must
-** be freed by the calling function.
+** Tokens are really just pointers into the original SQL text and so
+** are not \000 terminated and are not persistent. The returned string
+** is \000 terminated and is persistent.
*/
-char *sqlite3TableNameFromToken(Token *pName){
- char *zName = sqliteStrNDup(pName->z, pName->n);
- sqlite3Dequote(zName);
+char *sqlite3NameFromToken(Token *pName){
+ char *zName;
+ if( pName ){
+ zName = sqliteStrNDup(pName->z, pName->n);
+ sqlite3Dequote(zName);
+ }else{
+ zName = 0;
+ }
return zName;
}
if( isTemp ) iDb = 1;
pParse->sNameToken = *pName;
- zName = sqlite3TableNameFromToken(pName);
+ zName = sqlite3NameFromToken(pName);
if( zName==0 ) return;
if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){
sqliteFree(zName);
void sqlite3AddColumn(Parse *pParse, Token *pName){
Table *p;
int i;
- char *z = 0;
+ char *z;
Column *pCol;
if( (p = pParse->pNewTable)==0 ) return;
- sqlite3SetNString(&z, pName->z, pName->n, 0);
+ z = sqlite3NameFromToken(pName);
if( z==0 ) return;
- sqlite3Dequote(z);
for(i=0; i<p->nCol; i++){
if( sqlite3StrICmp(z, p->aCol[i].zName)==0 ){
sqlite3ErrorMsg(pParse, "duplicate column name: %s", z);
Table *sqlite3TableFromToken(Parse *pParse, Token *pTok){
char *zName;
Table *pTab;
- zName = sqlite3TableNameFromToken(pTok);
+ zName = sqlite3NameFromToken(pTok);
if( zName==0 ) return 0;
pTab = sqlite3FindTable(pParse->db, zName, 0);
sqliteFree(zName);
** own name.
*/
if( pName ){
- zName = sqlite3TableNameFromToken(pName);
+ zName = sqlite3NameFromToken(pName);
if( zName==0 ) goto exit_create_index;
if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){
goto exit_create_index;
sqlite3VdbeOp3(v, OP_CreateIndex, 0, iDb,(char*)&pIndex->tnum,P3_POINTER);
pIndex->tnum = 0;
if( pTblName ){
- sqlite3VdbeCode(v,
- OP_Dup, 0, 0,
- OP_Integer, iDb, 0,
- 0);
+ sqlite3VdbeAddOp(v, OP_Dup, 0, 0);
+ sqlite3VdbeAddOp(v, OP_Integer, iDb, 0);
sqlite3VdbeOp3(v, OP_OpenWrite, 1, 0,
(char*)&pIndex->keyInfo, P3_KEYINFO);
}
pList->a = a;
}
memset(&pList->a[pList->nId], 0, sizeof(pList->a[0]));
- if( pToken ){
- char **pz = &pList->a[pList->nId].zName;
- sqlite3SetNString(pz, pToken->z, pToken->n, 0);
- if( *pz==0 ){
- sqlite3IdListDelete(pList);
- return 0;
- }else{
- sqlite3Dequote(*pz);
- }
- }
+ pList->a[pList->nId].zName = sqlite3NameFromToken(pToken);
pList->nId++;
return pList;
}
** Then C is the table name and B is the database name.
*/
SrcList *sqlite3SrcListAppend(SrcList *pList, Token *pTable, Token *pDatabase){
+ struct SrcList_item *pItem;
if( pList==0 ){
pList = sqliteMalloc( sizeof(SrcList) );
if( pList==0 ) return 0;
}
pList = pNew;
}
- memset(&pList->a[pList->nSrc], 0, sizeof(pList->a[0]));
+ pItem = &pList->a[pList->nSrc];
+ memset(pItem, 0, sizeof(pList->a[0]));
if( pDatabase && pDatabase->z==0 ){
pDatabase = 0;
}
pDatabase = pTable;
pTable = pTemp;
}
- if( pTable ){
- char **pz = &pList->a[pList->nSrc].zName;
- sqlite3SetNString(pz, pTable->z, pTable->n, 0);
- if( *pz==0 ){
- sqlite3SrcListDelete(pList);
- return 0;
- }else{
- sqlite3Dequote(*pz);
- }
- }
- if( pDatabase ){
- char **pz = &pList->a[pList->nSrc].zDatabase;
- sqlite3SetNString(pz, pDatabase->z, pDatabase->n, 0);
- if( *pz==0 ){
- sqlite3SrcListDelete(pList);
- return 0;
- }else{
- sqlite3Dequote(*pz);
- }
- }
- pList->a[pList->nSrc].iCursor = -1;
+ pItem->zName = sqlite3NameFromToken(pTable);
+ pItem->zDatabase = sqlite3NameFromToken(pDatabase);
+ pItem->iCursor = -1;
pList->nSrc++;
return pList;
}
*/
void sqlite3SrcListAddAlias(SrcList *pList, Token *pToken){
if( pList && pList->nSrc>0 ){
- int i = pList->nSrc - 1;
- sqlite3SetNString(&pList->a[i].zAlias, pToken->z, pToken->n, 0);
- sqlite3Dequote(pList->a[i].zAlias);
+ pList->a[pList->nSrc-1].zAlias = sqlite3NameFromToken(pToken);
}
}
}
return db->pValue;
}
-
** This file contains routines used for analyzing expressions and
** for generating VDBE code that evaluates expressions in SQLite.
**
-** $Id: expr.c,v 1.144 2004/06/17 07:53:03 danielk1977 Exp $
+** $Id: expr.c,v 1.145 2004/06/19 14:49:12 drh Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>
struct ExprList_item *pItem = &pList->a[pList->nExpr++];
memset(pItem, 0, sizeof(*pItem));
pItem->pExpr = pExpr;
- if( pName ){
- sqlite3SetNString(&pItem->zName, pName->z, pName->n, 0);
- sqlite3Dequote(pItem->zName);
- }
+ pItem->zName = sqlite3NameFromToken(pName);
}
return pList;
}
sqlite *db = pParse->db; /* The database */
assert( pColumnToken && pColumnToken->z ); /* The Z in X.Y.Z cannot be NULL */
- if( pDbToken && pDbToken->z ){
- zDb = sqliteStrNDup(pDbToken->z, pDbToken->n);
- sqlite3Dequote(zDb);
- }else{
- zDb = 0;
- }
- if( pTableToken && pTableToken->z ){
- zTab = sqliteStrNDup(pTableToken->z, pTableToken->n);
- sqlite3Dequote(zTab);
- }else{
- assert( zDb==0 );
- zTab = 0;
- }
- zCol = sqliteStrNDup(pColumnToken->z, pColumnToken->n);
- sqlite3Dequote(zCol);
+ zDb = sqlite3NameFromToken(pDbToken);
+ zTab = sqlite3NameFromToken(pTableToken);
+ zCol = sqlite3NameFromToken(pColumnToken);
if( sqlite3_malloc_failed ){
return 1; /* Leak memory (zDb and zTab) if malloc fails */
}
}
return 0;
}
-
*************************************************************************
** This file contains code used to implement the PRAGMA command.
**
-** $Id: pragma.c,v 1.48 2004/06/18 23:21:47 dougcurrie Exp $
+** $Id: pragma.c,v 1.49 2004/06/19 14:49:12 drh Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>
if( strcmp(zLeft,zRight)==0 && (v = sqlite3GetVdbe(pParse))!=0 ){
sqlite3VdbeSetNumCols(v, 1);
sqlite3VdbeSetColName(v, 0, aPragma[i].zName, P3_STATIC);
- sqlite3VdbeCode(v, OP_Integer, (db->flags & aPragma[i].mask)!=0, 0,
- OP_Callback, 1, 0, 0);
+ sqlite3VdbeAddOp(v, OP_Integer, (db->flags & aPragma[i].mask)!=0, 0);
+ sqlite3VdbeAddOp(v, OP_Callback, 1, 0);
}else if( getBoolean(zRight) ){
db->flags |= aPragma[i].mask;
}else{
Vdbe *v = sqlite3GetVdbe(pParse);
if( v==0 ) return;
- zLeft = sqliteStrNDup(pLeft->z, pLeft->n);
- sqlite3Dequote(zLeft);
+ zLeft = sqlite3NameFromToken(pLeft);
if( minusFlag ){
zRight = 0;
sqlite3SetNString(&zRight, "-", 1, pRight->z, pRight->n, 0);
}else{
- zRight = sqliteStrNDup(pRight->z, pRight->n);
- sqlite3Dequote(zRight);
+ zRight = sqlite3NameFromToken(pRight);
}
if( sqlite3AuthCheck(pParse, SQLITE_PRAGMA, zLeft, zRight, 0) ){
goto pragma_out;
** This file contains C code routines that are called by the parser
** to handle SELECT statements in SQLite.
**
-** $Id: select.c,v 1.192 2004/06/17 07:53:03 danielk1977 Exp $
+** $Id: select.c,v 1.193 2004/06/19 14:49:12 drh Exp $
*/
#include "sqliteInt.h"
if( pEList->a[j].zName && (pE->op==TK_ID || pE->op==TK_STRING) ){
char *zName, *zLabel;
zName = pEList->a[j].zName;
- assert( pE->token.z );
- zLabel = sqliteStrNDup(pE->token.z, pE->token.n);
- sqlite3Dequote(zLabel);
+ zLabel = sqlite3NameFromToken(&pE->token);
+ assert( zLabel!=0 );
if( sqlite3StrICmp(zName, zLabel)==0 ){
iCol = j;
}
*************************************************************************
** Internal interface definitions for SQLite.
**
-** @(#) $Id: sqliteInt.h,v 1.292 2004/06/19 09:35:37 danielk1977 Exp $
+** @(#) $Id: sqliteInt.h,v 1.293 2004/06/19 14:49:12 drh Exp $
*/
#include "config.h"
#include "sqlite3.h"
void sqlite3Vacuum(Parse*, Token*);
int sqlite3RunVacuum(char**, sqlite*);
int sqlite3GlobCompare(const unsigned char*,const unsigned char*);
-char *sqlite3TableNameFromToken(Token*);
+char *sqlite3NameFromToken(Token*);
int sqlite3ExprCheck(Parse*, Expr*, int, int*);
int sqlite3ExprType(Expr*);
int sqlite3ExprCompare(Expr*, Expr*);
/* Check that the trigger name is not reserved and that no trigger of the
** specified name exists */
- zName = sqlite3TableNameFromToken(pName);
+ zName = sqlite3NameFromToken(pName);
if( !zName || SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){
goto trigger_cleanup;
}
** or VDBE. The VDBE implements an abstract machine that runs a
** simple program to access and modify the underlying database.
**
-** $Id: vdbe.h,v 1.85 2004/06/05 10:22:18 danielk1977 Exp $
+** $Id: vdbe.h,v 1.86 2004/06/19 14:49:12 drh Exp $
*/
#ifndef _SQLITE_VDBE_H_
#define _SQLITE_VDBE_H_
void sqlite3VdbeCreateCallback(Vdbe*, int*);
int sqlite3VdbeAddOp(Vdbe*,int,int,int);
int sqlite3VdbeOp3(Vdbe*,int,int,int,const char *zP3,int);
-int sqlite3VdbeCode(Vdbe*,...);
int sqlite3VdbeAddOpList(Vdbe*, int nOp, VdbeOpList const *aOp);
void sqlite3VdbeChangeP1(Vdbe*, int addr, int P1);
void sqlite3VdbeChangeP2(Vdbe*, int addr, int P2);
return addr;
}
-/*
-** Add multiple opcodes. The list is terminated by an opcode of 0.
-*/
-int sqlite3VdbeCode(Vdbe *p, ...){
- int addr;
- va_list ap;
- int opcode, p1, p2;
- va_start(ap, p);
- addr = p->nOp;
- while( (opcode = va_arg(ap,int))!=0 ){
- p1 = va_arg(ap,int);
- p2 = va_arg(ap,int);
- sqlite3VdbeAddOp(p, opcode, p1, p2);
- }
- va_end(ap);
- return addr;
-}
-
-
-
/*
** Create a new symbolic label for an instruction that has yet to be
** coded. The symbolic label is really just a negative number. The