From: drh Date: Tue, 11 Jun 2019 18:07:53 +0000 (+0000) Subject: Make sure the affinity of the RHS of an IN operator does not affect the X-Git-Tag: version-3.29.0~32 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=42be2ad30bad38f15a4c33956d6fe2b9c4b00989;p=thirdparty%2Fsqlite.git Make sure the affinity of the RHS of an IN operator does not affect the outcome even if the RHS expression contains a COLLATE clause. Ticket [57353f8243c637c0] FossilOrigin-Name: 0f748fe58bbbb7ce3f30303da25ec811b2bbce249549aa9c7927979ac5b38013 --- diff --git a/manifest b/manifest index e2c9abd8a9..0ba7dea5f1 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Mark\san\sunreachable\sbranch\swith\san\sALWAYS\smacro. -D 2019-06-11T16:43:58.413 +C Make\ssure\sthe\saffinity\sof\sthe\sRHS\sof\san\sIN\soperator\sdoes\snot\saffect\sthe\noutcome\seven\sif\sthe\sRHS\sexpression\scontains\sa\sCOLLATE\sclause.\nTicket\s[57353f8243c637c0] +D 2019-06-11T18:07:53.447 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -474,7 +474,7 @@ F src/date.c e1d8ac7102f3f283e63e13867acb0efa33861cf34f0faf4cdbaf9fa7a1eb7041 F src/dbpage.c 135eb3b5e74f9ef74bde5cec2571192c90c86984fa534c88bf4a055076fa19b7 F src/dbstat.c c12833de69cb655751487d2c5a59607e36be1c58ba1f4bd536609909ad47b319 F src/delete.c d08c9e01a2664afd12edcfa3a9c6578517e8ff8735f35509582693adbe0edeaf -F src/expr.c f6b10414b5bd88f2966a407caee09a8f1703f3c80e1a67a5b0945e9dea3ef409 +F src/expr.c 2e0fb76763e2af1e9cf641e68706f0d8969401d93fa864762f7f075c49b447ce F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 0e14d4bef8eac2d87bbd517e492d9084c65008d117823f8922c5e7b2b599bd33 F src/func.c 905c0424900979fade3731b4a271592059425c988cb7d5b245032253712dd7c8 @@ -1020,7 +1020,7 @@ F test/hook2.test b9ff3b8c6519fb67f33192f1afe86e7782ee4ac8 F test/icu.test 41aa8847745a879b897a7febea0f8f9efc8e67fe8bf680589b6e07c7b0a1569a F test/ieee754.test 806fc0ce7f305f57e3331eaceeddcfec9339e607 F test/imposter1.test c3f1db2d3db2c24611a6596a3fc0ffc14f1466c8 -F test/in.test 4b985774a64f143f486418cec53379bed3aeb0503179353cc7c7ce15fb464349 +F test/in.test 63e642e97bc22c8fd970752fb4f0b3992a957003ea87524fe69e5a700500c500 F test/in2.test 5d4c61d17493c832f7d2d32bef785119e87bde75 F test/in3.test 3cbf58c87f4052cee3a58b37b6389777505aa0c0 F test/in4.test d2b38cba404bc4320f4fe1b595b3d163f212c068 @@ -1830,7 +1830,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 e96641f0be7d4454215459b0a95cf1c46ba0133e46d0bae22269741c8f4e5b44 -R 7d7dff82d0b7963bbc938a7ab08b7358 +P d4755aca4b435eed62b54af84013f7f176d3fa5b7b1c243555d59de5749fcde5 +R 3812a38c433825e4f80a93981d20e5e0 U drh -Z b7b0b5e48d9017530c5e5509ff9ff70f +Z 5ba0d1eb2891e71e20f27e0a9eeff5ee diff --git a/manifest.uuid b/manifest.uuid index 776dac85c7..1caa679680 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d4755aca4b435eed62b54af84013f7f176d3fa5b7b1c243555d59de5749fcde5 \ No newline at end of file +0f748fe58bbbb7ce3f30303da25ec811b2bbce249549aa9c7927979ac5b38013 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index 4e8251bd89..f69b2a6217 100644 --- a/src/expr.c +++ b/src/expr.c @@ -44,8 +44,8 @@ char sqlite3TableColumnAffinity(Table *pTab, int iCol){ */ char sqlite3ExprAffinity(Expr *pExpr){ int op; - pExpr = sqlite3ExprSkipCollate(pExpr); if( pExpr->flags & EP_Generic ) return 0; + pExpr = sqlite3ExprSkipCollate(pExpr); op = pExpr->op; if( op==TK_SELECT ){ assert( pExpr->flags&EP_xIsSelect ); diff --git a/test/in.test b/test/in.test index 075095c6b3..c247f2e070 100644 --- a/test/in.test +++ b/test/in.test @@ -734,6 +734,20 @@ do_execsql_test in-16.2 { ORDER BY a DESC, b; } {} - +# 2019-06-11 +# https://www.sqlite.org/src/info/57353f8243c637c0 +# +do_execsql_test in-17.1 { + SELECT 1 IN ('1'); +} 0 +do_execsql_test in-17.2 { + SELECT 1 IN ('1' COLLATE nocase); +} 0 +do_execsql_test in-17.3 { + SELECT 1 IN (CAST('1' AS text)); +} 0 +do_execsql_test in-17.4 { + SELECT 1 IN (CAST('1' AS text) COLLATE nocase); +} 0 finish_test