|
|
@@ -1,13 +1,13 @@
|
|
|
Index: Makefile.in
|
|
|
--- Makefile.in.orig 2007-06-28 14:46:18 +0200
|
|
|
-+++ Makefile.in 2007-07-21 10:09:07 +0200
|
|
|
++++ Makefile.in 2007-08-14 21:01:55 +0200
|
|
|
@@ -130,6 +130,18 @@
|
|
|
vdbe.lo vdbeapi.lo vdbeaux.lo vdbeblob.lo vdbefifo.lo vdbemem.lo \
|
|
|
where.lo utf.lo legacy.lo vtab.lo
|
|
|
|
|
|
+# FTS1 support
|
|
|
+ifdef FTS1
|
|
|
-+TCC += -DSQLITE_ENABLE_FTS1
|
|
|
++TCC += -DSQLITE_ENABLE_FTS1·
|
|
|
+LIBOBJ += fts1.lo fts1_hash.lo fts1_porter.lo fts1_tokenizer1.lo
|
|
|
+endif
|
|
|
+
|
|
|
@@ -20,9 +20,9 @@ Index: Makefile.in
|
|
|
# All of the source code files.
|
|
|
#
|
|
|
SRC = \
|
|
|
-@@ -498,6 +510,23 @@
|
|
|
- -o testfixture $(TESTSRC) $(TOP)/src/tclsqlite.c \
|
|
|
- libsqlite3.la $(LIBTCL)
|
|
|
+@@ -492,6 +504,25 @@
|
|
|
+ $(LTLINK) -o tclsqlite3 tclsqlite-shell.lo \
|
|
|
+ libsqlite3.la $(LIBTCL)
|
|
|
|
|
|
+fts1.lo: $(TOP)/ext/fts1/fts1.c $(HDR)
|
|
|
+ $(LTCOMPILE) -c $(TOP)/ext/fts1/fts1.c
|
|
|
@@ -41,100 +41,14 @@ Index: Makefile.in
|
|
|
+ $(LTCOMPILE) -c $(TOP)/ext/fts2/fts2_porter.c
|
|
|
+fts2_tokenizer1.lo: $(TOP)/ext/fts2/fts2_tokenizer1.c $(HDR)
|
|
|
+ $(LTCOMPILE) -c $(TOP)/ext/fts2/fts2_tokenizer1.c
|
|
|
-
|
|
|
- fulltest: testfixture$(TEXE) sqlite3$(TEXE)
|
|
|
- ./testfixture $(TOP)/test/all.test
|
|
|
-Index: ext/fts1/fts1.c
|
|
|
---- ext/fts1/fts1.c.orig 2007-06-28 14:46:18 +0200
|
|
|
-+++ ext/fts1/fts1.c 2007-07-21 10:09:07 +0200
|
|
|
-@@ -19,11 +19,7 @@
|
|
|
- #endif
|
|
|
-
|
|
|
- #include <assert.h>
|
|
|
--#if !defined(__APPLE__)
|
|
|
--#include <malloc.h>
|
|
|
--#else
|
|
|
- #include <stdlib.h>
|
|
|
--#endif
|
|
|
- #include <stdio.h>
|
|
|
- #include <string.h>
|
|
|
- #include <ctype.h>
|
|
|
-Index: ext/fts1/fts1_porter.c
|
|
|
---- ext/fts1/fts1_porter.c.orig 2007-06-12 14:18:00 +0200
|
|
|
-+++ ext/fts1/fts1_porter.c 2007-07-21 10:09:07 +0200
|
|
|
-@@ -26,11 +26,7 @@
|
|
|
-
|
|
|
-
|
|
|
- #include <assert.h>
|
|
|
--#if !defined(__APPLE__)
|
|
|
--#include <malloc.h>
|
|
|
--#else
|
|
|
- #include <stdlib.h>
|
|
|
--#endif
|
|
|
- #include <stdio.h>
|
|
|
- #include <string.h>
|
|
|
- #include <ctype.h>
|
|
|
-Index: ext/fts1/fts1_tokenizer1.c
|
|
|
---- ext/fts1/fts1_tokenizer1.c.orig 2007-06-12 14:18:00 +0200
|
|
|
-+++ ext/fts1/fts1_tokenizer1.c 2007-07-21 10:09:07 +0200
|
|
|
-@@ -18,11 +18,7 @@
|
|
|
-
|
|
|
-
|
|
|
- #include <assert.h>
|
|
|
--#if !defined(__APPLE__)
|
|
|
--#include <malloc.h>
|
|
|
--#else
|
|
|
- #include <stdlib.h>
|
|
|
--#endif
|
|
|
- #include <stdio.h>
|
|
|
- #include <string.h>
|
|
|
- #include <ctype.h>
|
|
|
-Index: ext/fts2/fts2.c
|
|
|
---- ext/fts2/fts2.c.orig 2007-07-03 12:15:32 +0200
|
|
|
-+++ ext/fts2/fts2.c 2007-07-21 10:09:07 +0200
|
|
|
-@@ -279,9 +279,6 @@
|
|
|
- #endif
|
|
|
-
|
|
|
- #include <assert.h>
|
|
|
--#if !defined(__APPLE__)
|
|
|
--#include <malloc.h>
|
|
|
--#endif
|
|
|
- #include <stdlib.h>
|
|
|
- #include <stdio.h>
|
|
|
- #include <string.h>
|
|
|
-Index: ext/fts2/fts2_porter.c
|
|
|
---- ext/fts2/fts2_porter.c.orig 2007-06-12 14:18:00 +0200
|
|
|
-+++ ext/fts2/fts2_porter.c 2007-07-21 10:09:07 +0200
|
|
|
-@@ -26,11 +26,7 @@
|
|
|
-
|
|
|
-
|
|
|
- #include <assert.h>
|
|
|
--#if !defined(__APPLE__)
|
|
|
--#include <malloc.h>
|
|
|
--#else
|
|
|
- #include <stdlib.h>
|
|
|
--#endif
|
|
|
- #include <stdio.h>
|
|
|
- #include <string.h>
|
|
|
- #include <ctype.h>
|
|
|
-Index: ext/fts2/fts2_tokenizer1.c
|
|
|
---- ext/fts2/fts2_tokenizer1.c.orig 2007-06-28 14:46:19 +0200
|
|
|
-+++ ext/fts2/fts2_tokenizer1.c 2007-07-21 10:09:07 +0200
|
|
|
-@@ -26,11 +26,7 @@
|
|
|
-
|
|
|
-
|
|
|
- #include <assert.h>
|
|
|
--#if !defined(__APPLE__)
|
|
|
--#include <malloc.h>
|
|
|
--#else
|
|
|
- #include <stdlib.h>
|
|
|
--#endif
|
|
|
- #include <stdio.h>
|
|
|
- #include <string.h>
|
|
|
- #include <ctype.h>
|
|
|
++
|
|
|
++
|
|
|
+ testfixture$(TEXE): $(TOP)/src/tclsqlite.c libsqlite3.la $(TESTSRC)
|
|
|
+ $(LTLINK) -DTCLSH=1 -DSQLITE_TEST=1 -DSQLITE_CRASH_TEST=1 \
|
|
|
+ -DSQLITE_NO_SYNC=1 $(TEMP_STORE) \
|
|
|
Index: sqlite3.pc.in
|
|
|
--- sqlite3.pc.in.orig 2004-07-19 06:25:47 +0200
|
|
|
-+++ sqlite3.pc.in 2007-07-21 10:09:07 +0200
|
|
|
++++ sqlite3.pc.in 2007-08-14 21:04:47 +0200
|
|
|
@@ -8,5 +8,5 @@
|
|
|
Name: SQLite
|
|
|
Description: SQL database engine
|
|
|
@@ -142,172 +56,3 @@ Index: sqlite3.pc.in
|
|
|
-Libs: -L${libdir} -lsqlite3
|
|
|
+Libs: -L${libdir} -lsqlite3 @LIBS@
|
|
|
Cflags: -I${includedir}
|
|
|
---- src/vdbe.c 2007/07/21 19:41:46 1.637
|
|
|
-+++ src/vdbe.c 2007/07/22 19:10:21 1.638
|
|
|
-@@ -1289,7 +1289,19 @@
|
|
|
- if( sqlite3SafetyOff(db) ) goto abort_due_to_misuse;
|
|
|
- (*ctx.pFunc->xFunc)(&ctx, n, apVal);
|
|
|
- if( sqlite3SafetyOn(db) ) goto abort_due_to_misuse;
|
|
|
-- if( sqlite3MallocFailed() ) goto no_mem;
|
|
|
-+ if( sqlite3MallocFailed() ){
|
|
|
-+ /* Even though a malloc() has failed, the implementation of the
|
|
|
-+ ** user function may have called an sqlite3_result_XXX() function
|
|
|
-+ ** to return a value. The following call releases any resources
|
|
|
-+ ** associated with such a value.
|
|
|
-+ **
|
|
|
-+ ** Note: Maybe MemRelease() should be called if sqlite3SafetyOn()
|
|
|
-+ ** fails also (the if(...) statement above). But if people are
|
|
|
-+ ** misusing sqlite, they have bigger problems than a leaked value.
|
|
|
-+ */
|
|
|
-+ sqlite3VdbeMemRelease(&ctx.s);
|
|
|
-+ goto no_mem;
|
|
|
-+ }
|
|
|
- popStack(&pTos, n);
|
|
|
-
|
|
|
- /* If any auxilary data functions have been called by this user function,
|
|
|
-@@ -4299,7 +4299,7 @@
|
|
|
- if( (pTos[-nRoot].flags & MEM_Int)==0 ) break;
|
|
|
- }
|
|
|
- assert( nRoot>0 );
|
|
|
-- aRoot = sqliteMallocRaw( sizeof(int*)*(nRoot+1) );
|
|
|
-+ aRoot = sqliteMallocRaw( sizeof(int)*(nRoot+1) );
|
|
|
- if( aRoot==0 ) goto no_mem;
|
|
|
- j = pOp->p1;
|
|
|
- assert( j>=0 && j<p->nMem );
|
|
|
-@@ -4306,7 +4306,7 @@
|
|
|
- pnErr = &p->aMem[j];
|
|
|
- assert( (pnErr->flags & MEM_Int)!=0 );
|
|
|
- for(j=0; j<nRoot; j++){
|
|
|
-- aRoot[j] = pTos[-j].u.i;
|
|
|
-+ aRoot[j] = (pTos-j)->u.i;
|
|
|
- }
|
|
|
- aRoot[j] = 0;
|
|
|
- popStack(&pTos, nRoot);
|
|
|
-Index: src/btree.c
|
|
|
---- src/btree.c 2007/06/26 01:04:49 1.392
|
|
|
-+++ src/btree.c 2007/07/23 19:26:17 1.393
|
|
|
-@@ -2009,7 +2009,7 @@
|
|
|
- assert(nFin==0 || pBt->nTrunc==0 || nFin<=pBt->nTrunc);
|
|
|
- rc = SQLITE_OK;
|
|
|
- if( pBt->nTrunc ){
|
|
|
-- sqlite3PagerWrite(pBt->pPage1->pDbPage);
|
|
|
-+ rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
|
|
|
- put4byte(&pBt->pPage1->aData[32], 0);
|
|
|
- put4byte(&pBt->pPage1->aData[36], 0);
|
|
|
- pBt->nTrunc = nFin;
|
|
|
-Index: src/insert.c
|
|
|
---- src/insert.c 2007/06/26 10:38:55 1.187
|
|
|
-+++ src/insert.c 2007/07/23 19:39:47 1.188
|
|
|
-@@ -1027,7 +1027,7 @@
|
|
|
- assert( pParse->ckOffset==nCol );
|
|
|
- pParse->ckOffset = 0;
|
|
|
- onError = overrideError!=OE_Default ? overrideError : OE_Abort;
|
|
|
-- if( onError==OE_Ignore || onError==OE_Replace ){
|
|
|
-+ if( onError==OE_Ignore ){
|
|
|
- sqlite3VdbeAddOp(v, OP_Pop, nCol+1+hasTwoRowids, 0);
|
|
|
- sqlite3VdbeAddOp(v, OP_Goto, 0, ignoreDest);
|
|
|
- }else{
|
|
|
-Index: src/expr.c
|
|
|
---- src/expr.c 2007/06/25 16:29:34 1.300
|
|
|
-+++ src/expr.c 2007/07/23 22:51:15 1.301
|
|
|
-@@ -1140,11 +1140,17 @@
|
|
|
- for(j=0; j<pEList->nExpr; j++){
|
|
|
- char *zAs = pEList->a[j].zName;
|
|
|
- if( zAs!=0 && sqlite3StrICmp(zAs, zCol)==0 ){
|
|
|
-- Expr *pDup;
|
|
|
-+ Expr *pDup, *pOrig;
|
|
|
- assert( pExpr->pLeft==0 && pExpr->pRight==0 );
|
|
|
- assert( pExpr->pList==0 );
|
|
|
- assert( pExpr->pSelect==0 );
|
|
|
-- pDup = sqlite3ExprDup(pEList->a[j].pExpr);
|
|
|
-+ pOrig = pEList->a[j].pExpr;
|
|
|
-+ if( !pNC->allowAgg && ExprHasProperty(pOrig, EP_Agg) ){
|
|
|
-+ sqlite3ErrorMsg(pParse, "misuse of aliased aggregate %s", zAs);
|
|
|
-+ sqliteFree(zCol);
|
|
|
-+ return 2;
|
|
|
-+ }
|
|
|
-+ pDup = sqlite3ExprDup(pOrig);
|
|
|
- if( pExpr->flags & EP_ExpCollate ){
|
|
|
- pDup->pColl = pExpr->pColl;
|
|
|
- pDup->flags |= EP_ExpCollate;
|
|
|
-Index: src/func.c
|
|
|
---- src/func.c 2007/07/23 19:12:42 1.162
|
|
|
-+++ src/func.c 2007/07/26 06:50:06 1.163
|
|
|
-@@ -1118,6 +1118,7 @@
|
|
|
- if( zAux ){
|
|
|
- zRet[i*2] = '1';
|
|
|
- if( strcmp(zAux, z) ){
|
|
|
-+ free_test_auxdata((void *)zRet);
|
|
|
- sqlite3_result_error(pCtx, "Auxilary data corruption", -1);
|
|
|
- return;
|
|
|
- }
|
|
|
-Index: src/vdbeapi.c
|
|
|
---- src/vdbeapi.c 2007/07/12 13:18:05 1.94
|
|
|
-+++ src/vdbeapi.c 2007/07/26 06:50:06 1.95
|
|
|
-@@ -390,13 +390,13 @@
|
|
|
- ){
|
|
|
- struct AuxData *pAuxData;
|
|
|
- VdbeFunc *pVdbeFunc;
|
|
|
-- if( iArg<0 ) return;
|
|
|
-+ if( iArg<0 ) goto failed;
|
|
|
-
|
|
|
- pVdbeFunc = pCtx->pVdbeFunc;
|
|
|
- if( !pVdbeFunc || pVdbeFunc->nAux<=iArg ){
|
|
|
- int nMalloc = sizeof(VdbeFunc) + sizeof(struct AuxData)*iArg;
|
|
|
- pVdbeFunc = sqliteRealloc(pVdbeFunc, nMalloc);
|
|
|
-- if( !pVdbeFunc ) return;
|
|
|
-+ if( !pVdbeFunc ) goto failed;
|
|
|
- pCtx->pVdbeFunc = pVdbeFunc;
|
|
|
- memset(&pVdbeFunc->apAux[pVdbeFunc->nAux], 0,
|
|
|
- sizeof(struct AuxData)*(iArg+1-pVdbeFunc->nAux));
|
|
|
-@@ -410,6 +410,12 @@
|
|
|
- }
|
|
|
- pAuxData->pAux = pAux;
|
|
|
- pAuxData->xDelete = xDelete;
|
|
|
-+ return;
|
|
|
-+
|
|
|
-+failed:
|
|
|
-+ if( xDelete ){
|
|
|
-+ xDelete(pAux);
|
|
|
-+ }
|
|
|
- }
|
|
|
-
|
|
|
- /*
|
|
|
-Index: src/where.c
|
|
|
---- src/where.c 2007/06/11 12:56:15 1.253
|
|
|
-+++ src/where.c 2007/07/30 14:40:48 1.254
|
|
|
-@@ -383,10 +383,22 @@
|
|
|
- /*
|
|
|
- ** Commute a comparision operator. Expressions of the form "X op Y"
|
|
|
- ** are converted into "Y op X".
|
|
|
-+**
|
|
|
-+** If a collation sequence is associated with either the left or right
|
|
|
-+** side of the comparison, it remains associated with the same side after
|
|
|
-+** the commutation. So "Y collate NOCASE op X" becomes
|
|
|
-+** "X collate NOCASE op Y". This is because any collation sequence on
|
|
|
-+** the left hand side of a comparison overrides any collation sequence
|
|
|
-+** attached to the right. For the same reason the EP_ExpCollate flag
|
|
|
-+** is not commuted.
|
|
|
- */
|
|
|
- static void exprCommute(Expr *pExpr){
|
|
|
-+ u16 expRight = (pExpr->pRight->flags & EP_ExpCollate);
|
|
|
-+ u16 expLeft = (pExpr->pLeft->flags & EP_ExpCollate);
|
|
|
- assert( allowedOp(pExpr->op) && pExpr->op!=TK_IN );
|
|
|
- SWAP(CollSeq*,pExpr->pRight->pColl,pExpr->pLeft->pColl);
|
|
|
-+ pExpr->pRight->flags = (pExpr->pRight->flags & ~EP_ExpCollate) | expLeft;
|
|
|
-+ pExpr->pLeft->flags = (pExpr->pLeft->flags & ~EP_ExpCollate) | expRight;
|
|
|
- SWAP(Expr*,pExpr->pRight,pExpr->pLeft);
|
|
|
- if( pExpr->op>=TK_GT ){
|
|
|
- assert( TK_LT==TK_GT+2 );
|
|
|
-Index: src/shell.c
|
|
|
---- src/shell.c 2007/07/30 18:24:39 1.165
|
|
|
-+++ src/shell.c 2007/07/30 20:41:53 1.166
|
|
|
-@@ -1779,7 +1779,7 @@
|
|
|
- in = fopen(sqliterc,"rb");
|
|
|
- if( in ){
|
|
|
- if( stdin_is_interactive ){
|
|
|
-- printf("Loading resources from %s\n",sqliterc);
|
|
|
-+ printf("-- Loading resources from %s\n",sqliterc);
|
|
|
- }
|
|
|
- process_input(p,in);
|
|
|
- fclose(in);
|