]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Revert the OP_MustBeInt opcode implementation on this branch so that it again matches...
authordan <dan@noemail.net>
Tue, 19 Mar 2019 11:56:39 +0000 (11:56 +0000)
committerdan <dan@noemail.net>
Tue, 19 Mar 2019 11:56:39 +0000 (11:56 +0000)
FossilOrigin-Name: c02f77b1b4d025d4243f883d6f3a2b3abcaf4944e0209f641b62c576415343dc

manifest
manifest.uuid
src/vdbe.c
src/window.c
test/window1.test

index 2eabdf17c09c558058f0d9bfbd0659ba5651f0b6..0378eaa627c8925588947b7cb0579b2f0eafb6a7 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Update\sthis\sbranch\swith\slatest\strunk\schanges.
-D 2019-03-19T11:17:28.065
+C Revert\sthe\sOP_MustBeInt\sopcode\simplementation\son\sthis\sbranch\sso\sthat\sit\sagain\smatches\strunk.\sThe\sextra\sfunctionality\sis\sno\slonger\srequired.
+D 2019-03-19T11:56:39.776
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -587,7 +587,7 @@ F src/upsert.c 0dd81b40206841814d46942a7337786932475f085716042d0cb2fc7791bf8ca4
 F src/utf.c 810fbfebe12359f10bc2a011520a6e10879ab2a163bcb26c74768eab82ea62a5
 F src/util.c 82a2e3f691a3b654be872e305dab1f455e565dedf5e6a90c818c1ab307c00432
 F src/vacuum.c a9f389f41556c0ec310bc9169dc9476603c30a0a913ad92bfbc75c86886967ca
-F src/vdbe.c 26da7a980ae9ec4c3d5db8583631e6845a48d4d9dd1b31de19efc046a336884c
+F src/vdbe.c 8f824b423460fbbd6a140f557b9d3cb26fa55404d03aee43584d11c7d1011b02
 F src/vdbe.h 712bca562eaed1c25506b9faf9680bdc75fc42e2f4a1cd518d883fa79c7a4237
 F src/vdbeInt.h a76d5eed62c76bcd8de7afd3147fac1bc40c5a870582664bcd7d071ef437c37f
 F src/vdbeapi.c 7a052df80d7e2e55382076174633e888f21fe200feb5d49b1b441b4c38ab851a
@@ -605,7 +605,7 @@ F src/where.c 8a207cb2ca6b99e1edb1e4bbff9b0504385a759cbf66180d1deb34d80ca4b799
 F src/whereInt.h 5f14db426ca46a83eabab1ae9aa6d4b8f27504ad35b64c290916289b1ddb2e88
 F src/wherecode.c 6fa4056c5ce019e4a8af33795906340176813cb3c1236f4b7b08df76a1b6287b
 F src/whereexpr.c 90859652920f153d2c03f075488744be2926625ebd36911bcbcb17d0d29c891c
-F src/window.c 76d83479ab5d0379c1641e3e342f25c6e9f12987e59ce72d1ddcf3220bbad818
+F src/window.c bd0a1267dff9ef95057600acadebf5dea3fa8a89bd7702728e517efaa0e3e8cf
 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
 F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd
 F test/affinity3.test 6a101af2fc945ce2912f6fe54dd646018551710d
@@ -1677,7 +1677,7 @@ F test/win32heap.test 10fd891266bd00af68671e702317726375e5407561d859be1aa04696f2
 F test/win32lock.test fbf107c91d8f5512be5a5b87c4c42ab9fdd54972
 F test/win32longpath.test 169c75a3b2e43481f4a62122510210c67b08f26d
 F test/win32nolock.test ac4f08811a562e45a5755e661f45ca85892bdbbc
-F test/window1.test 1e0118726fd898a882c2c70244b13f40bbcea3f938154892bec871fc2008081d
+F test/window1.test 320d881253330f51e5065fd6e4eae35cedf598bf5b141f49bcf88e4e054da195
 F test/window2.tcl 9bfa842d8a62b0d36dc8c1b5972206393c43847433c6d75940b87fec93ce3143
 F test/window2.test 8e6d2a1b9f54dfebee1cde961c8590cd87b4db45c50f44947a211e1b63c2a05e
 F test/window3.tcl acea6e86a4324a210fd608d06741010ca83ded9fde438341cb978c49928faf03
@@ -1813,7 +1813,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P a6d61dfd4780eccfce5f7a5ead6c04e3b78bc4a461551fd7dd602550e0d51084 cbb7e60272cda518fa1bd8d3e3cd02e031b657fef92a9d4d7ed8c2bfb97be7c8
-R f981124fd5a9cfc02100f35bfeda05f9
+P 98cc26598718e5557ee00aa77336024c91e483ec6de650e172ad1b44a6f0a77b
+R 4fb3235f0967d01b60e8218486bbe7a4
 U dan
-Z b700b6ffd43994fcbbd4a8327acf2da3
+Z 2cdef3e3468ea49f5395a7b5da371b9c
index e0194d86f18ced2a01dd7ff7aa16b21ba565e09d..7e6faf937f4a9d0c5b7c1d326485d263d0bc3f25 100644 (file)
@@ -1 +1 @@
-98cc26598718e5557ee00aa77336024c91e483ec6de650e172ad1b44a6f0a77b
\ No newline at end of file
+c02f77b1b4d025d4243f883d6f3a2b3abcaf4944e0209f641b62c576415343dc
\ No newline at end of file
index 9098c07ac0a9c1b228aeff0b94dfc9e095e322fe..50ec9edd14a7a3c9584ba9f48e86a3cae9aa30bf 100644 (file)
@@ -1723,25 +1723,19 @@ case OP_AddImm: {            /* in1 */
   break;
 }
 
