From: dan Date: Tue, 19 Mar 2019 11:56:39 +0000 (+0000) Subject: Revert the OP_MustBeInt opcode implementation on this branch so that it again matches... X-Git-Tag: version-3.28.0~88^2~6 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e5166e070a6590c40ca99ca66d0d97ea37e0b1cd;p=thirdparty%2Fsqlite.git Revert the OP_MustBeInt opcode implementation on this branch so that it again matches trunk. The extra functionality is no longer required. FossilOrigin-Name: c02f77b1b4d025d4243f883d6f3a2b3abcaf4944e0209f641b62c576415343dc --- diff --git a/manifest b/manifest index 2eabdf17c0..0378eaa627 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index e0194d86f1..7e6faf937f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -98cc26598718e5557ee00aa77336024c91e483ec6de650e172ad1b44a6f0a77b \ No newline at end of file +c02f77b1b4d025d4243f883d6f3a2b3abcaf4944e0209f641b62c576415343dc \ No newline at end of file diff --git a/src/vdbe.c b/src/vdbe.c index 9098c07ac0..50ec9edd14 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -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; } diff --git a/src/window.c b/src/window.c index 6474de2be6..62bfdafb0c 100644 --- a/src/window.c +++ b/src/window.c @@ -1302,8 +1302,14 @@ static void windowCheckValue(Parse *pParse, int reg, int eCond){ int regZero = sqlite3GetTempReg(pParse); assert( eCond>=0 && 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); diff --git a/test/window1.test b/test/window1.test index 6eed12133a..e25da3d74f 100644 --- a/test/window1.test +++ b/test/window1.test @@ -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