]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add comments, assertions, and test cases to demonstrate that the
authordrh <drh@noemail.net>
Tue, 23 Oct 2007 18:55:48 +0000 (18:55 +0000)
committerdrh <drh@noemail.net>
Tue, 23 Oct 2007 18:55:48 +0000 (18:55 +0000)
problem described in ticket #2742 is not a real problem. (CVS 4510)

FossilOrigin-Name: c085d6dfc0f5849113986cb2a25e64d0c95b3dfb

manifest
manifest.uuid
src/expr.c
test/capi3.test

index a1d0cd8c3181909cba13d244965e2f5f48f973fb..03f7c7e5485e75f02cdd1190737078951312412b 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\scomments\sto\sthe\scode\swarning\sthat\s_XOPEN_SOURCE\smight\sneed\sto\sbe\ndefined\smanually\sif\susing\sUSE_PREAD\sor\sUSE_PREAD64.\s(CVS\s4509)
-D 2007-10-23T15:59:18
+C Add\scomments,\sassertions,\sand\stest\scases\sto\sdemonstrate\sthat\sthe\nproblem\sdescribed\sin\sticket\s#2742\sis\snot\sa\sreal\sproblem.\s(CVS\s4510)
+D 2007-10-23T18:55:49
 F Makefile.in 30c7e3ba426ddb253b8ef037d1873425da6009a8
 F Makefile.linux-gcc 65241babba6faf1152bf86574477baab19190499
 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -90,7 +90,7 @@ F src/complete.c 4cf68fd75d60257524cbe74f87351b9848399131
 F src/date.c 49c5a6d2de6c12000905b4d36868b07d3011bbf6
 F src/delete.c 849846d06d29851dde0d9f424a5de5817eb140d1
 F src/experimental.c 1b2d1a6cd62ecc39610e97670332ca073c50792b
-F src/expr.c 650f30eba63f9635d5f31a6717c4db7d720eae2c
+F src/expr.c 23fac3749024deeaaa6c25b6b5c521e8d140a2c5
 F src/func.c e8e8978804ba453e9e1377db8824c90871b53cfb
 F src/hash.c 45a7005aac044b6c86bd7e49c44bc15d30006d6c
 F src/hash.h 031cd9f915aff27e12262cb9eb570ac1b8326b53
@@ -216,7 +216,7 @@ F test/btree9.test 5d8711b241145b90f65dd1795d5dd8290846fa5e
 F test/busy.test 0271c854738e23ad76e10d4096a698e5af29d211
 F test/cache.test 3ff445c445742a7b6b9ba6e1d62a25263f9424b9
 F test/capi2.test 3c5066836cbaa9923bcc8282c010aa227bb5efd4
-F test/capi3.test ba20464efde48b33b5792cad9ac71dfe2e8d8cd9
+F test/capi3.test 1eddefd4db279b7a2a64838cb60322a12a1e89a0
 F test/capi3b.test 664eb55318132f292f2c436f90906f578cad6b97
 F test/capi3c.test 40dfef274e7b9363cbd15ccfce9ce364b7b097a4
 F test/cast.test c4780b58b569bab4947458195410ae8791ac216b
@@ -584,7 +584,7 @@ F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130
 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
 F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
-P 36465aeb1f8f92d336faf16c25608c9a8a6585d3
-R c0b489346bd15c8b48b3e65fee073c1d
+P d7ed7cd077fe5f9ffba2bca48b84b231ccfd85b0
+R 038cadfe29415eab90fa87425599b5e1
 U drh
-Z 77c133e74d0121e59bb624a0598e2ce9
+Z 4b76268e2531d74156d78787b834a33e
index 42af8139e77846edf7971aaaaea4f8e4f61a8e5a..e3bf3674985fd588c2b251c5e1599816f083a3f2 100644 (file)
@@ -1 +1 @@
-d7ed7cd077fe5f9ffba2bca48b84b231ccfd85b0
\ No newline at end of file
+c085d6dfc0f5849113986cb2a25e64d0c95b3dfb
\ No newline at end of file
index f196ba19c482a1da86a9efbbd768c80bf4ca5c25..4f3d52779831dce35bb6ec4909b609cef51cd29e 100644 (file)
@@ -12,7 +12,7 @@
 ** This file contains routines used for analyzing expressions and
 ** for generating VDBE code that evaluates expressions in SQLite.
 **
