-C Built-in\saggregate\sfunctions\s(MIN,\sSUM,\sAVG,\setc)\sshould\signore\sNULL\sentires.\s(CVS\s597)
-D 2002-05-29T23:22:23
+C Bug\sfix:\sbad\scode\swas\sgenerated\sfor\swhen\sthe\sfirst\soperand\sof\sa\sCASE\nwas\sNULL.\s(CVS\s598)
+D 2002-05-30T02:35:12
F Makefile.in 6291a33b87d2a395aafd7646ee1ed562c6f2c28c
F Makefile.template 4e11752e0b5c7a043ca50af4296ec562857ba495
F README a4c0ba11354ef6ba0776b400d057c59da47a4cc0
F src/build.c 36e42718a7a94f554ea39508993378482f5335c7
F src/delete.c a2b098cbbf518e6b641847e26de85827793bc523
F src/encode.c 346b12b46148506c32038524b95c4631ab46d760
-F src/expr.c 1a7a2f5f2b7dd37659783cdb6efaac74a092ba71
+F src/expr.c 86f0c6f26f8b573883ba3219bd91bac5d4618f6b
F src/func.c 2cd4922913234ad384ccb75dd41bc35259a8338c
F src/hash.c 6a6236b89c8c060c65dabd300a1c8ce7c10edb72
F src/hash.h dca065dda89d4575f3176e75e9a3dc0f4b4fb8b9
F test/conflict.test 5149646703d3930c9111068b5cda7e2e938476e3
F test/copy.test b3cefcb520c64d7e7dfedbab06b4d4c31fa5b99a
F test/delete.test c904a62129fe102b314a96111a8417f10249e4d8
-F test/expr.test 518ee35ec8d2c8883544d75a031219c75391fb21
+F test/expr.test ff6fceb9958f94ae3ca23dcc47aff7830b8131bc
F test/func.test 628ab513b0d9c54251a63e026a26b7b4347e54ab
F test/in.test c09312672e3f0709fa02c8e2e9cd8fb4bd6269aa
F test/index.test c8a471243bbf878974b99baf5badd59407237cf3
F www/sqlite.tcl 8b5884354cb615049aed83039f8dfe1552a44279
F www/tclsqlite.tcl 1db15abeb446aad0caf0b95b8b9579720e4ea331
F www/vdbe.tcl 2013852c27a02a091d39a766bc87cff329f21218
-P ed11abc81e638c21ec1aa0445a6d59de91343095
-R 0dbe1e91bf7fd44e5ab325282618e3b3
+P 19ae12bef210ae5fe171f10833faa38d640c129f
+R 1129c1b4d523e26221972965ea9f1b0e
U drh
-Z c098e63f0d01ca947f8ca615049ab0d0
+Z 13527e062fc395d3f1e89758ab03474f
-19ae12bef210ae5fe171f10833faa38d640c129f
\ No newline at end of file
+4debc8db929fdc201759ba211acdeadc4e30e8af
\ No newline at end of file
** This file contains routines used for analyzing expressions and
** for generating VDBE code that evaluates expressions in SQLite.
**
-** $Id: expr.c,v 1.64 2002/05/26 20:54:33 drh Exp $
+** $Id: expr.c,v 1.65 2002/05/30 02:35:12 drh Exp $
*/
#include "sqliteInt.h"
int expr_end_label;
int null_result_label;
int jumpInst;
+ int nullBypassInst;
int addr;
int nExpr;
int i;
null_result_label = sqliteVdbeMakeLabel(v);
if( pExpr->pLeft ){
sqliteExprCode(pParse, pExpr->pLeft);
- sqliteVdbeAddOp(v, OP_IsNull, -1, expr_end_label);
+ nullBypassInst = sqliteVdbeAddOp(v, OP_IsNull, -1, 0);
}
for(i=0; i<nExpr; i=i+2){
sqliteExprCode(pParse, pExpr->pList->a[i].pExpr);
if( pExpr->pLeft ){
sqliteVdbeAddOp(v, OP_Pull, 1, 0);
sqliteVdbeAddOp(v, OP_Pop, 1, 0);
+ sqliteVdbeChangeP2(v, nullBypassInst, sqliteVdbeCurrentAddr(v));
}
}
break;
}
default: {
sqliteExprCode(pParse, pExpr);
- sqliteVdbeAddOp(v, OP_Not, 0, 0);
- sqliteVdbeAddOp(v, OP_If, jumpIfNull, dest);
+ sqliteVdbeAddOp(v, OP_IfNot, jumpIfNull, dest);
break;
}
}
# This file implements regression tests for SQLite library. The
# focus of this file is testing expressions.
#
-# $Id: expr.test,v 1.21 2002/05/27 01:04:51 drh Exp $
+# $Id: expr.test,v 1.22 2002/05/30 02:35:12 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
{CASE i1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'error' END} error
test_expr expr-case.10 {i1=3} \
{CASE i1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' END} {{}}
-test_expr expr-case.11 {i1=7} \
+test_expr expr-case.11 {i1=null} \
+ {CASE i1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 3 END} {{}}
+test_expr expr-case.12 {i1=7} \
{ CASE WHEN i1 < 5 THEN 'low'
WHEN i1 < 10 THEN 'medium'
WHEN i1 < 15 THEN 'high' ELSE 'error' END} medium