]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Merge latest trunk changes into this branch.
authordan <Dan Kennedy>
Sat, 5 Oct 2024 15:51:05 +0000 (15:51 +0000)
committerdan <Dan Kennedy>
Sat, 5 Oct 2024 15:51:05 +0000 (15:51 +0000)
FossilOrigin-Name: a92bb48a48bd3430493e234c1f57f439f09d1b34b15dda2d5f2f8daab36d9923

1  2 
manifest
manifest.uuid
src/build.c
src/parse.y
src/resolve.c
src/select.c
src/sqliteInt.h
src/treeview.c
src/vdbe.c
src/where.c
src/wherecode.c

diff --cc manifest
index 361fe8621751a88d5bfd14caf393f7751f8c9a7f,3a576a90938df82b1ef3ef2cb40f23e8ea67d29c..07c385285a2fc00a31c421ddcc3c60143096e736
+++ b/manifest
@@@ -1,5 -1,5 +1,5 @@@
- C Merge\sthe\slatest\strunk\senhancements\sinto\sthe\slateral-join\sbranch.
- D 2024-07-31T23:49:46.762
 -C Add\sext/wasm\sto\sthe\stop-level\sclean/distclean\srules\sin\ssuch\sa\sway\sthat\sany\serror\sdue\sto\sa\slack\sof\sgmake\sare\signored.
 -D 2024-10-05T12:02:17.445
++C Merge\slatest\strunk\schanges\sinto\sthis\sbranch.
++D 2024-10-05T15:51:05.968
  F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
  F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
  F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@@ -428,6 -439,7 +439,7 @@@ F ext/misc/urifuncs.c f71360d14fa9e7626
  F ext/misc/uuid.c 5bb2264c1b64d163efa46509544fd7500cb8769cb7c16dd52052da8d961505cf
  F ext/misc/vfslog.c 3932ab932eeb2601dbc4447cb14d445aaa9fbe43b863ef5f014401c3420afd20
  F ext/misc/vfsstat.c a85df08654743922a19410d7b1e3111de41bb7cd07d20dd16eda4e2b808d269d
 -F ext/misc/vfstrace.c ac76a4ac4d907774fd423cc2b61410c756f9d0782e27cf6032e058594accaaca
++F ext/misc/vfstrace.c ac76a4ac4d907774fd423cc2b61410c756f9d0782e27cf6032e058594accaaca w src/test_vfstrace.c
  F ext/misc/vtablog.c 1100250ce8782db37c833e3a9a5c9a3ecf1af5e15b8325572b82e6e0a138ffb5
  F ext/misc/vtshim.c 1976e6dd68dd0d64508c91a6dfab8e75f8aaf6cd
  F ext/misc/wholenumber.c 0fa0c082676b7868bf2fa918e911133f2b349bcdceabd1198bba5f65b4fc0668
@@@ -601,12 -613,9 +613,9 @@@ F ext/wasm/SQLTester/SQLTester.mjs ce76
  F ext/wasm/SQLTester/SQLTester.run.mjs c72b7fe2072d05992f7a3d8c6a1d34e95712513ceabe40849784e24e41c84638
  F ext/wasm/SQLTester/index.html 3f8a016df0776be76605abf20e815ecaafbe055abac0e1fe5ea080e7846b760d
  F ext/wasm/SQLTester/touint8array.c 2d5ece04ec1393a6a60c4bf96385bda5e1a10ad49f3038b96460fc5e5aa7e536
- F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-auth 7ac80cc3b6a6d52e041bb295e85555ce797be78c15ef2008a64ae58815014080
- F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-core 400213eb52a7e5ad5f448053d375cacf4dac2cf45d134f3edfe485ae4a49a183 w ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api
- F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-preupdate d1d62a2212099f2c0782d730beb8cb84a7a52d99c15ead2cb9b1411fff5fd6b1
+ F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-core 2bcbbfe3b95c043ed6037e2708a2ee078d212dd1612c364f93588d8dc97300fe
 -F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-extras fe40d6d758646e38f8b15f709044951e10884214f5453d35502100179c388c13
++F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-extras fe40d6d758646e38f8b15f709044951e10884214f5453d35502100179c388c13 w ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-session
  F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-see fb29e62082a658f0d81102488414d422c393c4b20cc2f685b216bc566237957b
- F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-session 213b6c04267cb9bd760172db011eb1650732805fb3d01f9395478a8ceec18eb0
- F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-vtab fd57af1f4502a052be27d8402df74be1dc60fcb6a687d372972abd90e424120a
  F ext/wasm/api/EXPORTED_RUNTIME_METHODS.sqlite3-api 1ec3c73e7d66e95529c3c64ac3de2470b0e9e7fbf7a5b41261c367cf4f1b7287
  F ext/wasm/api/README.md 34fe11466f9c1d81b10a0469e1114e5f1c5a6365c73d80a1a6ca639a1a358b73
  F ext/wasm/api/extern-post-js.c-pp.js c4154a7f90c2d7e51fd6738273908152036c3457fdc0b6523f1be3ef51105aac
