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

:-) (CVS 14)

FossilOrigin-Name: 1bb8ee8d9f1d3c409a11910e7552e4bb5e7f5f87
This commit is contained in:
drh
2000-05-30 13:44:19 +00:00
parent 8d2cb149ea
commit dcc581ccae
8 changed files with 134 additions and 30 deletions

View File

@@ -1,22 +1,22 @@
C :-)\s(CVS\s13) C :-)\s(CVS\s14)
D 2000-05-30T03:28:36 D 2000-05-30T13:44:19
F COPYRIGHT 74a8a6531a42e124df07ab5599aad63870fa0bd4 F COPYRIGHT 74a8a6531a42e124df07ab5599aad63870fa0bd4
F Makefile.in 89921c1ee4de75275bfadfbac198396da31704d1 F Makefile.in 89921c1ee4de75275bfadfbac198396da31704d1
F README 6b5960603c7f8bf42fc022b4b6436f242f238dbb F README 6b5960603c7f8bf42fc022b4b6436f242f238dbb
F configure 00a5b5c82147a576fa6e82d7c1b0d55c321d6d2c x F configure 00a5b5c82147a576fa6e82d7c1b0d55c321d6d2c x
F configure.in 6ccfd5fc80517f7cfe605a7fc7e0f62d962a233c F configure.in 6ccfd5fc80517f7cfe605a7fc7e0f62d962a233c
F doc/lemon.html e233a3e97a779c7a87e1bc4528c664a58e49dd47 F doc/lemon.html e233a3e97a779c7a87e1bc4528c664a58e49dd47
F src/build.c 94d1bda19f4129991e4e8bef2278a0398a49b0ec F src/build.c bc81ec2f7c3296c1f784f7c94d2d8afea9f787e7
F src/dbbe.c ab05293e89525041eaab8b4aca10516db3648792 F src/dbbe.c ab05293e89525041eaab8b4aca10516db3648792
F src/dbbe.h bedeb3a0985bb584458e7849fb59927e99e751e6 F src/dbbe.h bedeb3a0985bb584458e7849fb59927e99e751e6
F src/main.c 25cce7bce0eb3ba10bada7c05f4b38dc6dbbc86f F src/main.c 25cce7bce0eb3ba10bada7c05f4b38dc6dbbc86f
F src/parse.y 265c8596598afba0a94b94acd9c866d01603dfe5 F src/parse.y 265c8596598afba0a94b94acd9c866d01603dfe5
F src/shell.c 125f84ea5f8b725ba474d4702b575d062cc94d92 F src/shell.c 125f84ea5f8b725ba474d4702b575d062cc94d92
F src/sqlite.h 2397c17a8f4ca90c09acab0100dc7e2f8f441b69 F src/sqlite.h 2397c17a8f4ca90c09acab0100dc7e2f8f441b69
F src/sqliteInt.h 0365970442441b5e9b74e1e828afdeac7b0662be F src/sqliteInt.h 562760efc29cf5b37a9029de04a5a8bca156f025
F src/tclsqlite.c 30f4317e1fc9119b130f29ee5dac4ab9121de68b F src/tclsqlite.c 9efd29f79ded6a900aa3d142169c8bfe03b7affd
F src/tokenize.c ab578d90ec6ab117b7ade6e6cfbcb5b0f9cad500 F src/tokenize.c 948b8897ba211b58069d4a4465be23a2c639cf18
F src/util.c 321c136fc1a4d5821bad0f990c6374ef0785a118 F src/util.c dc1e1814cf69587e6ed58b82dd880ddb2165f3ce
F src/vdbe.c 80132b6bb9a744d1990a1c16666d54baaff2dbc3 F src/vdbe.c 80132b6bb9a744d1990a1c16666d54baaff2dbc3
F src/vdbe.h e721ad308f2e6ca805cebc4dd0a196ce4419d030 F src/vdbe.h e721ad308f2e6ca805cebc4dd0a196ce4419d030
F src/where.c be3973952e9bb5d2bb0bc5523b03f5d1f9e9d6f9 F src/where.c be3973952e9bb5d2bb0bc5523b03f5d1f9e9d6f9
@@ -25,7 +25,7 @@ F test/delete.test 814d53e3b0d2d7069fb17e005d4041454d6585d4
F test/expr.test 11e00880d2de0f60ff1ba7fdd4e09a0d72a01910 F test/expr.test 11e00880d2de0f60ff1ba7fdd4e09a0d72a01910
F test/index.test 8d4f26901a5582daa353fe3c8266cbf4a53af830 F test/index.test 8d4f26901a5582daa353fe3c8266cbf4a53af830
F test/insert.test 161bc67a4189738c559e3569323ceae31f4d49d6 F test/insert.test 161bc67a4189738c559e3569323ceae31f4d49d6
F test/table.test b1afc2f6d4989f9ce911acbf711ac5d7ae521eb7 F test/table.test 2d6b3ba1024032d341aec0d3c48272c8407485b4
F test/tester.tcl 70d25b7ced0a958bc377c72399b3dc6bf6a2d09e F test/tester.tcl 70d25b7ced0a958bc377c72399b3dc6bf6a2d09e
F test/update.test 69459302ea75cafac1479e60b0e36efb88123c0e F test/update.test 69459302ea75cafac1479e60b0e36efb88123c0e
F tool/gdbmdump.c 529e67c78d920606ba196326ea55b57b75fcc82b F tool/gdbmdump.c 529e67c78d920606ba196326ea55b57b75fcc82b
@@ -37,7 +37,7 @@ F tool/renumberOps.awk 6d067177ad5f8d711b79577b462da9b3634bd0a9
F www/c_interface.tcl f875864edf7974157d1c257ca08de854660882a5 F www/c_interface.tcl f875864edf7974157d1c257ca08de854660882a5
F www/index.tcl 2466d1b2e26c6f354b0acedee12025309a216799 F www/index.tcl 2466d1b2e26c6f354b0acedee12025309a216799
F www/sqlite.tcl 947e067bcc347dc767af4c1a6e5a8d47d8404aa3 F www/sqlite.tcl 947e067bcc347dc767af4c1a6e5a8d47d8404aa3
P 20f2811fc19f937ed03bdb0e9d87a40c75452b17 P 191a7f484e0a10839e7e1c8eb6658536643e4756
R a5c212fd65bac2f4b07651714ab486bf R 0c03c3a3c9ac1b3b825b1193112ad5a4
U drh U drh
Z 182f1f474f82d5f20dd5789e51b5d83f Z df606080358f2355e3007d65ffed4f54