-/* Opcode: MustBeInt P1 P2 * * P5
+/* Opcode: MustBeInt P1 P2 * * *
 ** 
-** If P5 is 0, force the value in register P1 to be an integer. If 
-** the value in P1 is not an integer and cannot be converted into an 
-** integer without data loss, then jump immediately to P2, or if P2==0
+** Force the value in register P1 to be an integer.  If the value
+** in P1 is not an integer and cannot be converted into an integer
+** without data loss, then jump immediately to P2, or if P2==0
 ** raise an SQLITE_MISMATCH exception.
-**
-** Or, if P5 is non-zero, then force the register in P1 to be a number
-** (real or integer). Jump to P2 if this cannot be accomplished without
-** data loss. P2 must be non-zero in this case.
 */
 case OP_MustBeInt: {            /* jump, in1 */
-  u8 f;
-  f = (pOp->p5 ? (MEM_Int|MEM_Real) : MEM_Int);
   pIn1 = &aMem[pOp->p1];
-  if( (pIn1->flags & f)==0 ){
+  if( (pIn1->flags & MEM_Int)==0 ){
     applyAffinity(pIn1, SQLITE_AFF_NUMERIC, encoding);
-    VdbeBranchTaken((pIn1->flags&f)==0, 2);
-    if( (pIn1->flags & f)==0 ){
+    VdbeBranchTaken((pIn1->flags&MEM_Int)==0, 2);
+    if( (pIn1->flags & MEM_Int)==0 ){
       if( pOp->p2==0 ){
         rc = SQLITE_MISMATCH;
         goto abort_due_to_error;
@@ -1750,7 +1744,7 @@ case OP_MustBeInt: {            /* jump, in1 */
       }
     }
   }
-  if( f==MEM_Int ) MemSetTypeFlag(pIn1, MEM_Int);
+  MemSetTypeFlag(pIn1, MEM_Int);
   break;
 }
 
index 6474de2be6b317fecc538fd9494e454c259fc447..62bfdafb0c859eb8963601e3113019baae7b079f 100644 (file)
@@ -1302,8 +1302,14 @@ static void windowCheckValue(Parse *pParse, int reg, int eCond){
   int regZero = sqlite3GetTempReg(pParse);
   assert( eCond>=0 && eCond<ArraySize(azErr) );
   sqlite3VdbeAddOp2(v, OP_Integer, 0, regZero);
-  sqlite3VdbeAddOp2(v, OP_MustBeInt, reg, sqlite3VdbeCurrentAddr(v)+2);
-  if( eCond>=WINDOW_STARTING_NUM ) sqlite3VdbeChangeP5(v, 1);
+  if( eCond>=WINDOW_STARTING_NUM ){
+    int regString = sqlite3GetTempReg(pParse);
+    sqlite3VdbeAddOp4(v, OP_String8, 0, regString, 0, "", P4_STATIC);
+    sqlite3VdbeAddOp3(v, OP_Ge, regString, sqlite3VdbeCurrentAddr(v)+2, reg);
+    sqlite3VdbeChangeP5(v, SQLITE_AFF_NUMERIC);
+  }else{
+    sqlite3VdbeAddOp2(v, OP_MustBeInt, reg, sqlite3VdbeCurrentAddr(v)+2);
+  }
   VdbeCoverageIf(v, eCond==0);
   VdbeCoverageIf(v, eCond==1);
   VdbeCoverageIf(v, eCond==2);
index 6eed12133a00b91c3321c215852d31c429fca4e4..e25da3d74f66675e74e3da39e1d3a194e7a85de0 100644 (file)
@@ -938,6 +938,38 @@ do_execsql_test 21.1 {
   FROM keyword_tab
 }
 
+#-------------------------------------------------------------------------
+foreach {tn expr err} {
+  1   4.5      0
+  2   NULL     1
+  3   0.0      0
+  4   0.1      0
+  5  -0.1      1
+  6  ''        1
+  7  '2.0'     0
+  8  '2.0x'    1
+  9  x'1234'   1
+ 10  '1.2'     0
+} {
+  set res {0 1}
+  if {$err} {set res {1 {frame starting offset must be a non-negative number}} }
+  do_catchsql_test 22.$tn.1 "
+    WITH a(x, y) AS ( VALUES(1, 2) )
+    SELECT sum(x) OVER (
+      ORDER BY y RANGE BETWEEN $expr PRECEDING AND UNBOUNDED FOLLOWING
+    ) FROM a
+  " $res
+
+  set res {0 1}
+  if {$err} {set res {1 {frame ending offset must be a non-negative number}} }
+  do_catchsql_test 22.$tn.2 "
+    WITH a(x, y) AS ( VALUES(1, 2) )
+    SELECT sum(x) OVER (
+      ORDER BY y RANGE BETWEEN UNBOUNDED PRECEDING AND $expr FOLLOWING
+    ) FROM a
+  " $res
+}
+
 finish_test