@@@ -698,22 -708,22 +708,22 @@@ F src/auth.c 4c1ea890e0069ad73bead5d17a
  F src/backup.c 5c97e8023aab1ce14a42387eb3ae00ba5a0644569e3476f38661fa6f824c3523
  F src/bitvec.c 9eac5f42c11914d5ef00a75605bb205e934f435c579687f985f1f8b0995c8645
  F src/btmutex.c 79a43670447eacc651519a429f6ece9fd638563cf95b469d6891185ddae2b522
- F src/btree.c 8b42fc7d9efdb2df05c30e8f91ff6cfbd979724ae24bf90269028468b7a13333
+ F src/btree.c 8c5592c618741c5fc9733e7efe3927bfafad3e999d15b0a0f3f1d3f3e17b919e
  F src/btree.h 55066f513eb095db935169dab1dc2f7c7a747ef223c533f5d4ad4dfed346cbd0
  F src/btreeInt.h 98aadb6dcb77b012cab2574d6a728fad56b337fc946839b9898c4b4c969e30b6
- F src/build.c 7db395d00bc3a188266400d6d0bf65183a92add62adac24f32822df660fd3f2b
 -F src/build.c 3a1840d9d171ce2d24f4c1f7acda7266ab796c664290c1acba65ff98ce2bd01e
++F src/build.c a6852fb4f545430ba37a5b542c02a12c70a2c146007d0482cf919b6639790017
  F src/callback.c db3a45e376deff6a16c0058163fe0ae2b73a2945f3f408ca32cf74960b28d490
  F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
- F src/ctime.c 64e4b1227b4ed123146f0aa2989131d1fbd9b927b11e80c9d58c6a68f9cd5ce3
- F src/date.c 13dd752847afb32ed70510ad7345a5b9c841f51ad904dba5d010f1fa3a6a324e
- F src/dbpage.c 80e46e1df623ec40486da7a5086cb723b0275a6e2a7b01d9f9b5da0f04ba2782
- F src/dbstat.c 3b677254d512fcafd4d0b341bf267b38b235ccfddbef24f9154e19360fa22e43
- F src/delete.c cb766727c78e715f9fb7ec8a7d03658ed2a3016343ca687acfcec9083cdca500
- F src/expr.c fe958028b36af640b70b2174354c044f75b8c4a4645c921592122aa2a022083a
+ F src/ctime.c b224d3db0f28c4a5f1407c50107a0a8133bd244ff3c7f6f8cedeb896a8cf1b64
+ F src/date.c 89ce1ff20512a7fa5070ba6e7dd5c171148ca7d580955795bf97c79c2456144a
+ F src/dbpage.c db1be8adaf1f839ad733c08baeac5c22aa912f7b535865c0c061382602081360
+ F src/dbstat.c 73362c0df0f40ad5523a6f5501224959d0976757b511299bf892313e79d14f5c
+ F src/delete.c 03a77ba20e54f0f42ebd8eddf15411ed6bdb06a2c472ac4b6b336521bf7cea42
+ F src/expr.c 6d5f2c38fe3ec06a7eac599dac822788b36064124e20112a844e9cd5156cb239
  F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
- F src/fkey.c 852f93c0ef995e0c2b8983059a2b97151c194cc8259e21f5bc2b7ac508348c2a
- F src/func.c 1f61e32e7a357e615b5d2e774bee563761fce4f2fd97ecb0f72c33e62a2ada5f
- F src/global.c 61a419dd9e993b9be0f91de4c4ccf322b053eb829868e089f0321dd669be3b90
+ F src/fkey.c 928ed2517e8732113d2b9821aa37af639688d752f4ea9ac6e0e393d713eeb76f
+ F src/func.c df400a1d3f4625997d4dd8a81951c303e066277c29b861d37e03cd152d7858dd
+ F src/global.c a19e4b1ca1335f560e9560e590fc13081e21f670643367f99cb9e8f9dc7d615b
  F src/hash.c 9ee4269fb1d6632a6fecfb9479c93a1f29271bddbbaf215dd60420bcb80c7220
  F src/hash.h 3340ab6e1d13e725571d7cee6d3e3135f0779a7d8e76a9ce0a85971fa3953c51
  F src/hwtime.h f9c2dfb84dce7acf95ce6d289e46f5f9d3d1afd328e53da8f8e9008e3b3caae6
@@@ -748,23 -758,23 +758,23 @@@ F src/os_win.c 6ff43bac175bd9ed79e7c0f9
  F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
  F src/pager.c b08600ebf0db90b6d1e9b8b6577c6fa3877cbe1a100bd0b2899e4c6e9adad4b3
  F src/pager.h 4b1140d691860de0be1347474c51fee07d5420bd7f802d38cbab8ea4ab9f538a
- F src/parse.y 4bd8b449ca520f7362bcd5d48992439dcc297ca2f1f37f0b5ed771ccda9907a5
 -F src/parse.y a7a8d42eeff01d267444ddb476029b0b1726fb70ae3d77984140f17ad02e2d61
