From 4e895da185c5571094cbdc45a76f62abb631c65d Mon Sep 17 00:00:00 2001 From: dan Date: Mon, 21 Mar 2011 11:03:24 +0000 Subject: [PATCH] Fix session module problems with real (floating point) values. FossilOrigin-Name: a192d04f4e3a9e4960a4d96d1d3ee8635bc1034d --- ext/session/session2.test | 14 ++++++++++++++ ext/session/sqlite3session.c | 8 ++++---- manifest | 14 +++++++------- manifest.uuid | 2 +- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/ext/session/session2.test b/ext/session/session2.test index 453dc627a2..5411563f2e 100644 --- a/ext/session/session2.test +++ b/ext/session/session2.test @@ -105,6 +105,11 @@ do_iterator_test 1.1 t1 { {DELETE t1 {t i t one} {}} {INSERT t1 {} {t ii t two}} } +do_iterator_test 1.1 t1 { + INSERT INTO t1 VALUES(1.5, 99.9) +} { + {INSERT t1 {} {f 1.5 f 99.9}} +} test_reset do_common_sql { @@ -202,7 +207,10 @@ do_test 2.0 { } db2 } {} +proc xTrace {args} { puts $args } + foreach {tn sql} { + 1 { INSERT INTO aux.t1 VALUES(1, 2) } 2 { @@ -255,6 +263,12 @@ foreach {tn sql} { DELETE FROM aux.t1 WHERE 1; ROLLBACK; } + 11 { + INSERT INTO aux.t1 VALUES(randomblob(21000), randomblob(0)); + INSERT INTO aux.t1 VALUES(1.5, 1.5); + INSERT INTO aux.t1 VALUES(4.56, -99.999999999999999999999); + } + } { do_then_apply_sql $sql aux do_test 2.$tn { compare_db db3 db2 } {} diff --git a/ext/session/sqlite3session.c b/ext/session/sqlite3session.c index d934fad6a7..676ea3b44c 100644 --- a/ext/session/sqlite3session.c +++ b/ext/session/sqlite3session.c @@ -245,10 +245,10 @@ static int sessionSerializeValue( nByte = 9; break; - case SQLITE_TEXT: - case SQLITE_BLOB: { + default: { int n = sqlite3_value_bytes(pValue); int nVarint = sessionVarintLen(n); + assert( eType==SQLITE_TEXT || eType==SQLITE_BLOB ); if( aBuf ){ sessionVarintPut(&aBuf[1], n); memcpy(&aBuf[nVarint + 1], eType==SQLITE_TEXT ? @@ -1257,7 +1257,7 @@ static int sessionSelectBind( double rVal; i64 iVal = sessionGetI64(a); memcpy(&rVal, &iVal, 8); - rc = sqlite3_bind_int64(pSelect, i+1, rVal); + rc = sqlite3_bind_double(pSelect, i+1, rVal); } a += 8; break; @@ -1481,7 +1481,7 @@ static int sessionReadRecord( sqlite3VdbeMemSetInt64(apOut[i], v); }else{ double d; - memcpy(&d, &i, 8); + memcpy(&d, &v, 8); sqlite3VdbeMemSetDouble(apOut[i], d); } } diff --git a/manifest b/manifest index b318127f95..46016a2034 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\ssome\stypos\sin\ssqlite3session.h. -D 2011-03-21T07:23:09 +C Fix\ssession\smodule\sproblems\swith\sreal\s(floating\spoint)\svalues. +D 2011-03-21T11:03:25 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 27701a1653595a1f2187dc61c8117e00a6c1d50f F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -100,8 +100,8 @@ F ext/rtree/sqlite3rtree.h 1af0899c63a688e272d69d8e746f24e76f10a3f0 F ext/rtree/tkt3363.test 142ab96eded44a3615ec79fba98c7bde7d0f96de F ext/rtree/viewrtree.tcl eea6224b3553599ae665b239bd827e182b466024 F ext/session/session1.test 3f982c74ee4ba97069917cc35aae25b4ed858e6a -F ext/session/session2.test 96ff08995ab9935d1992ac554a240052883a0ebc -F ext/session/sqlite3session.c d211ce2e95483dfc144494f6c67879d85dddabfa +F ext/session/session2.test 45c9ff2052bf132d25d272b1d4b53f95c1c31463 +F ext/session/sqlite3session.c 3ed836ee8c6faff866bc59da800b6f20b0285071 F ext/session/sqlite3session.h b77b014793162a77ac16507d720fe085cc15d06c F ext/session/test_session.c 2559ef68e421c7fb83e2c19ef08a17343b70d535 F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 @@ -921,7 +921,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P f227f60210fba3930f3050aebb1facee8bac9c0b -R 1d7fc8f92183ec1b52bc0fb00c30936f +P 0853e530cc8d96f025f5160540e8ab3243dea11b +R 482fc377ccc3f262af8beae8e4f384bf U dan -Z c7cce5161a77eeb6aa8085cb909dead1 +Z 767fabeb255e365fd4d794b5ace5ff7b diff --git a/manifest.uuid b/manifest.uuid index 781e099e42..e7426fdf05 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0853e530cc8d96f025f5160540e8ab3243dea11b \ No newline at end of file +a192d04f4e3a9e4960a4d96d1d3ee8635bc1034d \ No newline at end of file