aboutsummaryrefslogtreecommitdiff
path: root/src/func.c
diff options
context:
space:
mode:
authormistachkin <mistachkin@noemail.net>2013-08-31 21:41:09 +0000
committermistachkin <mistachkin@noemail.net>2013-08-31 21:41:09 +0000
commit05b1ba1e3fe57eba290419729d6e4eaa4fa6ac32 (patch)
tree4edc977d95d6c8b4a0a14aea0587d46fe706c121 /src/func.c
parenta17713ff8d7e1dc39f530ff2cee21f5243b0fe4d (diff)
downloadsqlite-05b1ba1e3fe57eba290419729d6e4eaa4fa6ac32.tar.gz
sqlite-05b1ba1e3fe57eba290419729d6e4eaa4fa6ac32.zip
Handle BLOBs specially, treating them as binary, in the tointeger() and toreal() SQL functions.
FossilOrigin-Name: c4c53acb985a248c89db2d75025d941e3a4899bc
Diffstat (limited to 'src/func.c')
-rw-r--r--src/func.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/src/func.c b/src/func.c
index fb999c9f9..31b96d4a9 100644
--- a/src/func.c
+++ b/src/func.c
@@ -990,7 +990,18 @@ static void tointegerFunc(
sqlite3_result_int64(context, sqlite3_value_int64(argv[0]));
break;
}
- case SQLITE_BLOB:
+ case SQLITE_BLOB: {
+ const unsigned char *zBlob = sqlite3_value_blob(argv[0]);
+ if( zBlob ){
+ int nBlob = sqlite3_value_bytes(argv[0]);
+ if( nBlob==sizeof(i64) ){
+ i64 iVal;
+ memcpy(&iVal, zBlob, sizeof(i64));
+ sqlite3_result_int64(context, iVal);
+ }
+ }
+ break;
+ }
case SQLITE_TEXT: {
const unsigned char *zStr = sqlite3_value_text(argv[0]);
if( zStr ){
@@ -1038,7 +1049,18 @@ static void torealFunc(
}
break;
}
- case SQLITE_BLOB:
+ case SQLITE_BLOB: {
+ const unsigned char *zBlob = sqlite3_value_blob(argv[0]);
+ if( zBlob ){
+ int nBlob = sqlite3_value_bytes(argv[0]);
+ if( nBlob==sizeof(double) ){
+ double rVal;
+ memcpy(&rVal, zBlob, sizeof(double));
+ sqlite3_result_double(context, rVal);
+ }
+ }
+ break;
+ }
case SQLITE_TEXT: {
const unsigned char *zStr = sqlite3_value_text(argv[0]);
if( zStr ){