++F src/parse.y 23a12d93e29c14b8e80b352fcbe04a53f392256e2523331403f0702d22566584
  F src/pcache.c 588cc3c5ccaaadde689ed35ce5c5c891a1f7b1f4d1f56f6cf0143b74d8ee6484
  F src/pcache.h 1497ce1b823cf00094bb0cf3bac37b345937e6f910890c626b16512316d3abf5
  F src/pcache1.c 49516ad7718a3626f28f710fa7448ef1fce3c07fd169acbb4817341950264319
  F src/pragma.c 52bfbf6dfd668b69b5eb9bd1186e3a67367c8453807150d6e75239229924f684
  F src/pragma.h e690a356c18e98414d2e870ea791c1be1545a714ba623719deb63f7f226d8bb7
- F src/prepare.c d99931f45416652895e502328ca49fe782cfc4e1ebdcda13b3736d991ebf42ce
- F src/printf.c 8b250972305e14b365561be5117ed0fd364e4fd58968776df1ce64c6280b90f9
+ F src/prepare.c 3ba0ad907b7773ed642f66cea8a2c9c8edc18841aa1050b6218dbb3479e86225
+ F src/printf.c 6a87534ebfb9e5346011191b1f3a7ebc457f5938c7e4feeea478ecf53f6a41b2
  F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
- F src/resolve.c a3d8ad8e1eb2595ff0a1cd59422d3f654105dfe30c9ea5adb4785c6b8dd742d7
 -F src/resolve.c 9750a281f7ba073b4e6da2be1a6c4071f5d841a7746c5fb3f70d6d793b6675ea
++F src/resolve.c 8bcf218a3f195c02524bdd72fea8d499d0b71c2c34b0f79adc0897adced3fc4c
  F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
- F src/select.c 1f5f1663fe84ee1963a55aef8871f1e7740a8030db517dcbfa16e27c6187fe74
- F src/shell.c.in 44c02fd1581d95e066b479241e081f37dc95c98452badd03627ef2a1c21bdc80
- F src/sqlite.h.in 1ad9110150773c38ebababbad11b5cb361bcd3997676dec1c91ac5e0416a7b86
 -F src/select.c 4b14337a2742f0c0beeba490e9a05507e9b4b12184b9cd12773501d08d48e3fe
++F src/select.c 56d01088729122e0fcbdcf3d02371eea64a86e9d7f3668d672e62ea8bd516122
+ F src/shell.c.in 981efe98f98a983c1d0193d18528eb2d765207c0c82b67b610be60f17995a43e
+ F src/sqlite.h.in 1def838497ad53c81486649ce79821925d1ac20a9843af317a344d507efe116e
  F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
  F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54
- F src/sqliteInt.h a3f2e5d0cfad29577d005c4add455aaa328bb03c475dcbbead5802eb65409554
 -F src/sqliteInt.h 989dca8b25ca11f5c52e5a457cc500042c43b0b3e5fea9a12d9020d0350722cd
++F src/sqliteInt.h dfb26867bae284baa688b346098920cafecf2753caccdd3d157fb58537223c84
  F src/sqliteLimit.h 6878ab64bdeb8c24a1d762d45635e34b96da21132179023338c93f820eee6728
  F src/status.c cb11f8589a6912af2da3bb1ec509a94dd8ef27df4d4c1a97e0bcf2309ece972b
  F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
@@@ -823,33 -832,33 +832,33 @@@ F src/test_window.c 6d80e11fba89a179652
  F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9
  F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c
  F src/tokenize.c 3f703cacdab728d7741e5a6ac242006d74fe1c2754d4f03ed889d7253259bd68
- F src/treeview.c 4ea0cb81db9fc8187c53d90b50e99c6bfa3f79973212f927c018c53e371f11fb
- F src/trigger.c 0858f75818ed1580332db274f1032bcc5effe567cb132df5c5be8b1d800ca97f
- F src/update.c 732404a04d1737ef14bb6ec6b84f74edf28b3c102a92ae46b4855438a710efe7
- F src/upsert.c 2e60567a0e9e8520c18671b30712a88dc73534474304af94f32bb5f3ef65ac65
- F src/utf.c f23165685a67b4caf8ec08fb274cb3f319103decfb2a980b7cfd55d18dfa855e
- F src/util.c 5d1a0134cf4240648d1c6bb5cc8efaca0ea2b5d5c840985aec7e947271f04375
- F src/vacuum.c 604fcdaebe76f3497c855afcbf91b8fa5046b32de3045bab89cc008d68e40104
- F src/vdbe.c a9405e82ede63d2e7d8297a7126e2d25682805424c7cf1a692a6f6f5eb127e24
 -F src/treeview.c 88aa39b754f5ef7214385c1bbbdd2f3dc20efafeed0cf590e8d1199b9c6e44aa
++F src/treeview.c ebcf0398c5a7451b98df58ad9f1097aa959642a394be76d689d135088c310bf6
+ F src/trigger.c 0bb986a5b96047fd597c6aac28588853df56064e576e6b81ba777ef2ccaac461
+ F src/update.c 0e01aa6a3edf9ec112b33eb714b9016a81241497b1fb7c3e74332f4f71756508
+ F src/upsert.c 215328c3f91623c520ec8672c44323553f12caeb4f01b1090ebdca99fdf7b4f1
+ F src/utf.c 7bc550af6f3ddd5f5dc82d092c41f728acb760c92e0b47f391963b01ae52569b
+ F src/util.c 4d57ae861d0e234019be9596818228d7715e44e6efaccb612cf4498bedc2e023
+ F src/vacuum.c b763b6457bd058d2072ef9364832351fd8d11e8abf70cbb349657360f7d55c40
 -F src/vdbe.c be5f58bc29f60252e041a618eae59e8d57d460ba136c5403cf0abf955560c457
