-C Version\s2.6.2\s(CVS\s699)
-D 2002-07-31T00:38:07
+C Fix\sfor\sticket\s#124:\sFix\sa\sstack\sVDBE\soverflow\sproblem\son\sjoins\son\san\nINTEGER\sPRIMARY\sKEY.\s(CVS\s700)
+D 2002-07-31T19:50:27
F Makefile.in 6291a33b87d2a395aafd7646ee1ed562c6f2c28c
F Makefile.template 4e11752e0b5c7a043ca50af4296ec562857ba495
F README a4c0ba11354ef6ba0776b400d057c59da47a4cc0
F src/trigger.c d88ab4d68d68955c217b38fb6717e090fbbf54a4
F src/update.c f07e6ed2c517c92871e54d3f5886d1cf56121b11
F src/util.c 7a99e754c44dd220e881122e30581c08b6d6adef
-F src/vdbe.c b35ea5d6af6c4649d6cda171d326352ff616875d
+F src/vdbe.c aa647946d08e54b71bfff9049ad31135b7af4a8e
F src/vdbe.h a9292f2b5fcecef924fa255fb74609e9cbc776c2
-F src/where.c 6a43aa6c80eab12221eeca754cba852a9ecd1e13
+F src/where.c 0fde349514717a55ff6a27ed2c6e914ce98a1512
F test/all.test f296d27fff6aca72348af15092154f879d1fc7d4
F test/bigrow.test 8ab252dba108f12ad64e337b0f2ff31a807ac578
F test/btree.test bf326f546a666617367a7033fa2c07451bd4f8e1
F test/insert2.test c288375a64dad3295044714f0dfed4a193cf067f
F test/intpkey.test 69a6a9b41e541f27a2ffcd20264fb35adc3c2680
F test/ioerr.test 57d9bffaca18b34f9e976f786eadc2591d6efc6a
-F test/join.test 75561ec0e5fdde381a3e31317ebe4d6d9474bb71
+F test/join.test 90a620f2a2d015e5139d5a4cde0eeb4cf62523bf
F test/limit.test 49b44e027a002c0ba336d723b448f07e05b04466
F test/lock.test f1b55dc61632e99d241643cc8e7c03774f09f623
F test/main.test c66b564554b770ee7fdbf6a66c0cd90329bc2c85
F www/sqlite.tcl ae3dcfb077e53833b59d4fcc94d8a12c50a44098
F www/tclsqlite.tcl 1db15abeb446aad0caf0b95b8b9579720e4ea331
F www/vdbe.tcl 2013852c27a02a091d39a766bc87cff329f21218
-P 4f196de07d258dc44b6fd20d776120e2aadd3224
-R 6fc4add27e1daff3e73e47693ab2e9a0
+P 223a2150ac1fa34d4bd01dd32b5fed9e90aa38d4
+R 44456872a0d4b203d2c6dd56f3b04dc6
U drh
-Z 57e7cf48960b18de6fc8c07074fa6766
+Z 7dedae30cba3306a28c1b36217d2dbe0
-223a2150ac1fa34d4bd01dd32b5fed9e90aa38d4
\ No newline at end of file
+fe329e078fa209faf62e08599a00c7efa75b8501
\ No newline at end of file
** But other routines are also provided to help in building up
** a program instruction by instruction.
**
-** $Id: vdbe.c,v 1.166 2002/07/30 17:20:40 drh Exp $
+** $Id: vdbe.c,v 1.167 2002/07/31 19:50:27 drh Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>
break;
}
-/* Opcode: MustBeInt * P2 *
+/* Opcode: MustBeInt P1 P2 *
**
** Force the top of the stack to be an integer. If the top of the
** stack is not an integer and cannot be converted into an integer
** with out data loss, then jump immediately to P2, or if P2==0
** raise an SQLITE_MISMATCH exception.
+**
+** If the top of the stack is not an integer and P2 is not zero and
+** P1 is 1, then the stack is popped. In all other cases, the depth
+** of the stack is unchanged.
*/
case OP_MustBeInt: {
int tos = p->tos;
rc = SQLITE_MISMATCH;
goto abort_due_to_error;
}else{
+ if( pOp->p1 ) POPSTACK;
pc = pOp->p2 - 1;
}
break;
** the WHERE clause of SQL statements. Also found here are subroutines
** to generate VDBE code to evaluate expressions.
**
-** $Id: where.c,v 1.58 2002/06/28 12:18:47 drh Exp $
+** $Id: where.c,v 1.59 2002/07/31 19:50:28 drh Exp $
*/
#include "sqliteInt.h"
}
aExpr[k].p = 0;
cont = pLevel->cont = sqliteVdbeMakeLabel(v);
- sqliteVdbeAddOp(v, OP_MustBeInt, 0, brk);
+ sqliteVdbeAddOp(v, OP_MustBeInt, 1, brk);
haveKey = 0;
sqliteVdbeAddOp(v, OP_NotExists, base+idx, brk);
pLevel->op = OP_Noop;
}else{
sqliteExprCode(pParse, aExpr[k].p->pLeft);
}
- sqliteVdbeAddOp(v, OP_MustBeInt, 0, brk);
+ sqliteVdbeAddOp(v, OP_MustBeInt, 1, brk);
if( aExpr[k].p->op==TK_LT || aExpr[k].p->op==TK_GT ){
sqliteVdbeAddOp(v, OP_AddImm, 1, 0);
}
}else{
sqliteExprCode(pParse, aExpr[k].p->pLeft);
}
- sqliteVdbeAddOp(v, OP_MustBeInt, 0, sqliteVdbeCurrentAddr(v)+1);
+ sqliteVdbeAddOp(v, OP_MustBeInt, 1, sqliteVdbeCurrentAddr(v)+1);
pLevel->iMem = pParse->nMem++;
sqliteVdbeAddOp(v, OP_MemStore, pLevel->iMem, 0);
if( aExpr[k].p->op==TK_LT || aExpr[k].p->op==TK_GT ){
#
# This file implements tests for joins, including outer joins.
#
-# $Id: join.test,v 1.4 2002/07/01 12:27:09 drh Exp $
+# $Id: join.test,v 1.5 2002/07/31 19:50:28 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
}
} {1 {unknown or unsupported join type: LEFT BOGUS}}
+do_test join-4.1 {
+ execsql {
+ BEGIN;
+ CREATE TABLE t5(a INTEGER PRIMARY KEY);
+ CREATE TABLE t6(a INTEGER);
+ INSERT INTO t6 VALUES(NULL);
+ INSERT INTO t6 VALUES(NULL);
+ INSERT INTO t6 SELECT * FROM t6;
+ INSERT INTO t6 SELECT * FROM t6;
+ INSERT INTO t6 SELECT * FROM t6;
+ INSERT INTO t6 SELECT * FROM t6;
+ INSERT INTO t6 SELECT * FROM t6;
+ INSERT INTO t6 SELECT * FROM t6;
+ COMMIT;
+ }
+ execsql {
+ SELECT * FROM t6 NATURAL JOIN t5;
+ }
+} {}
+do_test join-4.2 {
+ execsql {
+ SELECT * FROM t6, t5 WHERE t6.a<t5.a;
+ }
+} {}
+do_test join-4.3 {
+ execsql {
+ SELECT * FROM t6, t5 WHERE t6.a>t5.a;
+ }
+} {}
+do_test join-4.4 {
+ execsql {
+ UPDATE t6 SET a='xyz';
+ SELECT * FROM t6 NATURAL JOIN t5;
+ }
+} {}
+do_test join-4.6 {
+ execsql {
+ SELECT * FROM t6, t5 WHERE t6.a<t5.a;
+ }
+} {}
+do_test join-4.7 {
+ execsql {
+ SELECT * FROM t6, t5 WHERE t6.a>t5.a;
+ }
+} {}
+do_test join-4.8 {
+ execsql {
+ UPDATE t6 SET a=1;
+ SELECT * FROM t6 NATURAL JOIN t5;
+ }
+} {}
+do_test join-4.9 {
+ execsql {
+ SELECT * FROM t6, t5 WHERE t6.a<t5.a;
+ }
+} {}
+do_test join-4.10 {
+ execsql {
+ SELECT * FROM t6, t5 WHERE t6.a>t5.a;
+ }
+} {}
+
finish_test