]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Do not compute unused result columns of subqueries. This optimization will branch-3.26
authordrh <>
Thu, 16 Feb 2023 01:29:51 +0000 (01:29 +0000)
committerdrh <>
Thu, 16 Feb 2023 01:29:51 +0000 (01:29 +0000)
potentially resolve the performance optimization request of
[baa5bb76c35a124c|ticket baa5bb76c35a124c].

FossilOrigin-Name: 0c21b6a5f8547cddc55f7ec27643dbb89e93c0aed23edc9f152be13d9846dd73

1  2 
manifest
manifest.uuid
src/select.c

diff --cc manifest
index 868f09d845c9f5b6635db074cbf2f7a9037e8c15,38e7b2731d9d772cdcacbe90f8b6e702282e414b..b51827882f4e8c8eab9bd02ec00297737a579a8a
+++ b/manifest
@@@ -1,12 -1,13 +1,12 @@@
- C Update\stest\scases\sso\sthat\sthey\swork\swith\sTCL\s8.7\sand\slater.
- D 2023-02-16T01:21:51.925
 -C Fix\sthe\ssubquery\sresult\scolumn\sNULL-ifier\sso\sthat\sit\scorrectly\shandles\nsubquery\scolumns\spast\sthe\s63rd\scolumn.
 -D 2023-02-15T19:53:08.659
++C Do\snot\scompute\sunused\sresult\scolumns\sof\ssubqueries.\s\sThis\soptimization\swill\npotentially\sresolve\sthe\sperformance\soptimization\srequest\sof\n[baa5bb76c35a124c|ticket\sbaa5bb76c35a124c].
++D 2023-02-16T01:29:51.992
  F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
  F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 -F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
 -F Makefile.in 594f07f8829020a45d825234edf14046544b5bf6bc0057a9d5b83b58686b1c46
 -F Makefile.linux-gcc f609543700659711fbd230eced1f01353117621dccae7b9fb70daa64236c5241
 -F Makefile.msc b0026b61d1242add00c28dbe169271a763fffcb3af6762bcdbeb20c3efe6a69f
 -F README.md 8b8df9ca852aeac4864eb1e400002633ee6db84065bd01b78c33817f97d31f5e
 -F VERSION 413ec94920a487ae32c9a2a8819544d690662d6f7c7ce025c0d0b8a1e74fa9db
 +F Makefile.in a050c8670ea0d7b37b2192306cbb50d392acd9902b84e9b56f3444d006f97a6c
 +F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 +F Makefile.msc 0d6831ff7951b302e888d86d4c469e2ec3c22f59eba4118b8c38d5a51d9e2d4f
 +F README.md 377233394b905d3b2e2b33741289e093bc93f2e7adbe00923b2c5958c9a9edee
 +F VERSION 366a87b3d5b1dfe599d66435e175ca14bd2be98be6ba34d94219e1021f49d582
  F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
  F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2
  F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90
