diff options
author | mistachkin <mistachkin@noemail.net> | 2013-08-31 21:41:09 +0000 |
---|---|---|
committer | mistachkin <mistachkin@noemail.net> | 2013-08-31 21:41:09 +0000 |
commit | 05b1ba1e3fe57eba290419729d6e4eaa4fa6ac32 (patch) | |
tree | 4edc977d95d6c8b4a0a14aea0587d46fe706c121 /src/func.c | |
parent | a17713ff8d7e1dc39f530ff2cee21f5243b0fe4d (diff) | |
download | sqlite-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.c | 26 |
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 ){ |