++F src/vdbe.c a4d73ab01f60ccf5c83e4d8efd96b015b50b144984996321a11769b96edcc060
  F src/vdbe.h c2549a215898a390de6669cfa32adba56f0d7e17ba5a7f7b14506d6fd5f0c36a
- F src/vdbeInt.h 949669dfd8a41550d27dcb905b494f2ccde9a2e6c1b0b04daa1227e2e74c2b2c
- F src/vdbeapi.c 80235ac380e9467fec1cb0883354d841f2a771976e766995f7e0c77f845406df
- F src/vdbeaux.c 25d685cafe119ff890c94345e884ea558a6b5d823bfa52ba708eb8ff3c70aa71
- F src/vdbeblob.c 13f9287b55b6356b4b1845410382d6bede203ceb29ef69388a4a3d007ffacbe5
- F src/vdbemem.c 831a244831eaa45335f9ae276b50a7a82ee10d8c46c2c72492d4eb8c98d94d89
- F src/vdbesort.c 237840ca1947511fa59bd4e18b9eeae93f2af2468c34d2427b059f896230a547
+ F src/vdbeInt.h af7d7e8291edd0b19f2cd698e60e4d4031078f9a2f2328ac8f0b7efb134f8a1d
+ F src/vdbeapi.c 53c7e26a2c0821a892b20eee2cde4656e31998212f3d515576c780dfaa45fd17
+ F src/vdbeaux.c f06f011e4fac948941ea821ac365a9f1c163ef473e63756d6e499a37c6bda9ef
+ F src/vdbeblob.c 255be187436da38b01f276c02e6a08103489bbe2a7c6c21537b7aecbe0e1f797
+ F src/vdbemem.c df568ef0187e4be2788c35174f6d9b8566ab9475f9aff2d73907ed05aa5684b2
+ F src/vdbesort.c d0a3c7056c081703c8b6d91ad60f17da5e062a5c64bf568ed0fa1b5f4cae311f
  F src/vdbetrace.c fe0bc29ebd4e02c8bc5c1945f1d2e6be5927ec12c06d89b03ef2a4def34bf823
  F src/vdbevtab.c fc46b9cbd759dc013f0b3724549cc0d71379183c667df3a5988f7e2f1bd485f3
- F src/vtab.c 5fb499d20494b7eecaadb7584634af9afcb374cb0524912b475fcb1712458a1b
+ F src/vtab.c 316cd48e9320660db3047cd306cd056e4361180cebb4d0f10a39244e10c11422
  F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
- F src/wal.c 887fc4ca3f020ebb2e376f222069570834ac63bf50111ef0cbf3ae417048ed89
+ F src/wal.c a0d42bfdef935e1389737152394d08e59e7c48697f40a9fc2e0552cb19dc731f
  F src/wal.h ba252daaa94f889f4b2c17c027e823d9be47ce39da1d3799886bbd51f0490452
- F src/walker.c 7c7ea0115345851c3da4e04e2e239a29983b61fb5b038b94eede6aba462640e2
- F src/where.c 060eda5c683cef33e435efbbd633d5ac7599693cb27a1b83181f2fcecff64565
- F src/whereInt.h 002adc3aa2cc10733b9b27958fdbe893987cd989fab25a9853941c1f9b9b0a65
- F src/wherecode.c 84f3b1d4c97d8b0c2e30d5b0f6d6a9dfd391fac79ff05df0e0d8cfc1d3728827
- F src/whereexpr.c 7d0d34b42b9edfd8e8ca66beb3a6ef63fe211c001af54caf2ccbcd989b783290
- F src/window.c 1e40ffc509bae21e466f6106382d238e91eb73edd4ba10e66ca4fd7af2b96896
+ F src/walker.c d5006d6b005e4ea7302ad390957a8d41ed83faa177e412f89bc5600a7462a014
 -F src/where.c 461d41017d900d4248a268df96d2d30506c4dcc2257f4167c4f46072003ce2cf
++F src/where.c ec96f684c27fc3585179e5542491f9ad6107ea7b9c78213914628aee8659f573
+ F src/whereInt.h a5d079c346a658b7a6e9e47bb943d021e02fa1e6aed3b964ca112112a4892192
 -F src/wherecode.c 5172d647798134e7c92536ddffe7e530c393d79b5dedd648b88faf2646c65baf
++F src/wherecode.c e21675eafb51d9012813613d05ac9f6530124b0e40003a20e57f2eda19fdb430
+ F src/whereexpr.c 44f41ae554c7572e1de1485b3169b233ee04d464b2ee5881687ede3bf07cacfa
+ F src/window.c 499d48f315a09242dc68f2fac635ed27dcf6bbb0d9ab9084857898c64489e975
  F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
  F test/affinity2.test ce1aafc86e110685b324e9a763eab4f2a73f737842ec3b687bd965867de90627
  F test/affinity3.test f094773025eddf31135c7ad4cde722b7696f8eb07b97511f98585addf2a510a9