@@@ -440,90 -552,92 +440,90 @@@ F spec.template 86a4a43b99ebb3e75e6b9a7
  F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
  F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786
  F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
 -F sqlite_cfg.h.in baf2e409c63d4e7a765e17769b6ff17c5a82bbd9cbf1e284fd2e4cefaff3fcf2
 -F src/alter.c 3ca2f449c890f8b86ec9e06f0c4fccf0648941c3308a16904cb2852227db83f7
 -F src/analyze.c b597c382f23b19cce563211181e84b7e8edddd6871d5f630bbadedb57e562806
 -F src/attach.c cc9d00d30da916ff656038211410ccf04ed784b7564639b9b61d1839ed69fd39
 -F src/auth.c f4fa91b6a90bbc8e0d0f738aa284551739c9543a367071f55574681e0f24f8cf
 -F src/backup.c a2891172438e385fdbe97c11c9745676bec54f518d4447090af97189fd8e52d7
 -F src/bitvec.c 7c849aac407230278445cb069bebc5f89bf2ddd87c5ed9459b070a9175707b3d
 -F src/btmutex.c 6ffb0a22c19e2f9110be0964d0731d2ef1c67b5f7fabfbaeb7b9dabc4b7740ca
 -F src/btree.c 2f012aea074de6319c191cbf5c45034de79bf1c762826e381b1cf75421d8d831
 -F src/btree.h aa354b9bad4120af71e214666b35132712b8f2ec11869cb2315c52c81fad45cc
 -F src/btreeInt.h 06bb2c1a07172d5a1cd27a2a5d617b93b1e976c5873709c31964786f86365a6e
 -F src/build.c c55ab6d1b089ceef57160e840f05f692955ac90944c3d04fcf01d97fd7bfd08d
 -F src/callback.c 4cd7225b26a97f7de5fee5ae10464bed5a78f2adefe19534cc2095b3a8ca484a
 +F src/alter.c 87c9057f5eaa012da23b8e50848eee5e99088c3c478555f9ed255485b61ab5aa
 +F src/analyze.c 3dc6b98cf007b005af89df165c966baaa48e8124f38c87b4d2b276fe7f0b9eb9
 +F src/attach.c 92b51739a885da8bd84bc9a05485f1e48148bce5c15432f059b45af98fff75cd
 +F src/auth.c 0fac71038875693a937e506bceb492c5f136dd7b1249fbd4ae70b4e8da14f9df
 +F src/backup.c 78d3cecfbe28230a3a9a1793e2ead609f469be43e8f486ca996006be551857ab
 +F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33
 +F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6
 +F src/btree.c ba7c7eef4461790f37c309936bfc5d0d6ba9b194b02d3c8ff1fd53b420ea6d3b
 +F src/btree.h febb2e817be499570b7a2e32a9bbb4b607a9234f6b84bb9ae84916d4806e96f2
 +F src/btreeInt.h 620ab4c7235f43572cf3ac2ac8723cbdf68073be4d29da24897c7b77dda5fd96
 +F src/build.c 127d33ad57b455a9339e9fabff41284c8b030cc6247ca7a2a6c0ad7abfc1ce85
 +F src/callback.c 789bd33d188146f66c0dd8306472a72d1c05f71924b24a91caf6bd45cf9aba73
  F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
 -F src/ctime.c 20507cc0b0a6c19cd882fcd0eaeda32ae6a4229fb4b024cfdf3183043d9b703d
 -F src/date.c f21815ca7172ce073db3163ac54c8d9f2841077165c1a6123b4d1c376a0c7ec7
 -F src/dbpage.c d47549716549311f79dc39fe5c8fb19390a6eb2c960f8e37c89a9c4de0c1052e
 -F src/dbstat.c ec92074baa61d883de58c945162d9e666c13cd7cf3a23bc38b4d1c4d0b2c2bef
 -F src/delete.c 86573edae75e3d3e9a8b590d87db8e47222103029df4f3e11fa56044459b514e
 -F src/expr.c 2e5e67e800c9416996df52409746a2f3c7dadf5d38b5a367ce379b239e3f40c8
 +F src/ctime.c 109e58d00f62e8e71ee1eb5944ac18b90171c928ab2e082e058056e1137cc20b
 +F src/date.c ebe1dc7c8a347117bb02570f1a931c62dd78f4a2b1b516f4837d45b7d6426957
 +F src/dbpage.c 135eb3b5e74f9ef74bde5cec2571192c90c86984fa534c88bf4a055076fa19b7
 +F src/dbstat.c 3c8bd4e77f0244fd2bd7cc90acf116ad2f8e82d70e536637f35ac2bc99b726f9
 +F src/delete.c f7938125847e8ef485448db5fbad29acb2991381a02887dd854c1617315ab9fb
 +F src/expr.c 39ce499eedd8096ac81a6afaae45f09aa9af565ec89d1c04ca2c3211061a3645
  F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
 -F src/fkey.c 722f20779f5342a787922deded3628d8c74b5249cab04098cf17ee2f2aaff002
 -F src/func.c 0bf5b82df41ffa1afe2bc67c3d0d361761c56c9e1785c999e24a15ba04c28d2b
 -F src/global.c e06ff8e0acd85aec13563c9ecb44fbbf38232ccf73594998fd880b92d619594b
 -F src/hash.c c6af5f96a7a76d000f07c5402c48c318c2566beecdee9e78b9d9f60ce7119565
 -F src/hash.h 3340ab6e1d13e725571d7cee6d3e3135f0779a7d8e76a9ce0a85971fa3953c51
 -F src/hwtime.h b638809e083b601b618df877b2e89cb87c2a47a01f4def10be4c4ebb54664ac7
 +F src/fkey.c 972a4ba14296bef2303a0abbad1e3d82bc3c61f9e6ce4e8e9528bdee68748812
 +F src/func.c 7c288b4ce309b5a8b8473514b88e1f8e69a80134509a8c0db8e39c858e367e7f
 +F src/global.c 8291eee0782b83124de14ec0389ec9fd6ae1873358a6b0d9469fe17a46ad803b
 +F src/hash.c 931ec82d7e070654a8facb42549bbb3a25720171d73ba94c3d3160580d01ef1f
 +F src/hash.h ab34c5c54a9e9de2e790b24349ba5aab3dbb4fd4
 +F src/hwtime.h 747c1bbe9df21a92e9c50f3bbec1de841dc5e5da
  F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71
 -F src/insert.c 1b11a2e33ee52db93c02fddac67e39d00161d61b69fac2675b82f2aa68c1b61c
 -F src/json.c c85ed6fce06f43d414b0d7fff64749d43a0dbd1067123ee407bd3a0752454161
 -F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa
 -F src/loadext.c b04eb648cedc45efe4298e1ef439ac4f0096ae27b5f01accb0a1f49d57789128
 -F src/main.c f5ed7b748d7e54b96ac577a9d87af9461f13f092bbe684d473448010333402dc
 -F src/malloc.c 47b82c5daad557d9b963e3873e99c22570fb470719082c6658bf64e3012f7d23
 +F src/insert.c 6b81aae27b196925d8ff78824f4bbd435d6a40cd38dc324685e21735bb402109
 +F src/legacy.c 134ab3e3fae00a0f67a5187981d6935b24b337bcf0f4b3e5c9fa5763da95bf4e
 +F src/loadext.c 9050dd153b5583804184be9c9dee9ebb554178d6db1f8ac280899e8aad9060e6
 +F src/main.c 4cfb3913cc9e65d3ac649b1785ac753fc225d29425d5437e012f7eac0cefe0eb
 +F src/malloc.c 07295435093ce354c6d9063ac05a2eeae28bd251d2e63c48b3d67c12c76f7e18
  F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
  F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de
 -F src/mem2.c c8bfc9446fd0798bddd495eb5d9dbafa7d4b7287d8c22d50a83ac9daa26d8a75
 -F src/mem3.c 30301196cace2a085cbedee1326a49f4b26deff0af68774ca82c1f7c06fda4f6
 -F src/mem5.c b7da5c10a726aacacc9ad7cdcb0667deec643e117591cc69cf9b4b9e7f3e96ff
 -F src/memdb.c 559c42e61eb70cd6d4bc692b042497133c6d96c09a3d514d92f3dac72268e223
 -F src/memjournal.c c283c6c95d940eb9dc70f1863eef3ee40382dbd35e5a1108026e7817c206e8a0
 -F src/msvc.h 3a15918220367a8876be3fa4f2abe423a861491e84b864fb2b7426bf022a28f8
 -F src/mutex.c 5e3409715552348732e97b9194abe92fdfcd934cfb681df4ba0ab87ac6c18d25
 -F src/mutex.h a7b2293c48db5f27007c3bdb21d438873637d12658f5a0bf8ad025bb96803c4a
 +F src/mem2.c f1940d9e91948dd6a908fbb9ce3835c36b5d83c3
 +F src/mem3.c 8768ac94694f31ffaf8b4d0ea5dc08af7010a35a
 +F src/mem5.c 9bf955937b07f8c32541c8a9991f33ce3173d944
 +F src/memdb.c cb4013d56fa71c79c498717cbc47b27dd1c7653fd866584b2071ae04114eec46
 +F src/memjournal.c 6f3d36a0a8f72f48f6c3c722f04301ac64f2515435fa42924293e46fc7994661
 +F src/msvc.h 4942752b6a253116baaa8de75256c51a459a5e81
 +F src/mutex.c bae36f8af32c22ad80bbf0ccebec63c252b6a2b86e4d3e42672ff287ebf4a604
 +F src/mutex.h 779d588e3b7756ec3ecf7d78cde1d84aba414f85
  F src/mutex_noop.c 9d4309c075ba9cc7249e19412d3d62f7f94839c4
 -F src/mutex_unix.c dd2b3f1cc1863079bc1349ac0fec395a500090c4fe4e11ab775310a49f2f956d
 -F src/mutex_w32.c caa50e1c0258ac4443f52e00fe8aaea73b6d0728bd8856bedfff822cae418541
 -F src/notify.c 89a97dc854c3aa62ad5f384ef50c5a4a11d70fcc69f86de3e991573421130ed6
 -F src/os.c 81c9c1c52eab711e27e33fd51fe5788488d3a02bc1a71439857abbee5d0d2c97
 -F src/os.h 1ff5ae51d339d0e30d8a9d814f4b8f8e448169304d83a7ed9db66a65732f3e63
 -F src/os_common.h 6c0eb8dd40ef3e12fe585a13e709710267a258e2c8dd1c40b1948a1d14582e06
 -F src/os_kv.c 4d39e1f1c180b11162c6dc4aa8ad34053873a639bac6baae23272fc03349986a
 -F src/os_setup.h 6011ad7af5db4e05155f385eb3a9b4470688de6f65d6166b8956e58a3d872107
 -F src/os_unix.c 90c4fa0a88c8b0817c7ce4dbea0ac3aebfd7deb0797945ac34dfd25006ba393a
 -F src/os_win.c 295fe45f18bd86f2477f4cd79f3377c6f883ceb941b1f46808665c73747f2345
 +F src/mutex_unix.c aaf9ebc3f89df28483c52208497a99a02cc3650011422fc9d4c57e4392f7fe58
 +F src/mutex_w32.c 7670d770c94bbfe8289bec9d7f1394c5a00a57c37f892aab6b6612d085255235
 +F src/notify.c 9711a7575036f0d3040ba61bc6e217f13a9888e7
 +F src/os.c 8aeb0b0f40f8f5b0da03fe49706695adaf42d2f516ab95abc72e86c245e119de
 +F src/os.h 48388821692e87da174ea198bf96b1b2d9d83be5dfc908f673ee21fafbe0d432
 +F src/os_common.h b2f4707a603e36811d9b1a13278bffd757857b85
 +F src/os_setup.h 0dbaea40a7d36bf311613d31342e0b99e2536586
 +F src/os_unix.c f6e91b8fd82af7afbfd073c4974ad6cdb8e62d9f65ceddb45167835a0567fdc0
 +F src/os_win.c 85d9e532d0444ab6c16d7431490c2e279e282aa0917b0e988996b1ae0de5c5a0
  F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
 -F src/pager.c 39af8ff7c73a991f61f4d1e3a6f8f98b1c8e29144723507822774cac5e6ee0b5
 -F src/pager.h f82e9844166e1585f5786837ddc7709966138ced17f568c16af7ccf946c2baa3
 -F src/parse.y 960d2da92a23f8ba2ca22748a51bd75ee2c575564f2cbc59f119640e7f5b4c5d
 -F src/pcache.c f4268f7f73c6a3db12ce22fd25bc68dc42315d19599414ab1207d7cf32f79197
 +F src/pager.c 75e0f3cfa3962c714f519f8a3d1e67ecca1c91de0e010a036b988e40ce9e4c73
 +F src/pager.h 217921e81eb5fe455caa5cda96061959706bcdd29ddb57166198645ef7822ac3
 +F src/parse.y 6840fe7c0b5eb4dd25ee5d075213bc8255ed4c0678d71bfb6744d0520d91c179
 +F src/pcache.c 696a01f1a6370c1b50a09c15972bc3bee3333f8fcd1f2da8e9a76b1b062c59ee
  F src/pcache.h 4f87acd914cef5016fae3030343540d75f5b85a1877eed1a2a19b9f284248586
 -F src/pcache1.c dee95e3cd2b61e6512dc814c5ab76d5eb36f0bfc9441dbb4260fccc0d12bbddc
 -F src/pragma.c 82d5090a35eac75876d3b41f48d06b2370553c9576bf2942233c462e03eb94c9
 -F src/pragma.h e690a356c18e98414d2e870ea791c1be1545a714ba623719deb63f7f226d8bb7
 -F src/prepare.c ce87a08cfddd45a147150db34190b1986f2d4a0e0828858cb6bd908c78fb02e3
 -F src/printf.c ff4b05e38bf928ff1b80d3dda4f977b10fe39ecbfe69c018224c7e5594fb2455
 -F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
 -F src/resolve.c d62c5665279cc7485f9d45b5e20911cc7b19c203f268321a90d05d74f4725750
 -F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92
 -F src/select.c 98984bd8a2f00ae6e2a1c33991617c0d0db68f204ea124cdd853383204499697
 -F src/shell.c.in 5cb750dc00bb8b20b020031fd1bb0cb8759a6e567c27aee6b0af31d187984985
 -F src/sqlite.h.in c060f9e6f646fd817abf273c068666e079fc6e8467ea1d3e8b20f355f82722e9
 +F src/pcache1.c bf9fcea656dce1cd2cca6b77a1d1d3552050d55a31c98bf0d9f405930a83bc95
 +F src/pragma.c 4e056f042683b99c4ea0db395f68d051b1a95833ab40951c40d3ef7e1fee1354
 +F src/pragma.h fdd03d78a7497f74a3f652909f945328480089189526841ae829ce7313d98d13
 +F src/prepare.c f81f8d707e583192c28fea0b2e19385415b7d188123b23f49b038076408d7a69
 +F src/printf.c 0f1177cf1dd4d7827bf64d840768514ec76409abecaca9e8b577dbd065150381
 +F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384
 +F src/resolve.c 4cfc44def0f0690ceaab8f6481f5d76284d7f9509aab6e218a679b4836a54614
 +F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93
