-C Add\sthe\ssqliteErrorMsg()\sfunction\sand\suse\sit\sto\sgenerate\serror\smessage\ntext\sduring\sparsing\sand\scode\sgeneration.\s\sThis\ssimplifies\sthe\scode\nsomewhat\sand\smakes\sit\seasier\sto\shandle\snames\swith\sa\sdatabase\sprefix.\s(CVS\s891)
-D 2003-03-31T02:12:47
+C Minor\sfollow-on\schanges\sto\sthe\srecent\sATTACH\spatch.\s(CVS\s892)
+D 2003-03-31T13:36:09
F Makefile.in 3c4ba24253e61c954d67adbbb4245e7117c5357e
F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906
F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
F src/auth.c f37bfc9451b8c1fa52f34adff474560018892729
F src/btree.c dba4d12945228dd7e94de7da0e1d8638b70d99f2
F src/btree.h 8209bfadf5845d4fdaa60f471bb360f894cd4095
-F src/build.c 5ea24a62f447f3beabe6fb6218ec24f4dd6aff95
+F src/build.c 81d31f2e63d51683ee653df6399acc3c3a2e3672
F src/delete.c 58d698779a6b7f819718ecd45b310a9de8537088
F src/encode.c faf03741efe921755ec371cf4a6984536de00042
F src/expr.c b8daee83f837b24a22d889200bdd74973ca2d8db
F src/parse.y 3be47fa18323aa2e3364fc42bf7a6ba5b3cc0a81
F src/printf.c fc5fdef6e92ad205005263661fe9716f55a49f3e
F src/random.c 19e8e00fe0df32a742f115773f57651be327cabe
-F src/select.c 7d69e569339e7ce9e672eb41d50a454110ea8a05
+F src/select.c 14e2e2a512f4edfc75fb310ebcb502ff3ee87402
F src/shell.c c13ff46e905a59eb1c7dbea7c1850f8f115e6395
F src/shell.tcl 27ecbd63dd88396ad16d81ab44f73e6c0ea9d20e
F src/sqlite.h.in be3e56214fecc73d72195ca62d8a3d6663602ff4
-F src/sqliteInt.h 1ce5af48f980d63ec6fbb41d3f8517b4eaf446ce
+F src/sqliteInt.h 18eb5a7f2ba010ad7d7ba81625f4b35fe3438239
F src/table.c eed2098c9b577aa17f8abe89313a9c4413f57d63
F src/tclsqlite.c 4cb0ffa863123ae037db359849a231ff5cebfed4
F src/test1.c 7ad4e6308dde0bf5a0f0775ce20cb2ec37a328f8
F src/tokenize.c 675b4718d17c69fe7609dc8e85e426ef002be811
F src/trigger.c bd5a5b234b47f28f9f21a46243dcaf1c5b2383a3
F src/update.c b368369f1fbe6d7f56a53e5ffad3b75dae9e3e1a
-F src/util.c 96178ddf8a01fe81f66620f555a53bcff54bd3d7
+F src/util.c 8953c612a036e30f24c1c1f5a1498176173daa37
F src/vdbe.c 7171dbe873760f403b2501e96fd3d1bd852b3ce8
F src/vdbe.h ed43771f1dc2b994d5c484fdf2eab357c6ef0ee3
F src/where.c e5733f7d5e9cc4ed3590dc3401f779e7b7bb8127
F www/sqlite.tcl ae3dcfb077e53833b59d4fcc94d8a12c50a44098
F www/tclsqlite.tcl 1db15abeb446aad0caf0b95b8b9579720e4ea331
F www/vdbe.tcl 2013852c27a02a091d39a766bc87cff329f21218
-P c7c5e927a54f0fbc2ca625754787aff4d9c4eff1
-R 049a3c05f7f7ec86278cb228c093cf6f
+P 1d3fc977211abdc7ba3fd51d661863e8ce5aef69
+R 8452f551322a2a47e2174b852766e085
U drh
-Z 310a08d8c23f76a9c9a4ece27530433b
+Z 6062850ebc36422b5dc928e90d3f98bb
-1d3fc977211abdc7ba3fd51d661863e8ce5aef69
\ No newline at end of file
+e80afe75b33d4eacb40ef6128cf688f7c3253984
\ No newline at end of file
** ROLLBACK
** PRAGMA
**
-** $Id: build.c,v 1.138 2003/03/31 02:12:47 drh Exp $
+** $Id: build.c,v 1.139 2003/03/31 13:36:09 drh Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>
if( pParse->explain ) return;
db = pParse->db;
+ if( db->nDb>=MAX_ATTACHED ){
+ sqliteErrorMsg(pParse, "too many attached databases - max %d",
+ MAX_ATTACHED);
+ return;
+ }
if( db->aDb==db->aDbStatic ){
aNew = sqliteMalloc( sizeof(db->aDb[0])*3 );
if( aNew==0 ) return;
** This file contains C code routines that are called by the parser
** to handle SELECT statements in SQLite.
**
-** $Id: select.c,v 1.129 2003/03/31 02:12:47 drh Exp $
+** $Id: select.c,v 1.130 2003/03/31 13:36:09 drh Exp $
*/
#include "sqliteInt.h"
** The subquery is p->pSrc->a[iFrom]. isAgg is true if the outer query
** uses aggregates and subqueryIsAgg is true if the subquery uses aggregates.
**
-** If flattening is not attempted, this routine is a no-op and return 0.
+** If flattening is not attempted, this routine is a no-op and returns 0.
** If flattening is attempted this routine returns 1.
**
** All of the expression analysis must occur on both the outer query and
*************************************************************************
** Internal interface definitions for SQLite.
**
-** @(#) $Id: sqliteInt.h,v 1.168 2003/03/31 02:12:48 drh Exp $
+** @(#) $Id: sqliteInt.h,v 1.169 2003/03/31 13:36:09 drh Exp $
*/
#include "config.h"
#include "sqlite.h"
*/
#define NULL_DISTINCT_FOR_UNIQUE 1
+/*
+** The maximum number of attached databases. This must be at least 2
+** in order to support the main database file (0) and the file used to
+** hold temporary tables (1). And it must be less than 256 because the
+** an unsigned character is used to stored the database index.
+*/
+#define MAX_ATTACHED 10
+
/*
** Integers of known sizes. These typedefs might change for architectures
** where the sizes very. Preprocessor macros are available so that the
** This file contains functions for allocating memory, comparing
** strings, and stuff like that.
**
-** $Id: util.c,v 1.59 2003/03/31 02:12:48 drh Exp $
+** $Id: util.c,v 1.60 2003/03/31 13:36:09 drh Exp $
*/
#include "sqliteInt.h"
#include <stdarg.h>
nByte = 1 + strlen(zFormat);
va_start(ap, zFormat);
for(i=0; zFormat[i]; i++){
- if( zFormat[i]!='%' && zFormat[i+1] ) continue;
+ if( zFormat[i]!='%' || zFormat[i+1]==0 ) continue;
i++;
switch( zFormat[i] ){
case 'd': {
pParse->zErrMsg = z;
va_start(ap, zFormat);
for(i=j=0; zFormat[i]; i++){
- if( zFormat[i]!='%' ) continue;
+ if( zFormat[i]!='%' || zFormat[i+1]==0 ) continue;
if( i>j ){
memcpy(z, &zFormat[j], i-j);
z += i-j;