View File

@@ -1 +1 @@
191a7f484e0a10839e7e1c8eb6658536643e4756 1bb8ee8d9f1d3c409a11910e7552e4bb5e7f5f87

View File

@@ -24,7 +24,7 @@
** This file contains C code routines that are called by the parser ** This file contains C code routines that are called by the parser
** when syntax rules are reduced. ** when syntax rules are reduced.
** **
** $Id: build.c,v 1.5 2000/05/30 03:12:21 drh Exp $ ** $Id: build.c,v 1.6 2000/05/30 13:44:19 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
@@ -243,7 +243,7 @@ void sqliteAddColumn(Parse *pParse, Token *pName){
char **pz; char **pz;
if( (p = pParse->pNewTable)==0 ) return; if( (p = pParse->pNewTable)==0 ) return;
if( (p->nCol & 0x7)==0 ){ if( (p->nCol & 0x7)==0 ){
p->azCol = sqliteRealloc( p->azCol, (p->nCol+9)*sizeof(p->azCol[0])); p->azCol = sqliteRealloc( p->azCol, (p->nCol+8)*sizeof(p->azCol[0]));
} }
if( p->azCol==0 ){ if( p->azCol==0 ){
p->nCol = 0; p->nCol = 0;
@@ -473,7 +473,7 @@ void sqliteCreateIndex(
/* /*
** Allocate the index structure. ** Allocate the index structure.
*/ */
pIndex = sqliteMalloc( sizeof(Index) + strlen(zName) + pIndex = sqliteMalloc( sizeof(Index) + strlen(zName) + 1 +
sizeof(int)*pList->nId ); sizeof(int)*pList->nId );
if( pIndex==0 ){ if( pIndex==0 ){
sqliteSetString(&pParse->zErrMsg, "out of memory", 0); sqliteSetString(&pParse->zErrMsg, "out of memory", 0);

View File

@@ -23,7 +23,7 @@
************************************************************************* *************************************************************************
** Internal interface definitions for SQLite. ** Internal interface definitions for SQLite.
** **
** @(#) $Id: sqliteInt.h,v 1.1 2000/05/29 14:26:01 drh Exp $ ** @(#) $Id: sqliteInt.h,v 1.2 2000/05/30 13:44:20 drh Exp $
*/ */
#include "sqlite.h" #include "sqlite.h"
#include "dbbe.h" #include "dbbe.h"
@@ -35,6 +35,13 @@
#include <string.h> #include <string.h>
#include <assert.h> #include <assert.h>
/* #define MEMORY_DEBUG 1 */
#ifdef MEMORY_DEBUG
# define sqliteMalloc(X) sqliteMalloc_(X,__FILE__,__LINE__)
# define sqliteFree(X) sqliteFree_(X,__FILE__,__LINE__)
# define sqliteRealloc(X,Y) sqliteRealloc_(X,Y,__FILE__,__LINE__)
#endif
/* /*
** The number of entries in the in-memory hash table holding the ** The number of entries in the in-memory hash table holding the
** schema. ** schema.
@@ -200,9 +207,15 @@ int sqliteStrNICmp(const char *, const char *, int);
int sqliteHashNoCase(const char *, int); int sqliteHashNoCase(const char *, int);
int sqliteCompare(const char *, const char *); int sqliteCompare(const char *, const char *);
int sqliteSortCompare(const char *, const char *); int sqliteSortCompare(const char *, const char *);
void *sqliteMalloc(int); #ifdef MEMORY_DEBUG
void sqliteFree(void*); void *sqliteMalloc_(int,char*,int);
void *sqliteRealloc(void*,int); void sqliteFree_(void*,char*,int);
void *sqliteRealloc_(void*,int,char*,int);
#else
void *sqliteMalloc(int);
void sqliteFree(void*);
void *sqliteRealloc(void*,int);
#endif
int sqliteGetToken(const char*, int *); int sqliteGetToken(const char*, int *);
void sqliteSetString(char **, const char *, ...); void sqliteSetString(char **, const char *, ...);
void sqliteSetNString(char **, ...); void sqliteSetNString(char **, ...);

View File

@@ -23,7 +23,7 @@
************************************************************************* *************************************************************************
** A TCL Interface to SQLite ** A TCL Interface to SQLite
** **
** $Id: tclsqlite.c,v 1.2 2000/05/29 20:41:51 drh Exp $ ** $Id: tclsqlite.c,v 1.3 2000/05/30 13:44:20 drh Exp $
*/ */
#include "sqlite.h" #include "sqlite.h"
#include <tcl.h> #include <tcl.h>
@@ -152,6 +152,7 @@ static int DbCmd(void *cd, Tcl_Interp *interp, int argc, char **argv){
} }
if( argc==5 ){ if( argc==5 ){
cbData.interp = interp; cbData.interp = interp;
cbData.once = 1;
cbData.zArray = argv[3]; cbData.zArray = argv[3];
cbData.zCode = argv[4]; cbData.zCode = argv[4];
zErrMsg = 0; zErrMsg = 0;

View File

@@ -27,10 +27,11 @@
** 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.1 2000/05/29 14:26:02 drh Exp $ ** $Id: tokenize.c,v 1.2 2000/05/30 13:44:20 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
#include <ctype.h> #include <ctype.h>
#include <stdlib.h>
/* /*
** All the keywords of the SQL language are stored as in a hash ** All the keywords of the SQL language are stored as in a hash
@@ -287,7 +288,7 @@ int sqliteRunParser(Parse *pParse, char *zSql, char **pzErrMsg){
extern void sqliteParserTrace(FILE*, char *); extern void sqliteParserTrace(FILE*, char *);
i = 0; i = 0;
pEngine = sqliteParserAlloc(sqliteMalloc); pEngine = sqliteParserAlloc((void(*)())malloc);
if( pEngine==0 ){ if( pEngine==0 ){
sqliteSetString(pzErrMsg, "out of memory", 0); sqliteSetString(pzErrMsg, "out of memory", 0);
return 1; return 1;
@@ -354,7 +355,7 @@ int sqliteRunParser(Parse *pParse, char *zSql, char **pzErrMsg){
nErr++; nErr++;
} }
} }
sqliteParserFree(pEngine, sqliteFree); sqliteParserFree(pEngine, free);
if( pParse->zErrMsg ){ if( pParse->zErrMsg ){
if( pzErrMsg ){ if( pzErrMsg ){
*pzErrMsg = pParse->zErrMsg; *pzErrMsg = pParse->zErrMsg;

View File

@@ -26,19 +26,109 @@
** This file contains functions for allocating memory, comparing ** This file contains functions for allocating memory, comparing
** strings, and stuff like that. ** strings, and stuff like that.
** **
** $Id: util.c,v 1.4 2000/05/29 23:48:23 drh Exp $ ** $Id: util.c,v 1.5 2000/05/30 13:44:20 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
#include <stdarg.h> #include <stdarg.h>
#include <ctype.h> #include <ctype.h>
#ifdef MEMORY_DEBUG
/*
** Allocate new memory and set it to zero. Return NULL if
** no memory is available.
*/
void *sqliteMalloc_(int n, char *zFile, int line){
void *p;
int *pi;
int k;
k = (n+sizeof(int)-1)/sizeof(int);
pi = malloc( (3+k)*sizeof(int));
if( pi==0 ) return 0;
pi[0] = 0xdead1122;
pi[1] = n;
pi[k+2] = 0xdead3344;
p = &pi[2];
memset(p, 0, n);
printf("malloc %d bytes at 0x%x from %s:%d\n", n, (int)p, zFile, line);
return p;
}
/*
** Free memory previously obtained from sqliteMalloc()
*/
void sqliteFree_(void *p, char *zFile, int line){
if( p ){
int *pi, k, n;
pi = p;
pi -= 2;
if( pi[0]!=0xdead1122 ){
printf("Low-end memory corruption at 0x%x\n", (int)p);
return;
}
n = pi[1];
k = (n+sizeof(int)-1)/sizeof(int);
if( pi[k+2]!=0xdead3344 ){
printf("High-end memory corruption at 0x%x\n", (int)p);
return;
}
memset(pi, 0, (k+3)*sizeof(int));
printf("free %d bytes at 0x%x from %s:%d\n", n, (int)p, zFile, line);
free(pi);
}
}
/*
** Resize a prior allocation. If p==0, then this routine
** works just like sqliteMalloc(). If n==0, then this routine
** works just like sqliteFree().
*/
void *sqliteRealloc_(void *oldP, int n, char *zFile, int line){
int *oldPi, *pi, k, oldN, oldK;
void *p;
if( oldP==0 ){
return sqliteMalloc_(n,zFile,line);
}
if( n==0 ){
sqliteFree_(oldP,zFile,line);
return 0;
}
oldPi = oldP;
oldPi -= 2;
if( oldPi[0]!=0xdead1122 ){
printf("Low-end memory corruption in realloc at 0x%x\n", (int)p);
return;
}
oldN = oldPi[1];
oldK = (oldN+sizeof(int)-1)/sizeof(int);
if( oldPi[oldK+2]!=0xdead3344 ){
printf("High-end memory corruption in realloc at 0x%x\n", (int)p);
return;
}
k = (n + sizeof(int) - 1)/sizeof(int);
pi = malloc( (k+3)*sizeof(int) );
pi[0] = 0xdead1122;
pi[1] = n;
pi[k+2] = 0xdead3344;
p = &pi[2];
memcpy(p, oldP, n>oldN ? oldN : n);
if( n>oldN ){
memset(&((char*)p)[oldN], 0, n-oldN);
}
memset(oldPi, 0, (oldK+3)*sizeof(int));
free(oldPi);
printf("realloc %d->%d bytes at 0x%x->0x%x at %s:%d\n", oldN, n,
(int)oldP, (int)p, zFile, line);
return p;
}
#else /* !defined(MEMORY_DEBUG) */
/* /*
** Allocate new memory and set it to zero. Return NULL if ** Allocate new memory and set it to zero. Return NULL if
** no memory is available. ** no memory is available.
*/ */
void *sqliteMalloc(int n){ void *sqliteMalloc(int n){
void *p = malloc(n); void *p = malloc(n);
/* printf("alloc 0x%x size: %d bytes\n", (int)p, n); */
if( p==0 ) return 0; if( p==0 ) return 0;
memset(p, 0, n); memset(p, 0, n);
return p; return p;
@@ -49,7 +139,6 @@ void *sqliteMalloc(int n){
*/ */
void sqliteFree(void *p){ void sqliteFree(void *p){
if( p ){ if( p ){
/* printf("free 0x%x\n", (int)p); */
free(p); free(p);
} }
} }
@@ -67,9 +156,9 @@ void *sqliteRealloc(void *p, int n){
sqliteFree(p); sqliteFree(p);
return 0; return 0;
} }
/* printf("realloc 0x%x size: %d bytes\n", (int)p, n); */
return realloc(p, n); return realloc(p, n);
} }
#endif /* MEMORY_DEBUG */
/* /*
** Create a string from the 2nd and subsequent arguments (up to the ** Create a string from the 2nd and subsequent arguments (up to the

View File

@@ -23,7 +23,7 @@
# This file implements regression tests for SQLite library. The # This file implements regression tests for SQLite library. The
# focus of this file is testing the CREATE TABLE statement. # focus of this file is testing the CREATE TABLE statement.
# #
# $Id: table.test,v 1.2 2000/05/30 03:12:22 drh Exp $ # $Id: table.test,v 1.3 2000/05/30 13:44:20 drh Exp $
set testdir [file dirname $argv0] set testdir [file dirname $argv0]
source $testdir/tester.tcl source $testdir/tester.tcl
@@ -113,7 +113,7 @@ do_test table-2.1d {
# Verify that we cannot make a table with the same name as an index # Verify that we cannot make a table with the same name as an index
# #
do_test table-2.2 { do_test table-2.2a {
execsql {CREATE TABLE test2(one text); CREATE INDEX test3 ON test2(one)} execsql {CREATE TABLE test2(one text); CREATE INDEX test3 ON test2(one)}
set v [catch {execsql {CREATE TABLE test3(two text)}} msg] set v [catch {execsql {CREATE TABLE test3(two text)}} msg]
lappend v $msg lappend v $msg
@@ -143,7 +143,7 @@ set big_table \
{CREATE TABLE big( {CREATE TABLE big(
f1 varchar(20), f1 varchar(20),
f2 char(10), f2 char(10),
f3 varchar(30), f3 varchar(30) primary key,
f4 text, f4 text,
f5 text, f5 text,
f6 text, f6 text,