- F src/select.c d292fc7d0ba854260d628989a1ed4c35cc9aece5a20aa767b69040181d9ed4f1
++F src/select.c d43c31813bbaabe5117e350fa14cfa46281c5bfd588e661ecbe096fdf1c92248
 +F src/shell.c.in 482e23a370cbe5b0d4c73a0f0f5fce34f7caa08a14a8d75e12f0225c4e14915c
 +F src/sqlite.h.in cce9feede1c1c03923c091b4bbbd081dd77aaf92024cc2cdbf65f712c2f668c3
  F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
 -F src/sqlite3ext.h da473ce2b3d0ae407a6300c4a164589b9a6bfdbec9462688a8593ff16f3bb6e4
 -F src/sqliteInt.h 4dcc36b21dd0c77efeb0bb38b0d31916bc63fb429c8a89d186c945eba0816447
 -F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657
 -F src/status.c 160c445d7d28c984a0eae38c144f6419311ed3eace59b44ac6dafc20db4af749
 -F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
 -F src/tclsqlite.c 8522a04fb9c84faa1d80354430ae0ee9349727a3a4b32e3cfe39b9be8324cabd
 -F src/test1.c 29ab8aca939818a61bf791e4ff5d45df6da30940c0980dcf502562b925de4e05
 -F src/test2.c 827446e259a3b7ab949da1542953edda7b5117982576d3e6f1c24a0dd20a5cef
 +F src/sqlite3ext.h 960f1b86c3610fa23cb6a267572a97dcf286e77aa0dd3b9b23292ffaa1ea8683
 +F src/sqliteInt.h 1161f7579cdd6217737a66517ef27f4016426603eff492e9b31f45a7d7d4c61f
 +F src/sqliteLimit.h 1513bfb7b20378aa0041e7022d04acb73525de35b80b252f1b83fedb4de6a76b
 +F src/status.c 46e7aec11f79dad50965a5ca5fa9de009f7d6bde08be2156f1538a0a296d4d0e
 +F src/table.c b46ad567748f24a326d9de40e5b9659f96ffff34
 +F src/tclsqlite.c e72862a271348d779672b45a730c33fd0c535e630ff927e8ce4a0c908d1d28c6
 +F src/test1.c 5390e5afb31fed61f72d0be0cb1b322d198a6e03fc13ff245ae76d17b4dcf2e9
 +F src/test2.c 3efb99ab7f1fc8d154933e02ae1378bac9637da5
  F src/test3.c 61798bb0d38b915067a8c8e03f5a534b431181f802659a6616f9b4ff7d872644
 -F src/test4.c 4533b76419e7feb41b40582554663ed3cd77aaa54e135cf76b3205098cd6e664
 +F src/test4.c 18ec393bb4d0ad1de729f0b94da7267270f3d8e6
  F src/test5.c 328aae2c010c57a9829d255dc099d6899311672d
 -F src/test6.c ae73a3a42bbc982fb9e301b84d30bda65a307be48c6dff20aba1461e17a9b0ce
 -F src/test8.c 0c856d6ff6b0d2ff6696addc467a15ed17c6910f14475302cd5b3b4e54406161
 +F src/test6.c e8d839fbc552ce044bec8234561a2d5b8819b48e29548ad0ba400471697946a8
 +F src/test7.c 5612e9aecf934d6df7bba6ce861fdf5ba5456010
 +F src/test8.c 3f7d0cc4e12e06832ba3db4455cb16867ccadafa602eb6ff5fcf097bffce56ed
  F src/test9.c 12e5ba554d2d1cbe0158f6ab3f7ffcd7a86ee4e5
  F src/test_async.c 195ab49da082053fdb0f949c114b806a49ca770a
  F src/test_autoext.c 915d245e736652a219a907909bb6710f0d587871