@@@ -2201,8 -2215,8 +2216,8 @@@ F vsixtest/vsixtest.tcl 6195aba1f12a5e1
  F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
  F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
  F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
- P e330596aed7a8a117551890535b317bc4bca557a4ea1b6b86ef4cc275082f13f ea9d88f9ca3399bca83bf03893689a927b73e481604b94527e42de43f103eb46
- R b1a32695cc72f2a55ea42e505c2e1d2a
- U drh
- Z 8f5e7351f10785d7e864d32e2dc1e8a8
 -P 6733893f450097e07cbd563d6a46790825fd0689283d60181c09793ce7d5509e
 -R 749ae8645be170a25b1c641eade23387
 -U stephan
 -Z c3b0bf3081778b6e6721957f472a53c9
++P ac6ae84626fdd8dc2c1f3cd513bd50e66abcc061ad3c81f7eb933bc42ccd5a26 2f7eab381e16760952d1c90a9119d2a217933f0136442d8f6eeb6d95e366ca4f
++R 1232b92b15d1663e24949df9a71252e0
++U dan
++Z d8b1644907c6c0f7a6dde6f02cc1fc84
  # Remove this line to create a well-formed Fossil manifest.
diff --cc manifest.uuid
index 4184ce6e4ab85899b450a5d124726fcd24a8bceb,717f299acd75a1998cd99d9b9f885c28c01cc01f..0fcfc78ab44fc944558fb614b01fae32ae0e4857
@@@ -1,1 -1,1 +1,1 @@@
- ac6ae84626fdd8dc2c1f3cd513bd50e66abcc061ad3c81f7eb933bc42ccd5a26
 -2f7eab381e16760952d1c90a9119d2a217933f0136442d8f6eeb6d95e366ca4f
