]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
In the one-argument version of the ieee754() extension function, if the
authordrh <drh@noemail.net>
Wed, 24 Jun 2020 13:14:00 +0000 (13:14 +0000)
committerdrh <drh@noemail.net>
Wed, 24 Jun 2020 13:14:00 +0000 (13:14 +0000)
argument is an 8-byte blob, interpret that blob as a binary64 floating point
and decode it.

FossilOrigin-Name: 4199c1e8aa47d77df3ef598cb6f5418f67970dd00f34823463c85eabfc8d2b77

ext/misc/ieee754.c
manifest
manifest.uuid

index a67c91878c314067025fc79de224bc6e3ca183e2..40ee69c4541cd3b3b6eb672b03fcded3093f7301 100644 (file)
@@ -51,8 +51,19 @@ static void ieee754func(
     int isNeg;
     char zResult[100];
     assert( sizeof(m)==sizeof(r) );
-    if( sqlite3_value_type(argv[0])!=SQLITE_FLOAT ) return;
-    r = sqlite3_value_double(argv[0]);
+    if( sqlite3_value_type(argv[0])==SQLITE_BLOB
+     && sqlite3_value_bytes(argv[0])==sizeof(r)
+    ){
+      const unsigned char *x = sqlite3_value_blob(argv[0]);
+      int i;
+      sqlite3_uint64 v = 0;
+      for(i=0; i<sizeof(r); i++){
+        v = (v<<8) | x[i];
+      }
+      memcpy(&r, &v, sizeof(r));
+    }else{
+      r = sqlite3_value_double(argv[0]);
+    }
     if( r<0.0 ){
       isNeg = 1;
       r = -r;
index 249738f11b9dbf91873cb9bb33fd27b41b82e912..96f842691fbdc4f9193d1ff3d32ee197116efebd 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,11 +1,12 @@
 B 7a876209a678a34c198b54ceef9e3c041f128a14dc73357f6a57cadadaa6cf7b
-C Add\sthe\sdecimal\sextension.\s\sIt\sis\sbuilt\sinto\sthe\sshell,\sbut\sis\san\soptional\nadd-on\sfor\sthe\slibrary.\s\sIt\sis\snot\sincluded\sin\sthe\samalgamation.
-D 2020-06-24T12:29:19.193
+C In\sthe\sone-argument\sversion\sof\sthe\sieee754()\sextension\sfunction,\sif\sthe\nargument\sis\san\s8-byte\sblob,\sinterpret\sthat\sblob\sas\sa\sbinary64\sfloating\spoint\nand\sdecode\sit.
+D 2020-06-24T13:14:00.385
 F Makefile.in 014ad669b4a5809752939c2dea83722992711b464aa56adebca80c5cc98cfdc2
 F Makefile.msc 08c8bbedfa51e21b57153370edbfee86d35bbefb53e3773a3e086fe654facccb
 F autoconf/Makefile.am a8d1d24affe52ebf8d7ddcf91aa973fa0316618ab95bb68c87cabf8faf527dc8
 F ext/lsm1/lsm_unix.c 11e0a5c19d754a4e1d93dfad06de8cc201f10f886b8e61a4c599ed34e334fc24
 F ext/misc/decimal.c c1897f624893d1c12e3c879d97ca7d1c4a36cae10d32afe632779de78c4aaa4f
+F ext/misc/ieee754.c 527917ceea0e5e822857004dd155bf4d76610360e46c875f0c8c619761528758
 F main.mk c99e452dd4edd0bea28547259421bd6cf24d41d928d24720737efc548958ca39
 F src/build.c ba1bbe563a3dc02d5fed20537603181e5289c13ea30ae5e775f552e7557adbfa
 F src/shell.c.in a46df1496dea229614a14ca1c517f9e4bfecf6e3867cc6a4a129b311f3ad8c9c
@@ -15,8 +16,7 @@ F test/speedtest1.c ea201573f9b27542ea1e74a68e74f121e0eb04c89e67039f40ed68f1b833
 F tool/mkautoconfamal.sh f62353eb6c06ab264da027fd4507d09914433dbdcab9cb011cdc18016f1ab3b8
 F tool/mksqlite3c.tcl f4ef476510eca4124c874a72029f1e01bc54a896b1724e8f9eef0d8bfae0e84c
 F tool/mksqlite3h.tcl 1f5e4a1dbbbc43c83cc6e74fe32c6c620502240b66c7c0f33a51378e78fc4edf
-P d45c27a3e5edaa2bd9ff0473e18c6536aa5d15f9a4d22dfee894a5ee4347f8d7 e1416c8b0628afa062d8cff40d0cd3576dc85460e55b21a271f88fcb608b9f59
-R 1dc74743de9bc456bb43ec5af60d4adc
-T +closed e1416c8b0628afa062d8cff40d0cd3576dc85460e55b21a271f88fcb608b9f59
+P 5391687bf8563b3fdd157b436b2cbb6a0ee5f676727d41bbddfaa8eacc39729b
+R 9df1873b31c9843b7d8070e95e535ae7
 U drh
-Z 36be594520b9cc692897ded1e5b06833
+Z e294649fafe56ea83e41b8415698390e
index de6a02d298882b953012dc6d235c373a79a48786..f249cc4086377ec942537d9fe63c02ad11c99d0c 100644 (file)
@@ -1 +1 @@
-5391687bf8563b3fdd157b436b2cbb6a0ee5f676727d41bbddfaa8eacc39729b
\ No newline at end of file
+4199c1e8aa47d77df3ef598cb6f5418f67970dd00f34823463c85eabfc8d2b77
\ No newline at end of file