@@@ -1779,8 -2045,8 +1779,8 @@@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a9
  F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
  F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
  F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
- P a7cbf30808e2c0c25aecd30c921b45a9888aff1a53f32350c5fc0196fb55b238
- R 8c04d000120f3201c20cbb96dbedc183
 -P 5dec3cc0225296a043d17f73126d477d90a604f82b3180628176d8f950adbce8
 -R d380059ff4fc01bc81597a53152668a1
++P e9b762de0e8c505f2334d931a5b6db862733e99bc12025ebf9d8882c696959fd 77b220a7240425fa83e142ceef78505208e6e38d797070e146b9f7d255f753c7
++R 87a6dbc349841006e9598dfb4e1e39bd
  U drh
- Z e19c4a4e958d5af50a94c7b8637d662f
 -Z d76a4bd1d7943a5eace66bda083496dd
++Z dffd8acc783ccd53f09f735ed943e784
  # Remove this line to create a well-formed Fossil manifest.
diff --cc manifest.uuid
index 1731d4bf84c1b124c22914db9909d81947b1c41d,149e343a10a4cd887441aee8f21ae312cc118573..23c3e50749ce9d6b26858ab8100594b9d3e12910
@@@ -1,1 -1,1 +1,1 @@@
- e9b762de0e8c505f2334d931a5b6db862733e99bc12025ebf9d8882c696959fd
 -77b220a7240425fa83e142ceef78505208e6e38d797070e146b9f7d255f753c7
