]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix for ticket [f973c7ac31].
authordan <dan@noemail.net>
Wed, 9 Jun 2010 15:47:11 +0000 (15:47 +0000)
committerdan <dan@noemail.net>
Wed, 9 Jun 2010 15:47:11 +0000 (15:47 +0000)
FossilOrigin-Name: 6eb058dda8d5f87b02378d8efd821fe64a525dcc

manifest
manifest.uuid
src/where.c
test/tkt-f973c7ac31.test [new file with mode: 0644]

index 18998b1d22f760032d6b7dc2219eb85f4fab5208..060d41f9d9ce42c9bc54e61bb9e64e1398477630 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,8 +1,5 @@
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-C Shift\sthe\smeaning\sof\saReadMark[]\sback\sso\sthat\s+1\soffset\sfrom\smxFrame\sis\nremoved.\s\sAdd\sthe\snew\sREADMARK_NOT_USED\svalue\s(0xffffffff)\sinstead\sof\nzero\sto\ssignal\san\saReadMark[]\sthat\sis\snot\sin\suse.
-D 2010-06-09T14:45:13
+C Fix\sfor\sticket\s[f973c7ac31].
+D 2010-06-09T15:47:11
 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
 F Makefile.in a5cad1f8f3e021356bfcc6c77dc16f6f1952bbc3
 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -230,7 +227,7 @@ F src/vtab.c a0f8a40274e4261696ef57aa806de2776ab72cda
 F src/wal.c 25ce19c8e175baf0c7d303243d38c0b2d4b1ba30
 F src/wal.h 4ace25262452d17e7d3ec970c89ee17794004008
 F src/walker.c 3112bb3afe1d85dc52317cb1d752055e9a781f8f
-F src/where.c 75fee9e255b62f773fcadd1d1f25b6f63ac7a356
+F src/where.c 1c895bef33d0dfc7ed90fb1f74120435d210ea56
 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
 F test/alias.test 4529fbc152f190268a15f9384a5651bbbabc9d87
 F test/all.test 1f527d5ecd6614eeba91a02a24ab2baf5b5a1218
@@ -633,6 +630,7 @@ F test/tkt-9d68c883.test 4251ef9fa08158e50b28a682e56124457a59d048
 F test/tkt-cbd054fa6b.test f14f97ea43662e6f70c9e63287081e8be5d9d589
 F test/tkt-d82e3f3721.test 731359dfdcdb36fea0559cd33fec39dd0ceae8e6
 F test/tkt-f777251dc7a.test 6f24c053bc5cdb7e1e19be9a72c8887cf41d5e87
+F test/tkt-f973c7ac31.test 1da0ed15ec2c7749fb5ce2828cd69d07153ad9f4
 F test/tkt1435.test f8c52c41de6e5ca02f1845f3a46e18e25cadac00
 F test/tkt1443.test bacc311da5c96a227bf8c167e77a30c99f8e8368
 F test/tkt1444.test a9d72f9e942708bd82dde6c707da61c489e213e9
