From: dan Date: Thu, 16 Jun 2016 17:14:02 +0000 (+0000) Subject: Add a missing OP_ColumnsUsed opcode to code for expressions like "? IN (SELECT .... X-Git-Tag: version-3.14.0~94 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3480bfdae9523d3b2e67c4b594e79bab6ca7776b;p=thirdparty%2Fsqlite.git Add a missing OP_ColumnsUsed opcode to code for expressions like "? IN (SELECT ...)" in cases where expression can use an index that may contain NULL values. FossilOrigin-Name: 0b1579caf06a2c42433b8bc9dc28c9ad381aa07c --- diff --git a/manifest b/manifest index 086230a5e9..b6450cc841 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\stypo\sin\sa\scomment\son\sthe\sSrcList\sobject. -D 2016-06-16T11:16:53.415 +C Add\sa\smissing\sOP_ColumnsUsed\sopcode\sto\scode\sfor\sexpressions\slike\s"?\sIN\s(SELECT\s...)"\sin\scases\swhere\sexpression\scan\suse\san\sindex\sthat\smay\scontain\sNULL\svalues. +D 2016-06-16T17:14:02.375 F Makefile.in f3f7d2060ce03af4584e711ef3a626ef0b1d6340 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc 50149765ef72f4e652b9a0f1f6462c4784bb9423 @@ -336,7 +336,7 @@ F src/ctime.c 61949e83c4c36e37195a8398ebc752780b534d95 F src/date.c 1cc9fb516ec9932c6fd4d2a0d2f8bc4480145c39 F src/dbstat.c 4f6f7f52b49beb9636ffbd517cfe44a402ba4ad0 F src/delete.c 4aba4214a377ce8ddde2d2e609777bcc8235200f -F src/expr.c 798146ea4c87d723e8a157d88450ac9c43256998 +F src/expr.c 523a5b1db2b6d88c6eefb224877bf635a3bcfc92 F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb F src/fkey.c bc4145347595b7770f9a598cff1c848302cf5413 F src/func.c 61a4114cf7004f10c542cfabbab9f2bcb9033045 @@ -1501,7 +1501,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 0230ca17ba20ecd3d213788ad6891973d52a7b72 -R 1a1c29c9329c6a84a9521e4c335dbb95 -U drh -Z 2cdcc0a9545b2084d273426178a84d04 +P 48b555c42de1cbc031fb6c2c93ef170e491c7d76 +R 7c056b92500e212b6fa7144618e1e6e0 +U dan +Z 6cf13efbb72ea4474e244da36e8952f1 diff --git a/manifest.uuid b/manifest.uuid index 7714859290..6347d15d5f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -48b555c42de1cbc031fb6c2c93ef170e491c7d76 \ No newline at end of file +0b1579caf06a2c42433b8bc9dc28c9ad381aa07c \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index c6a09d9d9d..ce3a476561 100644 --- a/src/expr.c +++ b/src/expr.c @@ -1818,6 +1818,11 @@ int sqlite3FindInIndex(Parse *pParse, Expr *pX, u32 inFlags, int *prRhsHasNull){ eType = IN_INDEX_INDEX_ASC + pIdx->aSortOrder[0]; if( prRhsHasNull && !pTab->aCol[iCol].notNull ){ +#ifdef SQLITE_ENABLE_COLUMN_USED_MASK + const i64 sOne = 1; + sqlite3VdbeAddOp4Dup8(v, OP_ColumnsUsed, + iTab, 0, 0, (u8*)&sOne, P4_INT64); +#endif *prRhsHasNull = ++pParse->nMem; sqlite3SetHasNullFlag(v, iTab, *prRhsHasNull); }