++0c21b6a5f8547cddc55f7ec27643dbb89e93c0aed23edc9f152be13d9846dd73
diff --cc src/select.c
index b4e969640ea3b60ce9dbcc79c29e622364d0781d,dc187dfa6ae202e01eb13194b5dce239e9cd9673..fa5afab1364c3c9d40c2cf872c062bef83f5fdf2
@@@ -4377,6 -5235,57 +4377,57 @@@ static int pushDownWhereTerms
  }
  #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */
  
 -static int disableUnusedSubqueryResultColumns(SrcItem *pItem){
+ /*
+ ** Check to see if a subquery contains result-set columns that are
+ ** never used.  If it does, change the value of those result-set columns
+ ** to NULL so that they do not cause unnecessary work to compute.
+ **
+ ** Return the number of column that were changed to NULL.
+ */
 -    Bitmask m = j<BMS-1 ? MASKBIT(j) : TOPBIT;
++static int disableUnusedSubqueryResultColumns(struct SrcList_item *pItem){
+   int nCol;
+   Select *pSub;      /* The subquery to be simplified */
+   Select *pX;        /* For looping over compound elements of pSub */
+   Table *pTab;       /* The table that describes the subquery */
+   int j;             /* Column number */
+   int nChng = 0;     /* Number of columns converted to NULL */
+   assert( pItem!=0 );
+   assert( pItem->pTab!=0 );
+   pTab = pItem->pTab;
+   if( pTab->tabFlags & TF_Ephemeral ) return 0;
+   assert( pItem->pSelect!=0 );
+   pSub = pItem->pSelect;
+   assert( pSub->pEList->nExpr==pTab->nCol );
+   for(pX=pSub; pX; pX=pX->pPrior){
+     if( pX->pPrior && pX->op!=TK_ALL ){
+       /* This optimization does not work for compound subqueries that
+       ** use UNION, INTERSECT, or EXCEPT.  Only UNION ALL is allowed. */
+       return 0;
+     }
+     if( pX->pWin ){
+       /* This optimization does not work for subqueries that use window
+       ** functions. */
+       return 0;
+     }
+   }
+   nCol = pTab->nCol;
+   for(j=0; j<nCol; j++){
+     Select *pX;
 -      pX->selFlags |= SF_PushDown;
++    Bitmask m = j<BMS-1 ? MASKBIT(j) : (((Bitmask)1)<<(BMS-1));
+     if( (m & pItem->colUsed)!=0 ) continue;
+     for(pX=pSub; pX; pX=pX->pPrior) {
+       Expr *pY = pX->pEList->a[j].pExpr;
+       if( pY->op==TK_NULL ) continue;
+       pY->op = TK_NULL;
++      /* pX->selFlags |= SF_PushDown; */
+       nChng++;
+     }
+   }
+   return nChng;
+ }
  /*
  ** The pFunc is the only aggregate function in the query.  Check to see
  ** if the query is a candidate for the min/max optimization. 
@@@ -5870,10 -7379,25 +5921,24 @@@ int sqlite3Select
          sqlite3TreeViewSelect(0, p, 0);
        }
  #endif
 -      assert( pItem->pSelect && (pItem->pSelect->selFlags & SF_PushDown)!=0 );
      }else{
 -      TREETRACE(0x4000,pParse,p,("Push-down not possible\n"));
 +      SELECTTRACE(0x100,pParse,p,("Push-down not possible\n"));
      }
  
+     /* Convert unused result columns of the subquery into simple NULL
+     ** expressions, to avoid unneeded searching and computation.
+     */
+     if( disableUnusedSubqueryResultColumns(pItem) ){
+ #if TREETRACE_ENABLED
+       if( sqlite3TreeTrace & 0x4000 ){
+         TREETRACE(0x4000,pParse,p,
+             ("Change unused result columns to NULL for subquery %d:\n",
+              pSub->selId));
+         sqlite3TreeViewSelect(0, p, 0);
+       }
+ #endif
+     }
      zSavedAuthContext = pParse->zAuthContext;
      pParse->zAuthContext = pItem->zName;