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
This commit is contained in:
dan 2019-03-19 11:56:39 +00:00
parent d430c2eb46
commit e5166e070a
5 changed files with 57 additions and 25 deletions

View File

@ -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

View File

@ -1 +1 @@
98cc26598718e5557ee00aa77336024c91e483ec6de650e172ad1b44a6f0a77b
c02f77b1b4d025d4243f883d6f3a2b3abcaf4944e0209f641b62c576415343dc

View 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;
}

View 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);
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);
if( eCond>=WINDOW_STARTING_NUM ) sqlite3VdbeChangeP5(v, 1);
}
VdbeCoverageIf(v, eCond==0);
VdbeCoverageIf(v, eCond==1);
VdbeCoverageIf(v, eCond==2);

View 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