-** $Id: expr.c,v 1.314 2007/10/23 15:39:45 drh Exp $
+** $Id: expr.c,v 1.315 2007/10/23 18:55:49 drh Exp $
 */
 #include "sqliteInt.h"
 #include <ctype.h>
@@ -1694,12 +1694,17 @@ static char *dup8bytes(Vdbe *v, const char *in){
 /*
 ** Generate an instruction that will put the floating point
 ** value described by z[0..n-1] on the stack.
+**
+** The z[] string will probably not be zero-terminated.  But the 
+** z[n] character is guaranteed to be something that does not look
+** like the continuation of the number.
 */
 static void codeReal(Vdbe *v, const char *z, int n, int negateFlag){
   assert( z || v==0 || sqlite3VdbeDb(v)->mallocFailed );
   if( z ){
     double value;
     char *zV;
+    assert( !isdigit(z[n]) );
     sqlite3AtoF(z, &value);
     if( negateFlag ) value = -value;
     zV = dup8bytes(v, (char*)&value);
@@ -1711,11 +1716,16 @@ static void codeReal(Vdbe *v, const char *z, int n, int negateFlag){
 /*
 ** Generate an instruction that will put the integer describe by
 ** text z[0..n-1] on the stack.
+**
+** The z[] string will probably not be zero-terminated.  But the 
+** z[n] character is guaranteed to be something that does not look
+** like the continuation of the number.
 */
 static void codeInteger(Vdbe *v, const char *z, int n, int negateFlag){
   assert( z || v==0 || sqlite3VdbeDb(v)->mallocFailed );
   if( z ){
     int i;
+    assert( !isdigit(z[n]) );
     if( sqlite3GetInt32(z, &i) ){
       if( negateFlag ) i = -i;
       sqlite3VdbeAddOp(v, OP_Integer, i, 0);
index 2c89c43511edd779570336031c69012c1dc31e30..8d74c694b7996141ab84be24e515901aba0e8491 100644 (file)
@@ -11,7 +11,7 @@
 # This file implements regression tests for SQLite library.  The
 # focus of this script testing the callback-free C/C++ API.
 #
-# $Id: capi3.test,v 1.55 2007/08/29 19:15:09 drh Exp $
+# $Id: capi3.test,v 1.56 2007/10/23 18:55:50 drh Exp $
 #
 
 set testdir [file dirname $argv0]
@@ -1020,6 +1020,51 @@ do_test capi3-15.2 {
 do_test capi3-15.3 {
   sqlite3_finalize $STMT
 } {SQLITE_OK}
+do_test capi3-15.4 {
+  #        123456789 1234567
+  set sql {SELECT 1234567890}
+  set STMT [sqlite3_prepare $DB $sql 8 TAIL]
+  sqlite3_step $STMT
+  set v1 [sqlite3_column_int $STMT 0]
+  sqlite3_finalize $STMT
+  set v1
+} {1}
+do_test capi3-15.5 {
+  #        123456789 1234567
+  set sql {SELECT 1234567890}
+  set STMT [sqlite3_prepare $DB $sql 9 TAIL]
+  sqlite3_step $STMT
+  set v1 [sqlite3_column_int $STMT 0]
+  sqlite3_finalize $STMT
+  set v1
+} {12}
+do_test capi3-15.6 {
+  #        123456789 1234567
+  set sql {SELECT 1234567890}
+  set STMT [sqlite3_prepare $DB $sql 12 TAIL]
+  sqlite3_step $STMT
+  set v1 [sqlite3_column_int $STMT 0]
+  sqlite3_finalize $STMT
+  set v1
+} {12345}
+do_test capi3-15.7 {
+  #        123456789 1234567
+  set sql {SELECT 12.34567890}
+  set STMT [sqlite3_prepare $DB $sql 12 TAIL]
+  sqlite3_step $STMT
+  set v1 [sqlite3_column_double $STMT 0]
+  sqlite3_finalize $STMT
+  set v1
+} {12.34}
+do_test capi3-15.8 {
+  #        123456789 1234567
+  set sql {SELECT 12.34567890}
+  set STMT [sqlite3_prepare $DB $sql 14 TAIL]
+  sqlite3_step $STMT
+  set v1 [sqlite3_column_double $STMT 0]
+  sqlite3_finalize $STMT
+  set v1
+} {12.3456}
 
 # Make sure code is always generated even if an IF EXISTS or 
 # IF NOT EXISTS clause is present that the table does not or