aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordan <dan@noemail.net>2019-03-19 11:56:39 +0000
committerdan <dan@noemail.net>2019-03-19 11:56:39 +0000
commite5166e070a6590c40ca99ca66d0d97ea37e0b1cd (patch)
treed644515575868bce390aab1f14e0e6be432596bd
parentd430c2eb46e0fd8ce179037d12f68b8125d24a25 (diff)
downloadsqlite-e5166e070a6590c40ca99ca66d0d97ea37e0b1cd.tar.gz
sqlite-e5166e070a6590c40ca99ca66d0d97ea37e0b1cd.zip
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
-rw-r--r--manifest16
-rw-r--r--manifest.uuid2
-rw-r--r--src/vdbe.c22
-rw-r--r--src/window.c10
-rw-r--r--test/window1.test32
5 files changed, 57 insertions, 25 deletions
diff --git a/manifest b/manifest
index 2eabdf17c..0378eaa62 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 e0194d86f..7e6faf937 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 9098c07ac..50ec9edd1 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 6474de2be..62bfdafb0 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<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);
diff --git a/test/window1.test b/test/window1.test
index 6eed12133..e25da3d74 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