++a92bb48a48bd3430493e234c1f57f439f09d1b34b15dda2d5f2f8daab36d9923
diff --cc src/build.c
Simple merge
diff --cc src/parse.y
Simple merge
diff --cc src/resolve.c
index b7e5529ba3ebc511da635491502b5370b95646b4,8e8da66910ecfe075e59c45b443c8219c626ec53..ffe01035b44f35f7a365dcf63caa29038496bd00
@@@ -1889,41 -1900,18 +1899,44 @@@ static int resolveSelectStep(Walker *pW
      /* Recursively resolve names in all subqueries in the FROM clause
      */
      if( pOuterNC ) pOuterNC->nNestedSelect++;
 -    for(i=0; i<p->pSrc->nSrc; i++){
 +    nSrc = p->pSrc->nSrc;
 +    for(i=0; i<nSrc; i++){
        SrcItem *pItem = &p->pSrc->a[i];
-       assert( pItem->zName!=0 || pItem->pSelect!=0 );/* Test of tag-20240424-1*/
-       if( pItem->pSelect && (pItem->pSelect->selFlags & SF_Resolved)==0 ){
+       assert( pItem->zName!=0
+               || pItem->fg.isSubquery );  /* Test of tag-20240424-1*/
+       if( pItem->fg.isSubquery
+        && (pItem->u4.pSubq->pSelect->selFlags & SF_Resolved)==0
+       ){
          int nRef = pOuterNC ? pOuterNC->nRef : 0;
 +        int nRef2 = sNC.nRef;
 +        NameContext *pSubNC;
          const char *zSavedContext = pParse->zAuthContext;
 -
          if( pItem->zName ) pParse->zAuthContext = pItem->zName;
 -        sqlite3ResolveSelectNames(pParse, pItem->u4.pSubq->pSelect, pOuterNC);
 +        if( pItem->fg.isLateral ){
 +          assert( i>0 );  /* Because p->pSub->a[0] is never marked LATERAL */
-           assert( pItem->pSelect!=0 );
-           assert( pItem->pSelect->selFlags & SF_Lateral );
++          assert( pItem->u4.pSubq->pSelect!=0 );
++          assert( pItem->u4.pSubq->pSelect->selFlags & SF_Lateral );
 +          p->pSrc->nSrc = i;
 +          sNC.pSrcList = p->pSrc;
-           if( pItem->pSelect->pLimit ){
++          if( pItem->u4.pSubq->pSelect->pLimit ){
 +            /* If a LIMIT/OFFSET clause exists on a LATERAL subquery, allow
 +            ** variables from other FROM clause terms to the left of the
 +            ** subquery to be used in the LIMIT/OFFSET clause. */
 +            sNC.pNext = 0;
-             (void)sqlite3ResolveExprNames(&sNC, pItem->pSelect->pLimit);
++            (void)sqlite3ResolveExprNames(&sNC, pItem->u4.pSubq->pSelect->pLimit);
 +          }
 +          sNC.pNext = pOuterNC;
 +          pSubNC = &sNC;
 +        }else{
 +          sNC.pSrcList = 0;
 +          sNC.pNext = 0;
 +          pSubNC = pOuterNC;
 +        }
-         sqlite3ResolveSelectNames(pParse, pItem->pSelect, pSubNC);
++        sqlite3ResolveSelectNames(pParse, pItem->u4.pSubq->pSelect, pSubNC);
 +        p->pSrc->nSrc = nSrc;
 +        if( sNC.nRef>nRef2 ){
 +          pItem->fg.isCorrelated = 1;
 +        }
          pParse->zAuthContext = zSavedContext;
          if( pParse->nErr ) return WRC_Abort;
          assert( db->mallocFailed==0 );
diff --cc src/select.c
index f0c31008ed0a2ae5c7575a05154ed23c39fc09a4,9fcf30ff4a6898b2d644930d6edb8860d53ff4f1..106cfd23dd3d1029c9c117cf7d118f598d51cf69
@@@ -7754,18 -7852,18 +7857,19 @@@ int sqlite3Select
        */
        int addrTop = sqlite3VdbeCurrentAddr(v)+1;
      
 -      pSubq->regReturn = ++pParse->nMem;
 +      assert( pItem->fg.isLateral==0 );
-       pItem->regReturn = ++pParse->nMem;
-       sqlite3VdbeAddOp3(v, OP_InitCoroutine, pItem->regReturn, 0, addrTop);
++      pItem->u4.pSubq->regReturn = ++pParse->nMem;
+       sqlite3VdbeAddOp3(v, OP_InitCoroutine, pSubq->regReturn, 0, addrTop);
        VdbeComment((v, "%!S", pItem));
-       pItem->addrFillSub = addrTop;
-       sqlite3SelectDestInit(&dest, SRT_Coroutine, pItem->regReturn);
+       pSubq->addrFillSub = addrTop;
+       sqlite3SelectDestInit(&dest, SRT_Coroutine, pSubq->regReturn);
        ExplainQueryPlan((pParse, 1, "CO-ROUTINE %!S", pItem));
        sqlite3Select(pParse, pSub, &dest);
-       pItem->pTab->nRowLogEst = pSub->nSelectRow;
+       pItem->pSTab->nRowLogEst = pSub->nSelectRow;
        pItem->fg.viaCoroutine = 1;
-       pItem->regResult = dest.iSdst;
-       sqlite3VdbeEndCoroutine(v, pItem->regReturn);
+       pSubq->regResult = dest.iSdst;
+       sqlite3VdbeEndCoroutine(v, pSubq->regReturn);
+       VdbeComment((v, "end %!S", pItem));
        sqlite3VdbeJumpHere(v, addrTop-1);
        sqlite3ClearTempRegCache(pParse);
      }else if( pItem->fg.isCte && pItem->u2.pCteUse->addrM9e>0 ){
  
        ExplainQueryPlan2(addrExplain, (pParse, 1, "MATERIALIZE %!S", pItem));
        sqlite3Select(pParse, pSub, &dest);
-       pItem->pTab->nRowLogEst = pSub->nSelectRow;
+       pItem->pSTab->nRowLogEst = pSub->nSelectRow;
 +      if( pItem->fg.isLateral && pItem->fg.isCorrelated ){
 +        int kk;
 +        for(kk=0; kk<i; kk++){
 +          SrcItem *pX = &pTabList->a[kk];
 +          if( pX->fg.viaCoroutine==0 ) continue;
 +          sqlite3TranslateColumnToCopy(pParse, topAddr+1,
-              pX->iCursor, pX->regResult, 0);
++             pX->iCursor, pX->u4.pSubq->regResult, 0);
 +        }
 +      }
        if( onceAddr ) sqlite3VdbeJumpHere(v, onceAddr);
-       sqlite3VdbeAddOp2(v, OP_Return, pItem->regReturn, topAddr+1);
+       sqlite3VdbeAddOp2(v, OP_Return, pSubq->regReturn, topAddr+1);
        VdbeComment((v, "end %!S", pItem));
        sqlite3VdbeScanStatusRange(v, addrExplain, addrExplain, -1);
        sqlite3VdbeJumpHere(v, topAddr);
diff --cc src/sqliteInt.h
index d3804a570abb0849c0586170e1730efae20be3fe,0e0035ce6048c44f3efc191a04161222e6328188..c0c15c586e59c07ddd8f3657a06230aba728922b
@@@ -3280,32 -3297,42 +3297,43 @@@ struct Subquery 
  ** In the colUsed field, the high-order bit (bit 63) is set if the table
  ** contains more than 63 columns and the 64-th or later column is used.
  **
- ** Union member validity:
+ ** Aggressive use of "union" helps keep the size of the object small.  This
+ ** has been shown to boost performance, in addition to saving memory.
+ ** Access to union elements is gated by the following rules which should
+ ** always be checked, either by an if-statement or by an assert().
  **
- **    u1.zIndexedBy      fg.isIndexedBy && !fg.isTabFunc
- **    u1.pFuncArg        fg.isTabFunc   && !fg.isIndexedBy
+ **    Field              Only access if this is true
+ **    ---------------    -----------------------------------
+ **    u1.zIndexedBy      fg.isIndexedBy
+ **    u1.pFuncArg        fg.isTabFunc
  **    u1.nRow            !fg.isTabFunc  && !fg.isIndexedBy
  **
- **    u2.pIBIndex        fg.isIndexedBy && !fg.isCte
- **    u2.pCteUse         fg.isCte       && !fg.isIndexedBy
+ **    u2.pIBIndex        fg.isIndexedBy
+ **    u2.pCteUse         fg.isCte
+ **
+ **    u3.pOn             !fg.isUsing
+ **    u3.pUsing          fg.isUsing
+ **
+ **    u4.zDatabase       !fg.fixedSchema && !fg.isSubquery
+ **    u4.pSchema         fg.fixedSchema
+ **    u4.pSubq           fg.isSubquery
+ **
+ ** See also the sqlite3SrcListDelete() routine for assert() statements that
+ ** check invariants on the fields of this object, especially the flags
+ ** inside the fg struct.
  */
  struct SrcItem {
-   Schema *pSchema;  /* Schema to which this item is fixed */
-   char *zDatabase;  /* Name of database holding this table */
    char *zName;      /* Name of the table */
    char *zAlias;     /* The "B" part of a "A AS B" phrase.  zName is the "A" */
-   Table *pTab;      /* An SQL table corresponding to zName */
-   Select *pSelect;  /* A SELECT statement used in place of a table name */
-   int addrFillSub;  /* Address of subroutine to manifest a subquery */
-   int regReturn;    /* Register holding return address of addrFillSub */
-   int regResult;    /* Registers holding results of a co-routine */
+   Table *pSTab;     /* Table object for zName. Mnemonic: Srcitem-TABle */
    struct {
 -    u8 jointype;      /* Type of join between this table and the previous */
 +    u8 jointype;               /* Type of join. See above for more detail. */
      unsigned notIndexed :1;    /* True if there is a NOT INDEXED clause */
      unsigned isIndexedBy :1;   /* True if there is an INDEXED BY clause */
+     unsigned isSubquery :1;    /* True if this term is a subquery */
      unsigned isTabFunc :1;     /* True if table-valued-function syntax */
      unsigned isCorrelated :1;  /* True if sub-query is correlated */
 +    unsigned isLateral :1;     /* True if sub-query is LATERAL */
      unsigned isMaterialized:1; /* This is a materialized view */
      unsigned viaCoroutine :1;  /* Implemented as a co-routine */
      unsigned isRecursive :1;   /* True for recursive reference in WITH */
diff --cc src/treeview.c
Simple merge
diff --cc src/vdbe.c
Simple merge
diff --cc src/where.c
index 22dfde71e005ad158fc1da7918824b544b122d09,9aaa082cd3f55f9fb5b78493accf0114d6553b2a..006cfefec7d322b130ffdcb24bf56c60ff33ab31
@@@ -1191,8 -1197,8 +1197,8 @@@ static SQLITE_NOINLINE void constructAu
      sqlite3VdbeChangeP2(v, addrCounter, regBase+n);
      testcase( pParse->db->mallocFailed );
      assert( pLevel->iIdxCur>0 );
 -    translateColumnToCopy(pParse, addrTop, pLevel->iTabCur,
 -                          pSrc->u4.pSubq->regResult, pLevel->iIdxCur);
 +    sqlite3TranslateColumnToCopy(pParse, addrTop, pLevel->iTabCur,
-                                  pSrc->regResult, pLevel->iIdxCur);
++                                 pSrc->u4.pSubq->regResult, pLevel->iIdxCur);
      sqlite3VdbeGoto(v, addrTop);
      pSrc->fg.viaCoroutine = 0;
    }else{
@@@ -4801,13 -4825,10 +4829,13 @@@ static int whereLoopAddAll(WhereLoopBui
        mPrereq = 0;
      }
  #ifndef SQLITE_OMIT_VIRTUALTABLE
-     if( IsVirtual(pItem->pTab) ){
+     if( IsVirtual(pItem->pSTab) ){
        SrcItem *p;
        for(p=&pItem[1]; p<pEnd; p++){
 -        if( mUnusable || (p->fg.jointype & (JT_OUTER|JT_CROSS)) ){
 +        if( mUnusable || (p->fg.jointype & (JT_OUTER|JT_CROSS|JT_LATERAL)) ){
 +          testcase( p->fg.jointype & JT_CROSS );
 +          testcase( p->fg.jointype & JT_OUTER );
 +          testcase( p->fg.jointype & JT_LATERAL );
            mUnusable |= sqlite3WhereGetMask(&pWInfo->sMaskSet, p->iCursor);
          }
        }
@@@ -6318,30 -6443,6 +6450,30 @@@ static SQLITE_NOINLINE void whereRevers
    }
  }
  
-      && pWInfo->a[ii].addrBody > pSrc->addrFillSub
 +/*
 +** Adjust the addrBody of all WHERE_IDX_ONLY WhereLoops prior to ii 
 +** so that the addrBody covers the subroutine that computes a LATERAL
 +** subquery.
 +**
 +** This routine is broken out into a separate no-inline subroutine because
 +** it runs rarely, and by breaking it out it reduces register contention
 +** in the main sqlite3WhereBegin() routine, helping sqlite3WhereBegin()
 +** to run faster.
 +*/
 +static SQLITE_NOINLINE void whereAdjustAddrBodyForLateral(
 +  WhereInfo *pWInfo,  /* There WHERE loop info */
 +  SrcItem *pSrc,      /* The LATERAL subquery */
 +  int ii              /* Index of pSrc in the FROM clause */
 +){
 +  while( --ii >= 0 ){
 +    if( pWInfo->a[ii].pWLoop->wsFlags & WHERE_IDX_ONLY
-        pWInfo->a[ii].addrBody = pSrc->addrFillSub;
++     && pWInfo->a[ii].addrBody > pSrc->u4.pSubq->addrFillSub
 +    ){
++       pWInfo->a[ii].addrBody = pSrc->u4.pSubq->addrFillSub;
 +    }
 +  }
 +}
 +
  /*
  ** Generate the beginning of the loop used for WHERE clause processing.
  ** The return value is a pointer to an opaque structure that contains
@@@ -7028,16 -7129,18 +7160,21 @@@ WhereInfo *sqlite3WhereBegin
      wsFlags = pLevel->pWLoop->wsFlags;
      pSrc = &pTabList->a[pLevel->iFrom];
      if( pSrc->fg.isMaterialized ){
-       if( pSrc->fg.isCorrelated ){
-         sqlite3VdbeAddOp2(v, OP_Gosub, pSrc->regReturn, pSrc->addrFillSub);
+       Subquery *pSubq;
+       int iOnce = 0;
+       assert( pSrc->fg.isSubquery );
+       pSubq = pSrc->u4.pSubq;
+       if( pSrc->fg.isCorrelated==0 ){
+         iOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v);
+       }else{
+         iOnce = 0;
 +        if( pSrc->fg.isLateral ){
 +          whereAdjustAddrBodyForLateral(pWInfo, pSrc, ii);
 +        }
-       }else{
-         int iOnce = sqlite3VdbeAddOp0(v, OP_Once);  VdbeCoverage(v);
-         sqlite3VdbeAddOp2(v, OP_Gosub, pSrc->regReturn, pSrc->addrFillSub);
-         sqlite3VdbeJumpHere(v, iOnce);
        }
+       sqlite3VdbeAddOp2(v, OP_Gosub, pSubq->regReturn, pSubq->addrFillSub);
+       VdbeComment((v, "materialize %!S", pSrc));
+       if( iOnce )  sqlite3VdbeJumpHere(v, iOnce);
      }
      assert( pTabList == pWInfo->pTabList );
      if( (wsFlags & (WHERE_AUTO_INDEX|WHERE_BLOOMFILTER))!=0 ){
@@@ -7324,9 -7408,10 +7442,10 @@@ void sqlite3WhereEnd(WhereInfo *pWInfo)
      */
      if( pTabItem->fg.viaCoroutine ){
        testcase( pParse->db->mallocFailed );
-       assert( pTabItem->regResult>=0 );
+       assert( pTabItem->fg.isSubquery );
+       assert( pTabItem->u4.pSubq->regResult>=0 );
 -      translateColumnToCopy(pParse, pLevel->addrBody, pLevel->iTabCur,
 -                            pTabItem->u4.pSubq->regResult, 0);
 +      sqlite3TranslateColumnToCopy(pParse, pLevel->addrBody, pLevel->iTabCur,
-                                    pTabItem->regResult, 0);
++                                   pTabItem->u4.pSubq->regResult, 0);
        continue;
      }
  
diff --cc src/wherecode.c
index d7c070110e1d77a923ade3a8319079795ea0fd6d,0951e5e204646c42abc01bfc800ff2852fa186ca..395cc640dd403c04e107f64f633fdb950ff0b239
@@@ -1524,13 -1504,25 +1529,17 @@@ Bitmask sqlite3WhereCodeOneLoopStart
      VdbeComment((v, "init LEFT JOIN match flag"));
    }
  
 -  /* Compute a safe address to jump to if we discover that the table for
 -  ** this loop is empty and can never contribute content. */
 -  for(j=iLevel; j>0; j--){
 -    if( pWInfo->a[j].iLeftJoin ) break;
 -    if( pWInfo->a[j].pRJ ) break;
 -  }
 -  addrHalt = pWInfo->a[j].addrBrk;
 -
    /* Special case of a FROM clause subquery implemented as a co-routine */
    if( pTabItem->fg.viaCoroutine ){
-     int regYield = pTabItem->regReturn;
-     sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, pTabItem->addrFillSub);
+     int regYield;
+     Subquery *pSubq;
+     assert( pTabItem->fg.isSubquery && pTabItem->u4.pSubq!=0 );
+     pSubq = pTabItem->u4.pSubq;
+     regYield = pSubq->regReturn;
+     sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, pSubq->addrFillSub);
      pLevel->p2 =  sqlite3VdbeAddOp2(v, OP_Yield, regYield, addrBrk);
      VdbeCoverage(v);
-     VdbeComment((v, "next row of %s", pTabItem->pTab->zName));
+     VdbeComment((v, "next row of %s", pTabItem->pSTab->zName));
      pLevel->op = OP_Goto;
    }else