@@ -820,14 +818,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P 3c2de820034e01c2e939bd90a05a58159f60df50
-R 91636215da20a362ea2e64fc78c9decc
-U drh
-Z 48ecf6d24ad1746c8fc1cd67f013e730
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.6 (GNU/Linux)
-
-iD8DBQFMD6j8oxKgR168RlERAhEQAJ9R5n1TsaleiaYrC7/BGXipfEEX+wCeIl+J
-u01EHGRvmB2pUOkEor+I24I=
-=iubS
------END PGP SIGNATURE-----
+P c576827d55c156572b76cf7063e9f253ca6e7403
+R b48b1a3c1b5bb2e514409ff77e6be7cf
+U dan
+Z f948595e6780591bfcc76536af294f11
index d0ba69d25d6edad1ec233e2db331e4c1db40d725..b4460a432346362137109d6f0c3e8e4293737b83 100644 (file)
@@ -1 +1 @@
-c576827d55c156572b76cf7063e9f253ca6e7403
\ No newline at end of file
+6eb058dda8d5f87b02378d8efd821fe64a525dcc
\ No newline at end of file
index 69ba496ed5e71aaafcacbad2817a4cac43d89049..2e740674fb6bdab96136303d8aad184a0402dda0 100644 (file)
@@ -3384,7 +3384,8 @@ static Bitmask codeOneLoopStart(
     int iIdxCur;         /* The VDBE cursor for the index */
     int nExtraReg = 0;   /* Number of extra registers needed */
     int op;              /* Instruction opcode */
-    char *zAff;
+    char *zStartAff;             /* Affinity for start of range constraint */
+    char *zEndAff;               /* Affinity for end of range constraint */
 
     pIdx = pLevel->plan.u.pIdx;
     iIdxCur = pLevel->iIdxCur;
@@ -3425,8 +3426,9 @@ static Bitmask codeOneLoopStart(
     ** starting at regBase.
     */
     regBase = codeAllEqualityTerms(
-        pParse, pLevel, pWC, notReady, nExtraReg, &zAff
+        pParse, pLevel, pWC, notReady, nExtraReg, &zStartAff
     );
+    zEndAff = sqlite3DbStrDup(pParse->db, zStartAff);
     addrNxt = pLevel->addrNxt;
 
     /* If we are doing a reverse order scan on an ascending index, or
@@ -3451,15 +3453,15 @@ static Bitmask codeOneLoopStart(
       Expr *pRight = pRangeStart->pExpr->pRight;
       sqlite3ExprCode(pParse, pRight, regBase+nEq);
       sqlite3ExprCodeIsNullJump(v, pRight, regBase+nEq, addrNxt);
-      if( zAff ){
-        if( sqlite3CompareAffinity(pRight, zAff[nConstraint])==SQLITE_AFF_NONE){
+      if( zStartAff ){
+        if( sqlite3CompareAffinity(pRight, zStartAff[nEq])==SQLITE_AFF_NONE){
           /* Since the comparison is to be performed with no conversions
           ** applied to the operands, set the affinity to apply to pRight to 
           ** SQLITE_AFF_NONE.  */
-          zAff[nConstraint] = SQLITE_AFF_NONE;
+          zStartAff[nEq] = SQLITE_AFF_NONE;
         }
-        if( sqlite3ExprNeedsNoAffinityChange(pRight, zAff[nConstraint]) ){
-          zAff[nConstraint] = SQLITE_AFF_NONE;
+        if( sqlite3ExprNeedsNoAffinityChange(pRight, zStartAff[nEq]) ){
+          zStartAff[nEq] = SQLITE_AFF_NONE;
         }
       }  
       nConstraint++;
@@ -3469,7 +3471,7 @@ static Bitmask codeOneLoopStart(
       startEq = 0;
       start_constraints = 1;
     }
-    codeApplyAffinity(pParse, regBase, nConstraint, zAff);
+    codeApplyAffinity(pParse, regBase, nConstraint, zStartAff);
     op = aStartOp[(start_constraints<<2) + (startEq<<1) + bRev];
     assert( op!=0 );
     testcase( op==OP_Rewind );
@@ -3489,21 +3491,22 @@ static Bitmask codeOneLoopStart(
       sqlite3ExprCacheRemove(pParse, regBase+nEq, 1);
       sqlite3ExprCode(pParse, pRight, regBase+nEq);
       sqlite3ExprCodeIsNullJump(v, pRight, regBase+nEq, addrNxt);
-      if( zAff ){
-        if( sqlite3CompareAffinity(pRight, zAff[nConstraint])==SQLITE_AFF_NONE){
+      if( zEndAff ){
+        if( sqlite3CompareAffinity(pRight, zEndAff[nEq])==SQLITE_AFF_NONE){
           /* Since the comparison is to be performed with no conversions
           ** applied to the operands, set the affinity to apply to pRight to 
           ** SQLITE_AFF_NONE.  */
-          zAff[nConstraint] = SQLITE_AFF_NONE;
+          zEndAff[nEq] = SQLITE_AFF_NONE;
         }
-        if( sqlite3ExprNeedsNoAffinityChange(pRight, zAff[nConstraint]) ){
-          zAff[nConstraint] = SQLITE_AFF_NONE;
+        if( sqlite3ExprNeedsNoAffinityChange(pRight, zEndAff[nEq]) ){
+          zEndAff[nEq] = SQLITE_AFF_NONE;
         }
       }  
-      codeApplyAffinity(pParse, regBase, nEq+1, zAff);
+      codeApplyAffinity(pParse, regBase, nEq+1, zEndAff);
       nConstraint++;
     }
-    sqlite3DbFree(pParse->db, zAff);
+    sqlite3DbFree(pParse->db, zStartAff);
+    sqlite3DbFree(pParse->db, zEndAff);
 
     /* Top of the loop body */
     pLevel->p2 = sqlite3VdbeCurrentAddr(v);
diff --git a/test/tkt-f973c7ac31.test b/test/tkt-f973c7ac31.test
new file mode 100644 (file)
index 0000000..882e86a
--- /dev/null
@@ -0,0 +1,87 @@
+# 2010 June 09
+#
+# The author disclaims copyright to this source code.  In place of
+# a legal notice, here is a blessing:
+#
+#    May you do good and not evil.
+#    May you find forgiveness for yourself and forgive others.
+#    May you share freely, never taking more than you give.
+#
+#***********************************************************************
+# This file implements regression tests for SQLite library. 
+#
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+
+do_test tkt-f973c7ac3-1.0 {
+  execsql {
+    CREATE TABLE t(c1 INTEGER, c2 INTEGER);
+    INSERT INTO t VALUES(5, 5);
+    INSERT INTO t VALUES(5, 4);
+  }
+} {}
+
+foreach {tn sql} {
+  1 ""
+  2 "CREATE INDEX i1 ON t(c1, c2)"
+} {
+
+  execsql $sql
+
+  do_test tkt-f973c7ac3-1.$tn.1 {
+    execsql { 
+      SELECT * FROM t WHERE c1 = 5 AND c2>0 AND c2<='2' ORDER BY c2 DESC 
+    }
+  } {}
+  do_test tkt-f973c7ac3-1.$tn.2 {
+    execsql { 
+      SELECT * FROM t WHERE c1 = 5 AND c2>0 AND c2<=5 ORDER BY c2 DESC 
+    }
+  } {5 5 5 4}
+  do_test tkt-f973c7ac3-1.$tn.3 {
+    execsql { 
+      SELECT * FROM t WHERE c1 = 5 AND c2>0 AND c2<='5' ORDER BY c2 DESC 
+    }
+  } {5 5 5 4}
+  do_test tkt-f973c7ac3-1.$tn.4 {
+    execsql { 
+      SELECT * FROM t WHERE c1 = 5 AND c2>'0' AND c2<=5 ORDER BY c2 DESC 
+    }
+  } {5 5 5 4}
+  do_test tkt-f973c7ac3-1.$tn.5 {
+    execsql { 
+      SELECT * FROM t WHERE c1 = 5 AND c2>'0' AND c2<='5' ORDER BY c2 DESC 
+    }
+  } {5 5 5 4}
+
+  do_test tkt-f973c7ac3-1.$tn.6 {
+    execsql { 
+      SELECT * FROM t WHERE c1 = 5 AND c2>0 AND c2<='2' ORDER BY c2 ASC 
+    }
+  } {}
+  do_test tkt-f973c7ac3-1.$tn.7 {
+    execsql { 
+      SELECT * FROM t WHERE c1 = 5 AND c2>0 AND c2<=5 ORDER BY c2 ASC 
+    }
+  } {5 4 5 5}
+  do_test tkt-f973c7ac3-1.$tn.8 {
+    execsql { 
+      SELECT * FROM t WHERE c1 = 5 AND c2>0 AND c2<='5' ORDER BY c2 ASC 
+    }
+  } {5 4 5 5}
+  do_test tkt-f973c7ac3-1.$tn.9 {
+    execsql { 
+      SELECT * FROM t WHERE c1 = 5 AND c2>'0' AND c2<=5 ORDER BY c2 ASC 
+    }
+  } {5 4 5 5}
+  do_test tkt-f973c7ac3-1.$tn.10 {
+    execsql { 
+      SELECT * FROM t WHERE c1 = 5 AND c2>'0' AND c2<='5' ORDER BY c2 ASC 
+    }
+  } {5 4 5 5}
+} 
+
+
+finish_test
+