From 5d6de15af73cb454474750c6b5dcd809e2917ffe Mon Sep 17 00:00:00 2001 From: dan Date: Wed, 16 Sep 2020 16:40:41 +0000 Subject: [PATCH] Correctly handle expressions like "x IS (not) true/false" within the rhs of IN() expressions. Fix for [f3ff1472]. FossilOrigin-Name: 4236103379df0b3d81a8fb0126ba9742c491fb455aba17eb46a875117f4725b3 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/resolve.c | 2 +- test/in.test | 6 ++++++ 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index 747bf1ec85..95b133a719 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\scrash\sthat\scould\soccur\sin\sSQLITE_MAX_EXPR_DEPTH=0\sbuilds\swhen\sprocessing\sSQL\scontaining\ssyntax\serrors. -D 2020-09-16T16:39:35.274 +C Correctly\shandle\sexpressions\slike\s"x\sIS\s(not)\strue/false"\swithin\sthe\srhs\sof\sIN()\sexpressions.\sFix\sfor\s[f3ff1472]. +D 2020-09-16T16:40:41.565 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -533,7 +533,7 @@ F src/pragma.h 8dc78ab7e9ec6ce3ded8332810a2066f1ef6267e2e03cd7356ee00276125c6cf F src/prepare.c 3d5a761d026052bc888d1b803a06dd2bfe245e8e836d4689f927003549148b0f F src/printf.c 9efcd4e984f22bcccb1ded37a1178cac98f6e3a0534e1e0629f64899971f8838 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 -F src/resolve.c d74715aceed2a8f493ba244d535646fa93132042a4400a29dfd26ec841514048 +F src/resolve.c 97b91fb25d86881ff20c9ad2ad98412c6c1bb5f7d6c9bb044db250cbc9cfcd4b F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 F src/select.c 233e884d7da6601486c7b93aedb97fd29302ae5c03742d0e0eccb4790638bb77 F src/shell.c.in b9b819feede7b85585ab0826490a352e04e2ee46e8132c92597d29972b2be1d7 @@ -1050,7 +1050,7 @@ F test/hook2.test b9ff3b8c6519fb67f33192f1afe86e7782ee4ac8 F test/icu.test 716a6b89fbabe5cc63e0cd4c260befb08fd7b9d761f04d43669233292f0753b1 F test/ieee754.test b0945d12be7d255f3dfa18e2511b17ca37e0edd2b803231c52d05b86c04ab26e F test/imposter1.test c3f1db2d3db2c24611a6596a3fc0ffc14f1466c8 -F test/in.test ae4ba0fe3232fdd84ef1090a68c5cd6ccd93f1f8774d5c967dd0c1b301492eed +F test/in.test 95a704448eaa348300a517df267b37488c854aa0713125f4fa7b6280cfd4ed0f F test/in2.test 5d4c61d17493c832f7d2d32bef785119e87bde75 F test/in3.test 3cbf58c87f4052cee3a58b37b6389777505aa0c0 F test/in4.test 65460600d48933adba4283c6ebd089aae173d16136ab9d01f74c89089090c5a5 @@ -1879,8 +1879,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 850416115423d021c24f0e3eca5fd93143961227e76ff61ccaedea09e13e9efe -Q +5f58dd3a19605b6f49b4364fa29892502eff35f12a7693a8694100e1844711ea -R c56a8133a73d7d322888fcd91f815f41 +P 6438db4570423c918a6f90df8eb17f16988d505cd0432219dca7548bb884c9f9 +Q +493a25949b9a6d0be82169b597133e491d8be4f4147b6eae135b06c1d810abd3 +R 9f06e2be569b7ad70d88716d2dac05a1 U dan -Z 31be61dcafb32e4cc7b3739722d57444 +Z 1aa7e27b972520b96afd482eaaa996f3 diff --git a/manifest.uuid b/manifest.uuid index 15f6391311..8eddb00003 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6438db4570423c918a6f90df8eb17f16988d505cd0432219dca7548bb884c9f9 \ No newline at end of file +4236103379df0b3d81a8fb0126ba9742c491fb455aba17eb46a875117f4725b3 \ No newline at end of file diff --git a/src/resolve.c b/src/resolve.c index fcb6f15224..d53428c63e 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -1075,7 +1075,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ assert( !ExprHasProperty(pExpr, EP_Reduced) ); /* Handle special cases of "x IS TRUE", "x IS FALSE", "x IS NOT TRUE", ** and "x IS NOT FALSE". */ - if( pRight && pRight->op==TK_ID ){ + if( pRight && (pRight->op==TK_ID || pRight->op==TK_TRUEFALSE) ){ int rc = resolveExprStep(pWalker, pRight); if( rc==WRC_Abort ) return WRC_Abort; if( pRight->op==TK_TRUEFALSE ){ diff --git a/test/in.test b/test/in.test index a1fe1d2fcc..f09c52f9f7 100644 --- a/test/in.test +++ b/test/in.test @@ -791,4 +791,10 @@ do_execsql_test in-19.40 { PRAGMA integrity_check; } {ok} +# Ticket f3ff1472887 +# +do_execsql_test in-20.1 { + SELECT (1 IN (2 IS TRUE)); +} {1} + finish_test -- 2.47.2