aboutsummaryrefslogtreecommitdiff
path: root/src/vdbemem.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2009-05-28 01:00:55 +0000
committerdrh <drh@noemail.net>2009-05-28 01:00:55 +0000
commit33e619fc1c938c1cee5f390671f12d70ffb203dd (patch)
tree154221bcd11ffa6405e6fa5b5b396f141fe63a67 /src/vdbemem.c
parentb7916a78ff7708161b6e2de54af5aea85a07c543 (diff)
downloadsqlite-33e619fc1c938c1cee5f390671f12d70ffb203dd.tar.gz
sqlite-33e619fc1c938c1cee5f390671f12d70ffb203dd.zip
Additional refinements to Expr handling. Restore compression of trigger
expressions. Change Expr.zToken to Expr.u.zToken and added Expr.u.iValue. Remove an unnecessary ExprDup from CHECK constraint processing. And so forth. (CVS 6682) FossilOrigin-Name: 4ac2bdfbb4230b6ceaae87e738fa61036bbe03cb
Diffstat (limited to 'src/vdbemem.c')
-rw-r--r--src/vdbemem.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/vdbemem.c b/src/vdbemem.c
index 004ea367f..f5120c86b 100644
--- a/src/vdbemem.c
+++ b/src/vdbemem.c
@@ -15,7 +15,7 @@
** only within the VDBE. Interface routines refer to a Mem using the
** name sqlite_value
**
-** $Id: vdbemem.c,v 1.145 2009/05/27 10:31:29 drh Exp $
+** $Id: vdbemem.c,v 1.146 2009/05/28 01:00:55 drh Exp $
*/
#include "sqliteInt.h"
#include "vdbeInt.h"
@@ -974,10 +974,15 @@ int sqlite3ValueFromExpr(
op = pExpr->op;
if( op==TK_STRING || op==TK_FLOAT || op==TK_INTEGER ){
- zVal = sqlite3DbStrDup(db, pExpr->zToken);
pVal = sqlite3ValueNew(db);
- if( !zVal || !pVal ) goto no_mem;
- sqlite3ValueSetStr(pVal, -1, zVal, SQLITE_UTF8, SQLITE_DYNAMIC);
+ if( pVal==0 ) goto no_mem;
+ if( ExprHasProperty(pExpr, EP_IntValue) ){
+ sqlite3VdbeMemSetInt64(pVal, (i64)pExpr->u.iValue);
+ }else{
+ zVal = sqlite3DbStrDup(db, pExpr->u.zToken);
+ if( zVal==0 ) goto no_mem;
+ sqlite3ValueSetStr(pVal, -1, zVal, SQLITE_UTF8, SQLITE_DYNAMIC);
+ }
if( (op==TK_INTEGER || op==TK_FLOAT ) && affinity==SQLITE_AFF_NONE ){
sqlite3ValueApplyAffinity(pVal, SQLITE_AFF_NUMERIC, SQLITE_UTF8);
}else{
@@ -996,11 +1001,11 @@ int sqlite3ValueFromExpr(
#ifndef SQLITE_OMIT_BLOB_LITERAL
else if( op==TK_BLOB ){
int nVal;
- assert( pExpr->zToken[0]=='x' || pExpr->zToken[0]=='X' );
- assert( pExpr->zToken[1]=='\'' );
+ assert( pExpr->u.zToken[0]=='x' || pExpr->u.zToken[0]=='X' );
+ assert( pExpr->u.zToken[1]=='\'' );
pVal = sqlite3ValueNew(db);
if( !pVal ) goto no_mem;
- zVal = &pExpr->zToken[2];
+ zVal = &pExpr->u.zToken[2];
nVal = sqlite3Strlen30(zVal)-1;
assert( zVal[nVal]=='\'' );
sqlite3VdbeMemSetStr(pVal, sqlite3HexToBlob(db, zVal, nVal), nVal/2,