From 5f6a87b3ddb999b607cd20b3118f5059c42aae9a Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 19 Jul 2004 00:39:45 +0000 Subject: [PATCH] When comparing two expressions do not apply affinity to either operand. Ticket #805. (CVS 1810) FossilOrigin-Name: 88a4e400f916d7af088b39a9653d6452b3666577 --- manifest | 22 +++++++++++----------- manifest.uuid | 2 +- src/expr.c | 9 +++++---- test/misc1.test | 6 +++--- test/misc4.test | 3 ++- test/quick.test | 3 ++- test/types2.test | 16 ++++++++++------ www/datatype3.tcl | 9 +++++---- 8 files changed, 39 insertions(+), 31 deletions(-) diff --git a/manifest b/manifest index 5ab4b3e5c1..78c2ce27e4 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Unsuccessful\sattempt\sto\sreproduce\sticket\s#807.\s(CVS\s1809) -D 2004-07-18T23:47:53 +C When\scomparing\stwo\sexpressions\sdo\snot\sapply\saffinity\sto\seither\soperand.\nTicket\s#805.\s(CVS\s1810) +D 2004-07-19T00:39:45 F Makefile.in 77d1219b6563476711a7a962e865979a6f314eb0 F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457 F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd @@ -32,7 +32,7 @@ F src/build.c ecc10d4e5232a49f55304dd9b90739f2771e34ef F src/date.c d42ea73a0b16d5dff9d97e10dc0c05671471b753 F src/delete.c e81545e546f6bc87d7508a93a09ca70695265af3 F src/encode.c a876af473d1d636faa3dca51c7571f2e007eea37 -F src/expr.c d8ee92a9c11113a013f7853acb55453a8e0b2e92 +F src/expr.c df21bde644eca66276eafe0c97734fc8f930f4ab F src/func.c b163fb49efec999eb7bf982f7de5b9be388301f3 F src/hash.c f0a2f22c2a7052d67053b5f4690ea3010bb3fb9f F src/hash.h 762d95f1e567664d1eafc1687de755626be962fb @@ -134,10 +134,10 @@ F test/malloc.test 769b240d89a7ef3320d88919fdb6765f9395a51f F test/memdb.test b8a13fa79f006bd087bbcf135ce8eb62056a6027 F test/memleak.test 26571a04575461f39a7cf97a2ee2f7fb2f519ddb F test/minmax.test 6513f9a1bb85fd35ff72b34b7b6634fad6b1e69c -F test/misc1.test a8eb48d38f7a64e75314a2946db68d2b77901b7d +F test/misc1.test 72768ec8cabc952a4cfcddca43d566f9e0bce899 F test/misc2.test 703734f5817215ca54e364833b3bf5ff36fcc21e F test/misc3.test eb488314990bfc0959221a1acc465013238bf168 -F test/misc4.test e0bf8fc91dc156a663e1b567a4f196f91242e51c +F test/misc4.test f221d03868b4ae7f2028431034d3cf00cead7c26 F test/misuse.test 2a64ce711419f2fd12806ed95af930fd4e7bb8f3 F test/notnull.test 7a08117a71e74b0321aaa937dbeb41a09d6eb1d0 F test/null.test c14d0f4739f21e929b8115b72bf0c765b6bb1721 @@ -146,7 +146,7 @@ F test/pager2.test 55469c7c1c1a54d6b32d7b3cc99001e90101a1ce F test/pragma.test 212d810e02a51c0ff9784a19d55e35d23382005d F test/printf.test 428ad9be92963b68ba222dac4c19724cc4e304ea F test/progress.test 76c722f090b1ccb575e7e4e203a71608c5763beb x -F test/quick.test bbe4abf7f434d71c0de26626c8cbb4858e1bcb18 +F test/quick.test 62cd0e248b3128c3e900d11d99c550aaec41db5f F test/quote.test 08f23385c685d3dc7914ec760d492cacea7f6e3d F test/rollback.test 4097328d44510277244ef4fa51b22b2f11d7ef4c F test/rowid.test b3d059f5c8d8874fa1c31030e0636f67405d20ea @@ -173,7 +173,7 @@ F test/trigger2.test 0767ab30cb5a2c8402c8524f3d566b410b6f5263 F test/trigger3.test 70931be83fa3f563f7a5ca9e88b86f476af73948 F test/trigger4.test 97c11d3cf43d752b172809bb82536372ee5e399c F test/types.test fdf7920c9d3aabbba25c11daa48c872d1870bce9 -F test/types2.test 5d725fcb68dbd032c6d4950d568d75fa33872687 +F test/types2.test f23c147a2ab3e51d5dbcfa9987200db5acba7aa7 F test/unique.test 0e38d4cc7affeef2527720d1dafd1f6870f02f2b F test/update.test b29bd9061a1150426dab6959806fcc73a41b1217 F test/utf16.test 459c2f5ab80c60092c603630a348c32d6e59c558 @@ -210,7 +210,7 @@ F www/conflict.tcl fb8a2ba83746c7fdfd9e52fa7f6aaf5c422b8246 F www/copyright-release.html 294e011760c439c44951a6bfecd4c81a1ae359e8 F www/copyright-release.pdf cfca3558fc97095e57c6117d08f1f5b80d95125a F www/copyright.tcl 82c9670c7ddb0311912ab7fe24703f33c531066c -F www/datatype3.tcl dadcd0b09dc6fdf86d0c38499e310ae94cb586d7 +F www/datatype3.tcl 2bb7dbfa4dd518a6e5fb3cb1cd8296797976d205 F www/datatypes.tcl 566004b81c36877397ddbe6e1907aae6065f6b41 F www/docs.tcl 095b5718ec044156af477061566ea25632624b56 F www/download.tcl b182424161c588891188500abea7a9ea054a508c @@ -234,7 +234,7 @@ F www/tclsqlite.tcl 19191cf2a1010eaeff74c51d83fd5f5a4d899075 F www/vdbe.tcl 59288db1ac5c0616296b26dce071c36cb611dfe9 F www/version3.tcl 092a01f5ef430d2c4acc0ae558d74c4bb89638a0 F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4 -P 2464f79e5ddf65e90ed84ccd793995fc2f713400 -R 73b62d1ab33f4d5ef31ddf536f476cb2 +P d7e9772c74a2b9377f17149cc1baa3b2d0dfbfb8 +R 1a3746fc881442647db9802248e453ac U drh -Z b31cc6f605ce47cd34d1f836b84341e1 +Z bcf75b34b3779312497eba95531e13ee diff --git a/manifest.uuid b/manifest.uuid index abee4c38db..9ff72c2b49 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d7e9772c74a2b9377f17149cc1baa3b2d0dfbfb8 \ No newline at end of file +88a4e400f916d7af088b39a9653d6452b3666577 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index daae43dd8b..81d4d8bed7 100644 --- a/src/expr.c +++ b/src/expr.c @@ -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.150 2004/06/28 01:11:47 danielk1977 Exp $ +** $Id: expr.c,v 1.151 2004/07/19 00:39:45 drh Exp $ */ #include "sqliteInt.h" #include @@ -93,10 +93,11 @@ char sqlite3CompareAffinity(Expr *pExpr, char aff2){ return SQLITE_AFF_NONE; } }else if( !aff1 && !aff2 ){ - /* Neither side of the comparison is a column. Use numeric affinity - ** for the comparison. + /* Neither side of the comparison is a column. Compare the + ** results directly. */ - return SQLITE_AFF_NUMERIC; + /* return SQLITE_AFF_NUMERIC; // Ticket #805 */ + return SQLITE_AFF_NONE; }else{ /* One side is a column, the other is not. Use the columns affinity. */ return (aff1 + aff2); diff --git a/test/misc1.test b/test/misc1.test index 11240f04cd..a92c060584 100644 --- a/test/misc1.test +++ b/test/misc1.test @@ -13,7 +13,7 @@ # This file implements tests for miscellanous features that were # left out of other test files. # -# $Id: misc1.test,v 1.28 2004/06/19 00:16:31 drh Exp $ +# $Id: misc1.test,v 1.29 2004/07/19 00:39:46 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -346,10 +346,10 @@ do_test misc1-11.2 { # do_test misc1-12.1 { execsql {SELECT '0'=='0.0'} -} {1} +} {0} do_test misc1-12.2 { execsql {SELECT '0'==0.0} -} {1} +} {0} do_test misc1-12.3 { execsql {SELECT '12345678901234567890'=='12345678901234567891'} } {0} diff --git a/test/misc4.test b/test/misc4.test index b7ce79feb2..8f0b6f6af2 100644 --- a/test/misc4.test +++ b/test/misc4.test @@ -13,7 +13,7 @@ # This file implements tests for miscellanous features that were # left out of other test files. # -# $Id: misc4.test,v 1.1 2004/07/18 23:47:53 drh Exp $ +# $Id: misc4.test,v 1.2 2004/07/19 00:39:46 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -41,5 +41,6 @@ do_test misc4-1.1 { SELECT * FROM temp.t2; } } {1} +catch {sqlite3_finalize $stmt} finish_test diff --git a/test/quick.test b/test/quick.test index 872ffed346..c9757e1038 100644 --- a/test/quick.test +++ b/test/quick.test @@ -10,7 +10,7 @@ #*********************************************************************** # This file runs all tests. # -# $Id: quick.test,v 1.26 2004/06/29 13:41:21 danielk1977 Exp $ +# $Id: quick.test,v 1.27 2004/07/19 00:39:46 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -27,6 +27,7 @@ set EXCLUDE { misuse.test format3.test crash.test + utf16.test } if {[sqlite3 -has-codec]} { diff --git a/test/types2.test b/test/types2.test index c74d0b1649..729f96d659 100644 --- a/test/types2.test +++ b/test/types2.test @@ -12,7 +12,7 @@ # of this file is testing the interaction of manifest types, type affinity # and comparison expressions. # -# $Id: types2.test,v 1.3 2004/05/20 12:41:20 drh Exp $ +# $Id: types2.test,v 1.4 2004/07/19 00:39:46 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -60,10 +60,13 @@ proc test_bool {testname vars expr res} { # Compare literals against literals. This should always use a numeric # comparison. +# +# Changed by ticket #805: Use no affinity for literal comparisons. +# test_bool types2-1.1 "" {500 = 500.0} 1 -test_bool types2-1.2 "" {'500' = 500.0} 1 -test_bool types2-1.3 "" {500 = '500.0'} 1 -test_bool types2-1.4 "" {'500' = '500.0'} 1 +test_bool types2-1.2 "" {'500' = 500.0} 0 +test_bool types2-1.3 "" {500 = '500.0'} 0 +test_bool types2-1.4 "" {'500' = '500.0'} 0 # Compare literals against a column with TEXT affinity test_bool types2-1.5 {t1=500} {500 = t1} 1 @@ -157,10 +160,11 @@ test_boolset types2-3.3 {o < '20'} {1 2 3 4 5 6 9 10} test_boolset types2-3.3 {o < '20.0'} {1 2 3 4 5 6 7 9 10} # Compare literals against literals (always a numeric comparison). +# Change (by ticket #805): No affinity in comparisons test_bool types2-4.1 "" {500 > 60.0} 1 test_bool types2-4.2 "" {'500' > 60.0} 1 -test_bool types2-4.3 "" {500 > '60.0'} 1 -test_bool types2-4.4 "" {'500' > '60.0'} 1 +test_bool types2-4.3 "" {500 > '60.0'} 0 +test_bool types2-4.4 "" {'500' > '60.0'} 0 # Compare literals against a column with TEXT affinity test_bool types2-4.5 {t1=500.0} {t1 > 500} 1 diff --git a/www/datatype3.tcl b/www/datatype3.tcl index 31033cbb84..e10870ba14 100644 --- a/www/datatype3.tcl +++ b/www/datatype3.tcl @@ -1,4 +1,4 @@ -set rcsid {$Id: datatype3.tcl,v 1.6 2004/06/17 19:04:17 drh Exp $} +set rcsid {$Id: datatype3.tcl,v 1.7 2004/07/19 00:39:46 drh Exp $} source common.tcl header {Datatypes In SQLite Version 3} puts { @@ -195,9 +195,10 @@ SQL scalar expression or literal other than a column value.

affinity is applied to any values with storage class TEXT extracted from the non-NUMERIC column.

-
  • When the results of two expressions are compared, the NUMERIC - affinity is applied to both values before the comparison takes - place.

    +
  • When the results of two expressions are compared, the no + conversions occur. The results are compared as is. If a string + is compared to a number, the number will always be less than the + string.