From: drh Date: Fri, 26 Aug 2011 13:52:23 +0000 (+0000) Subject: Merge branches branch-3.7.2 and stat3-enhancement into a new branch for X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ab44853df2599e781f0060dfbab773451b659985;p=thirdparty%2Fsqlite.git Merge branches branch-3.7.2 and stat3-enhancement into a new branch for testing purposes. FossilOrigin-Name: 0df04f920b3e6cfe8db7687cc9c392f65c11d9ce --- ab44853df2599e781f0060dfbab773451b659985 diff --cc manifest index f72ca6ad62,fa38621865..6e6c1ff9b0 --- a/manifest +++ b/manifest @@@ -1,11 -1,12 +1,11 @@@ - C Cherrypicked\sfrom\strunk:\s\sDo\snot\stry\sto\suse\sSTAT2\sfor\srow\sestimates\sif\sthe\nindex\sis\sunique\sor\snearly\sso. - D 2011-07-13T18:53:13.589 -C Fix\sthe\sstat3\sanalysis\sloader\sto\sbe\scompatible\swith\ssqlite3_db_status().\nAlso\sfix\ssome\sOOM\sissues\swith\sthe\sstat3\sanalysis\sloader. -D 2011-08-18T13:45:23.575 ++C Merge\sbranches\sbranch-3.7.2\sand\sstat3-enhancement\sinto\sa\snew\sbranch\sfor\ntesting\spurposes. ++D 2011-08-26T13:52:23.174 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f -F Makefile.in 1e6988b3c11dee9bd5edc0c804bd4468d74a9cdc +F Makefile.in 543f91f24cd7fee774ecc0a61c19704c0c3e78fd F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 -F Makefile.msc 9fd0401b0134b565a9c7d8ed49dc044cc89f2096 F Makefile.vxworks c85ec1d8597fe2f7bc225af12ac1666e21379151 F README cd04a36fbc7ea56932a4052d7d0b7f09f27c33d6 -F VERSION f724de7326e87b7f3b0a55f16ef4b4d993680d54 +F VERSION 6062e0026a5ab33dabb4efae38604d40115819ec F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50 F addopcodes.awk 17dc593f791f874d2c23a0f9360850ded0286531 F art/2005osaward.gif 0d1851b2a7c1c9d0ccce545f3e14bca42d7fd248 @@@ -106,27 -117,27 +106,27 @@@ F spec.template 86a4a43b99ebb3e75e6b9a7 F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b F sqlite3.1 6be1ad09113570e1fc8dcaff84c9b0b337db5ffc F sqlite3.pc.in ae6f59a76e862f5c561eb32a380228a02afc3cad -F src/alter.c ac80a0f31189f8b4a524ebf661e47e84536ee7f5 -F src/analyze.c 3fbffcfbc606d73fa996ded1f874eddffbb06d09 -F src/attach.c 12c6957996908edc31c96d7c68d4942c2474405f +F src/alter.c 8dc27638e7e2553e80b2b621f232be5eb1e85ef3 - F src/analyze.c 0a58e3d8228617e619c48a3aa8991a1ff5ad7768 ++F src/analyze.c 107333cc6c89fe7887609979ac024f2226bb43b4 +F src/attach.c c689d516ee8cc52bf11bef2067d76eb8b716228a F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34 -F src/backup.c 986c15232757f2873dff35ee3b35cbf935fc573c +F src/backup.c 8ff0b7018df253c7f30d3f9702b0b16f19209d5c F src/bitvec.c af50f1c8c0ff54d6bdb7a80e2fceca5a93670bef -F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7 -F src/btree.c 8c46f0ab69ad9549c75a3a91fed87abdaa743e2f -F src/btree.h f5d775cd6cfc7ac32a2535b70e8d2af48ef5f2ce -F src/btreeInt.h 67978c014fa4f7cc874032dd3aacadd8db656bc3 -F src/build.c 4534f8c4b1747e8305b5351100ce24ae3fd2b256 -F src/callback.c 0425c6320730e6d3981acfb9202c1bed9016ad1a +F src/btmutex.c 96a12f50f7a17475155971a241d85ec5171573ff +F src/btree.c 40c7a36152403d8e7266f99ef157a661c7ab9691 +F src/btree.h 2d1a83ad509047e8cc314fda7e054f99ff52414d +F src/btreeInt.h c424f2f131cc61ddf130f9bd736b3df12c8a51f0 - F src/build.c a8aca43dc4f02b2293fd872eafdc80e487443a80 ++F src/build.c 556c5918354ff1102e286fa0f7c032e18bdc2640 +F src/callback.c da3c38d0ef5d7f04fae371e519bda61aa9cb1704 F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac - F src/ctime.c 2e39d3374e785a63117e077bcba9d4a6656df363 -F src/ctime.c 0df87f944b17c17c6b3976a9758d8af2802e1b19 -F src/date.c a3c6842bad7ae632281811de112a8ba63ff08ab3 -F src/delete.c ff68e5ef23aee08c0ff528f699a19397ed8bbed8 -F src/expr.c 4bbdfaf66bc614be9254ce0c26a17429067a3e07 ++F src/ctime.c c4eeabe49bb1422efd04b4ca474c0bd8063f8379 +F src/date.c 5dd8448a0bfea8d31fb14cff487d0c06ff8c8b20 +F src/delete.c daff6cef77fe8ed57b8acfc5ecebce28244af2fa +F src/expr.c c0d7088c13c9cee74043606a41dcc4696a9ea7cc F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb -F src/fkey.c c8492fed772af1ed61251582707266227612b45b -F src/func.c 59bb046d7e3df1ab512ac339ccb0a6f996a17cb7 -F src/global.c c70a46f28680f8d7c097dbc0430ccf3b932e90b0 +F src/fkey.c d56da9f698067e52a45736e97b17ee01cd849b78 +F src/func.c 464b0dc70618b896c402c574eb04bc5eacf35341 +F src/global.c 02335177cf6946fe5525c6f0755cf181140debf3 F src/hash.c 458488dcc159c301b8e7686280ab209f1fb915af F src/hash.h 2894c932d84d9f892d4b4023a75e501f83050970 F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08 @@@ -168,105 -179,120 +168,106 @@@ F src/printf.c 8ae5082dd38a1b5456030c37 F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50 F src/resolve.c 36368f44569208fa074e61f4dd0b6c4fb60ca2b4 F src/rowset.c 69afa95a97c524ba6faf3805e717b5b7ae85a697 -F src/select.c d219c4b68d603cc734b6f9b1e2780fee12a1fa0d -F src/shell.c bbe7818ff5bc8614105ceb81ad67b8bdc0b671dd -F src/sqlite.h.in e8eb090406b9a743befff4c387aa3bd5eeae661e -F src/sqlite3ext.h 1a1a4f784aa9c3b00edd287940197de52487cd93 -F src/sqliteInt.h f491be51e47267ae1454317fbd3438382e60fdb3 -F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d -F src/status.c 7ac64842c86cec2fc1a1d0e5c16d3beb8ad332bf +F src/select.c 27ceaf3ae2c493d299adec578bbc9e397ebf2806 +F src/shell.c 8517fc1f9c59ae4007e6cc8b9af91ab231ea2056 - F src/sqlite.h.in 2d72a6242df41c517e38eec8791abcf5484a36f1 ++F src/sqlite.h.in bfcee1065ea66b5513a9cbcafe7d2067544e16a0 +F src/sqlite3ext.h 69dfb8116af51b84a029cddb3b35062354270c89 - F src/sqliteInt.h 0e4a570a645e4e9005ef44e5178ad59755e33623 ++F src/sqliteInt.h 4aa5d7418388adc9082c1e278cad7ecdaec9df15 +F src/sqliteLimit.h a17dcd3fb775d63b64a43a55c54cb282f9726f44 +F src/status.c 496913d4e8441195f6f2a75b1c95993a45b9b30b F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e -F src/tclsqlite.c c355b33803fb756dc09297ec84d19604301fa622 -F src/test1.c 9952abd6dc729eb1c011b71ee26a8b49d0aa7c10 +F src/tclsqlite.c cacee9482417b6fc6043f6bb831ff9496d46242d +F src/test1.c 55005c9781b157b1d215ba145768783b9abae78c F src/test2.c 80d323d11e909cf0eb1b6fbb4ac22276483bcf31 -F src/test3.c 124ff9735fb6bb7d41de180d6bac90e7b1509432 -F src/test4.c d1e5a5e904d4b444cf572391fdcb017638e36ff7 +F src/test3.c 056093cfef69ff4227a6bdb9108564dc7f45e4bc +F src/test4.c 0528360b5025688002a5feb6be906ddce52eaaee F src/test5.c e1a19845625144caf038031234a12185e40d315c F src/test6.c c7256cc21d2409486d094277d5b017e8eced44ba -F src/test7.c 2e0781754905c8adc3268d8f0967e7633af58843 +F src/test7.c d67f65d82815eb0b57699b122ca0145dbea55bbb F src/test8.c 6b1d12912a04fe6fca8c45bb9c3ea022f4352228 F src/test9.c bea1e8cf52aa93695487badedd6e1886c321ea60 F src/test_async.c 0612a752896fad42d55c3999a5122af10dcf22ad F src/test_autoext.c 30e7bd98ab6d70a62bb9ba572e4c7df347fe645e F src/test_backup.c c129c91127e9b46e335715ae2e75756e25ba27de F src/test_btree.c 47cd771250f09cdc6e12dda5bc71bc0b3abc96e2 - F src/test_config.c fcafb30c453b5e2bfea7acd3c596bd33417f1361 -F src/test_config.c baa9cfc6304aa739b32c735378008a0fa846b573 -F src/test_demovfs.c 20a4975127993f4959890016ae9ce5535a880094 ++F src/test_config.c feb4a05ca8915d22f854adfceb2e3effc57a2f6b +F src/test_demovfs.c 0aed671636735116fc872c5b03706fd5612488b5 F src/test_devsym.c e7498904e72ba7491d142d5c83b476c4e76993bc -F src/test_func.c cbdec5cededa0761daedde5baf06004a9bf416b5 -F src/test_fuzzer.c f884f6f32e8513d34248d6e1ac8a32047fead254 -F src/test_hexio.c c4773049603151704a6ab25ac5e936b5109caf5a +F src/test_func.c 13b582345fb1185a93e46c53310fae8547dcce20 +F src/test_hexio.c 1237f000ec7a491009b1233f5c626ea71bce1ea2 F src/test_init.c 5d624ffd0409d424cf9adbfe1f056b200270077c F src/test_intarray.c d879bbf8e4ce085ab966d1f3c896a7c8b4f5fc99 F src/test_intarray.h 489edb9068bb926583445cb02589344961054207 -F src/test_journal.c 03313c693cca72959dcaaf79f8d76f21c01e19ff +F src/test_journal.c 785edd54f963aefb3c1628124170a56697c68c70 F src/test_loadext.c df586c27176e3c2cb2e099c78da67bf14379a56e -F src/test_malloc.c 7ca7be34e0e09ef0ed6619544552ed95732e41f6 -F src/test_multiplex.c 731fb740a9fd4b11cb7b1990c62fc88d01c90dfd -F src/test_multiplex.h e99c571bc4968b7a9363b661481f3934bfead61d -F src/test_mutex.c a6bd7b9cf6e19d989e31392b06ac8d189f0d573e +F src/test_malloc.c 09a88f0c111201dc4f8c20470aa1b5f611d59200 +F src/test_mutex.c ce06b59aca168cd8c520b77159a24352a7469bd3 F src/test_onefile.c 40cf9e212a377a6511469384a64b01e6e34b2eec -F src/test_osinst.c 62b0b8ef21ce754cc94e17bb42377ed8795dba32 +F src/test_osinst.c f408c6a181f2fb04c56273afd5c3e1e82f60392c F src/test_pcache.c 7bf828972ac0d2403f5cfa4cd14da41f8ebe73d8 -F src/test_quota.c cc4f67e12558a252ea4a11720be268348f4b1595 -F src/test_rtree.c 30c981837445a4e187ee850a49c4760d9642f7c3 F src/test_schema.c 8c06ef9ddb240c7a0fcd31bc221a6a2aade58bf0 -F src/test_server.c 2f99eb2837dfa06a4aacf24af24c6affdf66a84f +F src/test_server.c bbba05c144b5fc4b52ff650a4328027b3fa5fcc6 F src/test_stat.c f682704b5d1ba8e1d4e7e882a6d7922e2dcf066c -F src/test_superlock.c 2b97936ca127d13962c3605dbc9a4ef269c424cd -F src/test_syscall.c 162c4ec0137a549c009bb9ecab550527743cfc5d F src/test_tclvar.c f4dc67d5f780707210d6bb0eb6016a431c04c7fa -F src/test_thread.c fe9a7803fc1d69cccb60f016f28c1cedf2d9fcfa -F src/test_vfs.c 956cb3f5cbd2a0d09129540e615bb0fb761c083d -F src/test_vfstrace.c 0b884e06094a746da729119a2cabdc7aa790063d -F src/test_wholenumber.c 6129adfbe7c7444f2e60cc785927f3aa74e12290 +F src/test_thread.c bedd05cad673dba53326f3aa468cc803038896c0 +F src/test_vfs.c 702e52636113f6b9721da90ef1bf26e07fff414d F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9 -F src/tokenize.c c819d9f72168a035d545a5bdafe9b085b20df705 -F src/trigger.c 1cfb80e2290ef66ea89cb4e821caae65a02c0d56 -F src/update.c 74a6cfb34e9732c1e2a86278b229913b4b51eeec -F src/utf.c 890c67dcfcc7a74623c95baac7535aadfe265e84 -F src/util.c 06302ffd2b80408d4f6c7af71f7090e0cf8d8ff7 -F src/vacuum.c 05513dca036a1e7848fe18d5ed1265ac0b32365e -F src/vdbe.c 49d834f0fe49d305e07f9c212e94007fda2028e9 -F src/vdbe.h 5cf09e7ee8a3f7d93bc51f196a96550786afe7a1 -F src/vdbeInt.h ad84226cc0adcb1185c22b70696b235a1678bb45 -F src/vdbeapi.c 11dc47987abacb76ad016dcf5abc0dc422482a98 -F src/vdbeaux.c 05eb4457899f09c2a2eb0bff26844023cf6544f8 -F src/vdbeblob.c f024f0bf420f36b070143c32b15cc7287341ffd3 -F src/vdbemem.c 74410d1639869b309d6fe1e8cbc02a557157a7c2 -F src/vdbetrace.c 5d0dc3d5fd54878cc8d6d28eb41deb8d5885b114 -F src/vtab.c 901791a47318c0562cd0c676a2c6ff1bc530e582 -F src/wal.c 3154756177d6219e233d84291d5b05f4e06ff5e9 -F src/wal.h 66b40bd91bc29a5be1c88ddd1f5ade8f3f48728a +F src/tokenize.c 604607d6813e9551cf5189d899e0a25c12681080 +F src/trigger.c b8bedb9c0084ceb51a40f54fcca2ce048c8de852 +F src/update.c c6be6a5af1198aeac9b25d842d97e52695ffc9e6 - F src/utf.c 1baeeac91707a4df97ccc6141ec0f808278af685 ++F src/utf.c d59be28ddf0dae501b09909466560616313b08eb +F src/util.c 32aebf04c10e51ad3977a928b7416bed671b620b +F src/vacuum.c 241a8386727c1497eba4955933356dfba6ff8c9f +F src/vdbe.c 67486fbf9c5b8bb5a43ed7b7075cbaf2443b5a98 +F src/vdbe.h 4de0efb4b0fdaaa900cf419b35c458933ef1c6d2 +F src/vdbeInt.h a247bd5448039e83394bf4179975b2ae0092874c +F src/vdbeapi.c d0f4407e465f261780ad725c1caece7d66a6aa35 - F src/vdbeaux.c 157d62a6a8ca22c3792f5957e887df8bda2d58eb ++F src/vdbeaux.c a42e8b2e3ec051198872e8a21d807de20dfcbade +F src/vdbeblob.c 258a6010ba7a82b72b327fb24c55790655689256 - F src/vdbemem.c c9f3bba5f81d3b4cbe9f8f7ed4fc7b9d50f3536e ++F src/vdbemem.c a4179ce8fc9b72359c15a62a5762ee691f881c7e +F src/vdbetrace.c 864cef96919323482ebd9986f2132435115e9cc2 +F src/vtab.c 0e8e0cb30dffb078367e843e84e37ef99236c7e4 +F src/wal.c 5ac2119e23ee4424599d4275b66dc88d612a0543 +F src/wal.h 96669b645e27cd5a111ba59f0cae7743a207bc3c F src/walker.c 3112bb3afe1d85dc52317cb1d752055e9a781f8f - F src/where.c db40458b67dbd77c658178ec6c53432807759c3f -F src/where.c 3d9a78a422726c1b3a57188c3099e537cb18e18a -F test/8_3_names.test 631ea964a3edb091cf73c3b540f6bcfdb36ce823 ++F src/where.c 9323b7a65ec9e1f9211d0cd3d21a3b048b195a39 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2 F test/alias.test 4529fbc152f190268a15f9384a5651bbbabc9d87 -F test/all.test 52fc8dee494092031a556911d404ca30a749a30b -F test/alter.test 54912d932309df2e4f62aeb47169c2ff740e53ed -F test/alter2.test 7ea05c7d92ac99349a802ef7ada17294dd647060 -F test/alter3.test 49c9d9fba2b8fcdce2dedeca97bbf1f369cc548d -F test/alter4.test b2debc14d8cbe4c1d12ccd6a41eef88a8c1f15d5 +F test/all.test 6745008c144bd2956d58864d21f7b304689c1cce - F test/alter.test 15f9224868b290d6bf7a63f31437f31aee070636 ++F test/alter.test 328d2daaeb8aa6801b47bd5e80bddf5c5d3623a9 +F test/alter2.test 52096b711afe5f219e575c6db7a70f7a35df4f63 +F test/alter3.test 25b95a136708f22b87184fa6a4309eea03d65153 +F test/alter4.test 9386ffd1e9c7245f43eca412b2058d747509cc1f F test/altermalloc.test e81ac9657ed25c6c5bb09bebfa5a047cd8e4acfc - F test/analyze.test d21f2143664912a20d04b67baf4bed935e7b1b48 -F test/analyze.test f8ab7d15858b4093b06caf5e57e2a5ff7104bdae -F test/analyze2.test 8f2b1534d43f5547ce9a6b736c021d4192c75be3 ++F test/analyze.test 2b2e06e06e575a431a0c3caa9e1511bdcdcc78ff +F test/analyze2.test ea3df826879dd672031b27c6a845afc3a39f27d9 - F test/analyze3.test d61f55d8b472fc6e713160b1e577f7a68e63f38b - F test/analyze5.test 1de8d66b11aae5a1453aa042d62e834a476bac9c - F test/analyze6.test 1ba1aea8fad25a77ffd71f24522d1bb9ecc949fc + F test/analyze3.test 7bcadc47589fd730f9a12ffc9b30a520d7f6931b -F test/analyze4.test 757b37875cf9bb528d46f74497bc789c88365045 + F test/analyze5.test 713354664c5ff1853ab2cbcb740f0cf5cb7c802e -F test/analyze6.test bd3625806a5ee6f7bef72d06295bd319f0290af2 -F test/analyze7.test d3587aa5af75c9048d031b94fceca2534fa75d1d ++F test/analyze6.test c35da530ac8d227512cff637fb7b1f145a7ed314 + F test/analyze8.test 4ca170de2ba30ccb1af2c0406803db72262f9691 -F test/async.test 1d0e056ba1bb9729283a0f22718d3a25e82c277b -F test/async2.test c0a9bd20816d7d6a2ceca7b8c03d3d69c28ffb8b -F test/async3.test d73a062002376d7edc1fe3edff493edbec1fc2f7 +F test/async.test ad4ba51b77cd118911a3fe1356b0809da9c108c3 +F test/async2.test bf5e2ca2c96763b4cba3d016249ad7259a5603b6 +F test/async3.test 93edaa9122f498e56ea98c36c72abc407f4fb11e F test/async4.test 1787e3952128aa10238bf39945126de7ca23685a -F test/async5.test 0dd8701bd588bf6e70c2557a22ae3f22b2567b4c -F test/attach.test 0e6f8de2589f11a5f474ef57fe5af2877e61c0e8 -F test/attach2.test e54436ed956d3d88bdee61221da59bf3935a0966 -F test/attach3.test d89ccfe4fe6e2b5e368d480fcdfe4b496c54cf4e -F test/attach4.test 31f9eb0ca7bdbc393cc4657b877903a226a83d4b -F test/attachmalloc.test 3a4bfca9545bfe906a8d2e622de10fbac5b711b0 -F test/auth.test ac996c81ad910148606f5c7e3b3f85d47c29960f +F test/async5.test f3592d79c84d6e83a5f50d3fd500445f7d97dfdf +F test/attach.test ce9660e51768fab93cf129787be886c5d6c4fd81 +F test/attach2.test a295d2d7061adcee5884ef4a93c7c96a82765437 +F test/attach3.test bd9830bc3a0d22ed1310c9bff6896927937017dc +F test/attachmalloc.test 38d2da5fdaf09ba0add57296967a3061e5842584 - F test/auth.test 26cc6f219580191539bf335abe03e55e49310846 ++F test/auth.test 75010ec8c4411630bdc582bc9fe9db31bc333fb1 F test/auth2.test 270baddc8b9c273682760cffba6739d907bd2882 F test/auth3.test a4755e6a2a2fea547ffe63c874eb569e60a28eb5 -F test/autoinc.test bd30d372d00045252f6c2e41b5f41455e1975acf -F test/autoindex1.test 058d0b331ae6840a61bbee910d8cbae27bfd5991 -F test/autovacuum.test fcaf4616ae5bb18098db1cb36262565e5c841c3c -F test/autovacuum_ioerr2.test 8a367b224183ad801e0e24dcb7d1501f45f244b4 +F test/autoinc.test 85ef3180a737e6580086a018c09c6f1a52759b46 +F test/autoindex1.test 5832aabf500dada692f325251a2231ab6b0e2d9a +F test/autovacuum.test bb7c0885e6f8f1d633045de48f2b66082162766d +F test/autovacuum_ioerr2.test 598b0663074d3673a9c1bc9a16e80971313bafe6 F test/avtrans.test 0252654f4295ddda3b2cce0e894812259e655a85 -F test/backcompat.test 71eeb75ea567c060774c4e8db4b0e703f21c7677 -F test/backup.test 6970614b002b056ae5bab5b76559905e02b6f0b2 -F test/backup2.test b4966934b2dc10a9a6546114566ea69b34a5185e -F test/backup_ioerr.test 40d208bc9224b666ee3ed423f49bc9062a36a9d0 +F test/backcompat.test 49bd844eb245f0b2b6f2a3f8bebad0065403a9a7 +F test/backup.test 200e64bd91244b73ca8094bc1e03dfc83cc94c2e +F test/backup2.test b7c69f937c912e85ac8a5dbd1e1cf290302b2d49 +F test/backup_ioerr.test 1f012e692f42c0442ae652443258f70e9f20fa38 F test/backup_malloc.test 7162d604ec2b4683c4b3799a48657fb8b5e2d450 F test/badutf.test d5360fc31f643d37a973ab0d8b4fb85799c3169f -F test/badutf2.test f5bc7f2d280670ecd79b9cf4f0f1760c607fe51f F test/between.test 16b1776c6323faadb097a52d673e8e3d8be7d070 F test/bigfile.test a8ec8073a20207456dab01a29ad9cde42b0dd103 F test/bigrow.test f0aeb7573dcb8caaafea76454be3ade29b7fc747 @@@ -313,54 -340,70 +314,54 @@@ F test/corrupt5.test c23da7bfb20917cc7f F test/corrupt6.test 4e4161aef1f30b9f34582bb4142334b7f47eacae F test/corrupt7.test a90caf89c7d7cb7893ea4d92529bd0c129317ee4 F test/corrupt8.test 48eb37ffb9a03bceada62219e2bd4c92f4b0cb75 -F test/corrupt9.test 959179e68dc0b7b99f424cf3e0381c86dcdd0112 -F test/corruptA.test fafa652aa585753be4f6b62ff0bb250266eaf7ce -F test/corruptB.test 20d4a20cbed23958888c3e8995b424a47223d647 -F test/corruptC.test 62a767fe64acb1975f58cc6171192839c783edbb -F test/corruptD.test 99b1999dbfa7cc04aaeac9d695a2445d4e7c7458 -F test/corruptE.test 78f7e1b9fd4a92e5951c7a5e414f2c4492733870 +F test/corrupt9.test fad0bc26a5c972580a8d763c62f24094f4e8ef25 +F test/corruptA.test 38b4f81c16099f6d8fa8b37e188fde76b8243994 +F test/corruptB.test 44133515cf46c4d7bba691e3bcfa478080413af0 +F test/corruptC.test 483aa35dadfd96bdf549e38d75ffc2942576477e +F test/corruptD.test 3ae6e2dc6e2226c6935a8a40d4b5ee3eba75f8c0 +F test/corruptE.test 7290b61145d954be549340e462ca84826d8a31a3 F test/count.test 454e1ce985c94d13efeac405ce54439f49336163 -F test/crash.test 519dc29f6fea151f015a23236e555239353946eb +F test/crash.test 1b6ac8410689ff78028887f445062dc897c9ac89 F test/crash2.test 5b14d4eb58b880e231361d3b609b216acda86651 -F test/crash3.test 8f5de9d32ab9ab95475a9efe7f47a940aa889418 -F test/crash4.test fe2821baf37168dc59dd733dcf7dba2a401487bc -F test/crash5.test 69226a1b948d8961395b7ad2a1df084c212ce8cf -F test/crash6.test 4c56f1e40d0291e1110790a99807aa875b1647ba -F test/crash7.test 6c6a369af266af2ef50ab34df8f94d719065e2c1 -F test/crash8.test 38767cb504bbe491de6be4a7006b154973a2309f +F test/crash3.test 776f9363554c029fcce71d9e6600fa0ba6359ce7 +F test/crash4.test 02ff4f15c149ca1e88a5c299b4896c84d9450c3b +F test/crash5.test 80a2f7073381837fc082435c97df52a830abcd80 +F test/crash6.test 9c730cf06335003cb1f5cfceddacd044155336e0 +F test/crash7.test e20a7b9ee1d16eaef7c94a4cb7ed2191b4d05970 +F test/crash8.test 76b95451933fe172ce8e26bff22d5c663c8ae473 F test/crashtest1.c 09c1c7d728ccf4feb9e481671e29dda5669bbcc2 -F test/createtab.test b5de160630b209c4b8925bdcbbaf48cc90b67fe8 +F test/createtab.test 199cf68f44e5d9e87a0b8afc7130fdeb4def3272 F test/cse.test 277350a26264495e86b1785f34d2d0c8600e021c F test/ctime.test 7bd009071e242aac4f18521581536b652b789a47 -F test/date.test a18a2ce81add84b17b06559e82ad7bb91bc6ddff -F test/dbstatus.test 9eb484ba837c6f3f9bbcaecc29e6060a8c3ba6d2 +F test/date.test 6354b883f922c38046a8efbad187cc95df6da023 - F test/dbstatus.test 946e1399d4574fc5dac934cceedbc76924af3f5a ++F test/dbstatus.test 655b77daafc344dc2cd4657a075c3e8a28c2a6ed F test/default.test 6faf23ccb300114924353007795aa9a8ec0aa9dc -F test/delete.test a065b05d2ebf60fd16639c579a4adfb7c381c701 +F test/delete.test f7629d9eb245dfca170169cc5c7a735dec34aeb4 F test/delete2.test 3a03f2cca1f9a67ec469915cb8babd6485db43fa F test/delete3.test 555e84a00a99230b7d049d477a324a631126a6ab -F test/descidx1.test 533dcbda614b0463b0ea029527fd27e5a9ab2d66 +F test/descidx1.test b1353c1a15cfbee97b13a1dcedaf0fe78163ba6a F test/descidx2.test 9f1a0c83fd57f8667c82310ca21b30a350888b5d F test/descidx3.test fe720e8b37d59f4cef808b0bf4e1b391c2e56b6f -F test/diskfull.test 106391384780753ea6896b7b4f005d10e9866b6e -F test/distinct.test 8c4d951fc40aba84421060e07b16099d2f4c2fdf +F test/diskfull.test 0cede7ef9d8f415d9d3944005c76be7589bb5ebb +F test/distinct.test b3c4ebe6dbddb31d55b168fdaec08456ef323dc4 F test/distinctagg.test 1a6ef9c87a58669438fc771450d7a72577417376 -F test/e_createtable.test 4771686a586b6ae414f927c389b2c101cc05c028 -F test/e_delete.test e2ae0d3fce5efd70fef99025e932afffc5616fab -F test/e_droptrigger.test ddd4b28ed8a3d81bd5153fa0ab7559529a2ca03a -F test/e_dropview.test b347bab30fc8de67b131594b3cd6f3d3bdaa753d -F test/e_expr.test d93ccded2409c66637dc1649a02f169e041b63d8 -F test/e_fkey.test 38039b840ab19331000b0f0eb1d82baa7208a67a -F test/e_fts3.test 5c02288842e4f941896fd44afdef564dd5fc1459 -F test/e_insert.test 76d4bb5da9b28014d515d91ffe29a79a1e99f2bc -F test/e_reindex.test a064f0878b8f848fbca38f1f61f82f15a3000c64 -F test/e_resolve.test dcce9308fb13b934ce29591105d031d3e14fbba6 -F test/e_select.test 8d7fac7a268eaeb80b9a7ba7964505b9d30f5458 -F test/e_select2.test 5c3d3da19c7b3e90ae444579db2b70098599ab92 -F test/e_update.test b926341a65955d69a6375c9eb4fd82e7089bc83a -F test/e_uri.test 6f35b491f80dac005c8144f38b2dfb4d96483596 -F test/e_vacuum.test 6c09c2af7f2f140518f371c5342100118f779dcf +F test/e_expr.test 8a35ce2718c61e871970bda09f4f3e549067c1ba +F test/e_fkey.test 35a4ec281da928fa8ebc3591a9c957258ecbb8be +F test/e_fts3.test 75bb0aee26384ef586165e21018a17f7cd843469 F test/enc.test e54531cd6bf941ee6760be041dff19a104c7acea -F test/enc2.test 796c59832e2b9a52842f382ffda8f3e989db03ad -F test/enc3.test 90683ad0e6ea587b9d5542ca93568af9a9858c40 -F test/enc4.test c8f1ce3618508fd0909945beb8b8831feef2c020 -F test/eqp.test f14fadd76da53405e9885e2431cacf7191d83cdb +F test/enc2.test 6d91a5286f59add0cfcbb2d0da913b76f2242398 +F test/enc3.test 5c550d59ff31dccdba5d1a02ae11c7047d77c041 F test/eval.test bc269c365ba877554948441e91ad5373f9f91be3 -F test/exclusive.test a1b324cb21834a490cd052d409d34789cfef57cb -F test/exclusive2.test 372be98f6de44dd78734e364b7b626ea211761a6 +F test/exclusive.test b1f9012cabc124af947165d15ffa62ad20f63db8 +F test/exclusive2.test fcbb1c9ca9739292a0a22a3763243ad6d868086b F test/exec.test e949714dc127eaa5ecc7d723efec1ec27118fdd7 -F test/exists.test 8f7b27b61c2fbe5822f0a1f899c715d14e416e30 -F test/expr.test 67c9fd6f8f829e239dc8b0f4a08a73c08b09196d -F test/fallocate.test b5d34437bd7ab01d41b1464b8117aefd4d32160e -F test/filectrl.test 4eb0178956ca25a756e6d79711a90fec7157b454 -F test/filefmt.test ffa17b5aebc3eb4b1e3be1ccb5ee906ffbd97f6e +F test/expr.test 9f521ae22f00e074959f72ce2e55d46b9ed23f68 +F test/fallocate.test 43dc34b8c24be6baffadc3b4401ee15710ce83c6 +F test/filectrl.test 97003734290887566e01dded09dc9e99cb937e9e +F test/filefmt.test f77c92141960b7933bc6691631d2ad62257ef40a F test/fkey1.test 01c7de578e11747e720c2d9aeef27f239853c4da -F test/fkey2.test 080969fe219b3b082b0e097ac18c6af2e5b0631f -F test/fkey3.test 5ec899d12b13bcf1e9ef40eff7fb692fdb91392e -F test/fkey4.test c6c8f9f9be885f95c85c7bceb26f243ad906fd49 +F test/fkey2.test e028cd80aa0bd38541c99214e3ba2dfccadffe6f +F test/fkey3.test 42f88d6048d8dc079e2a8cf7baad1cc1483a7620 F test/fkey_malloc.test a5ede29bd2f6e56dea78c3d43fb86dd696c068c8 F test/format4.test 1f0cac8ff3895e9359ed87e41aaabee982a812eb F test/fts1a.test 46090311f85da51bb33bd5ce84f7948359c6d8d7 @@@ -612,9 -681,10 +613,10 @@@ F test/speed3.test 5a419039e9da95d906ad F test/speed4.test abc0ad3399dcf9703abed2fff8705e4f8e416715 F test/speed4p.explain 6b5f104ebeb34a038b2f714150f51d01143e59aa F test/speed4p.test 0e51908951677de5a969b723e03a27a1c45db38b -F test/sqllimits1.test b1aae27cc98eceb845e7f7adf918561256e31298 -F test/stat.test 0997f6a57a35866b14111ed361ed8851ce7978ae +F test/sqllimits1.test e90a0ed94452076f6a10209d378e06b5f75ef0a0 +F test/stat.test 70fe540ffb285947aead5533dfd0c8c12f17f14e + F test/stat3.test 986d735f70ef62a1daf98e8762f35fa3b062c5c3 -F test/stmt.test 25d64e3dbf9a3ce89558667d7f39d966fe2a71b9 +F test/stmt.test 7915bd3e8380b956c095f40f41a775a30716e649 F test/subquery.test b524f57c9574b2c0347045b4510ef795d4686796 F test/subselect.test d24fd8757daf97dafd2e889c73ea4c4272dcf4e4 F test/substr.test 18f57c4ca8a598805c4d64e304c418734d843c1a @@@ -644,17 -718,30 +646,17 @@@ F test/tkt-31338dca7e.test 5741cd48de50 F test/tkt-3fe897352e.test 10de1a67bd5c66b238a4c96abe55531b37bb4f00 F test/tkt-4a03edc4c8.test 2865e4edbc075b954daa82f8da7cc973033ec76e F test/tkt-54844eea3f.test a12b851128f46a695e4e378cca67409b9b8f5894 -F test/tkt-5d863f876e.test 884072c2de496ddbb90c387c9ebc0d4f44a91b8e F test/tkt-5e10420e8d.test 904d1687b3c06d43e5b3555bbcf6802e7c0ffd84 -F test/tkt-5ee23731f.test 9db6e1d7209dc0794948b260d6f82b2b1de83a9f -F test/tkt-752e1646fc.test ea78d88d14fe9866bdd991c634483334639e13bf +F test/tkt-5ee23731f.test 3581260f2a71e51db94e1506ba6b0f7311d002a9 F test/tkt-78e04e52ea.test ab52f0c1e2de6e46c910f4cc16b086bba05952b7 -F test/tkt-80ba201079.test a09684db1a0bd55b8838f606adccee456a51ddbf F test/tkt-80e031a00f.test 9a154173461a4dbe2de49cda73963e04842d52f7 -F test/tkt-8454a207b9.test c583a9f814a82a2b5ba95207f55001c9f0cd816c -F test/tkt-91e2e8ba6f.test 08c4f94ae07696b05c9b822da0b4e5337a2f54c5 F test/tkt-94c04eaadb.test be5ea61cb04dfdc047d19b5c5a9e75fa3da67a7f F test/tkt-9d68c883.test 458f7d82a523d7644b54b497c986378a7d8c8b67 - F test/tkt-cbd054fa6b.test f14f97ea43662e6f70c9e63287081e8be5d9d589 -F test/tkt-b351d95f9.test d14a503c414c5c58fdde3e80f9a3cfef986498c0 -F test/tkt-b72787b1.test e6b62b2b2785c04d0d698d6a603507e384165049 -F test/tkt-bd484a090c.test 60460bf946f79a79712b71f202eda501ca99b898 + F test/tkt-cbd054fa6b.test bd9fb546f63bc0c79d1776978d059fa51c5b1c63 F test/tkt-d11f09d36e.test fb44f7961aa6d4b632fb7b9768239832210b5fc7 -F test/tkt-d635236375.test 9d37e988b47d87505bc9445be0ca447002df5d09 F test/tkt-d82e3f3721.test 731359dfdcdb36fea0559cd33fec39dd0ceae8e6 -F test/tkt-f3e5abed55.test 669bb076f2ac573c7398ce00f40cd0ca502043a9 +F test/tkt-f3e5abed55.test 91713833e266fbdc60f2030e05647ad4762073f6 F test/tkt-f777251dc7a.test 6f24c053bc5cdb7e1e19be9a72c8887cf41d5e87 -F test/tkt-f7b4edec.test d998a08ff2b18b7f62edce8e3044317c45efe6c7 F test/tkt-f973c7ac31.test 1da0ed15ec2c7749fb5ce2828cd69d07153ad9f4 F test/tkt-fc62af4523.test 72825d3febdedcd5593a27989fc05accdbfc2bb4 F test/tkt1435.test f8c52c41de6e5ca02f1845f3a46e18e25cadac00 @@@ -754,20 -842,23 +756,20 @@@ F test/trigger6.test 0e411654f122552da6 F test/trigger7.test b39e6dee1debe0ff9c2ef66326668f149f07c9c4 F test/trigger8.test 30cb0530bd7c4728055420e3f739aa00412eafa4 F test/trigger9.test 5b0789f1c5c4600961f8e68511b825b87be53e31 -F test/triggerA.test e0aaba16d3547193d36bbd82a1b0ed75e9c88d40 +F test/triggerA.test eaf11a29db2a11967d2d4b49d37f92bce598194e F test/triggerB.test 56780c031b454abac2340dbb3b71ac5c56c3d7fe -F test/triggerC.test 4d4bdaf0230c206b50d350330107ef9802bc2d4f -F test/triggerD.test 8e7f3921a92a5797d472732108109e44575fa650 -F test/tt3_checkpoint.c 415eccce672d681b297485fc20f44cdf0eac93af +F test/triggerC.test 2a23edcc00684d084902ba5ec93e721775c3a70a +F test/triggerD.test c6add3817351451e419f6ff9e9a259b02b6e2de7 F test/types.test bf816ce73c7dfcfe26b700c19f97ef4050d194ff F test/types2.test 3555aacf8ed8dc883356e59efc314707e6247a84 -F test/types3.test 99e009491a54f4dc02c06bdbc0c5eea56ae3e25a +F test/types3.test a0f66bf12f80fad89493535474f7a6d16fa58150 F test/unique.test 083c7fff74695bcc27a71d75699deba3595bc9c2 - F test/unordered.test 87ecfbb688f984d4aaf5716a343e260dd1fa2c6e -F test/unixexcl.test 9d80a54d86d2261f660758928959368ffc36151e -F test/unordered.test f53095cee37851bf30130fa1bf299a8845e837bb ++F test/unordered.test 279856a614fb07a3327fd2a9213b7a0596eb5d53 F test/update.test 8bc86fd7ef1a00014f76dc6a6a7c974df4aef172 -F test/uri.test 53de9a2549cbda9c343223236918ef502f6a9051 F test/utf16align.test 54cd35a27c005a9b6e7815d887718780b6a462ae -F test/vacuum.test 9516f3a8e49be666f2dde28561e4be5ae5612de0 -F test/vacuum2.test af432e6e3bfc0ea20a80cb86a03c7d9876d38324 -F test/vacuum3.test 77ecdd54592b45a0bcb133339f99f1ae0ae94d0d +F test/vacuum.test 15ae6784e70428b8db64e95c92d84b19e507b719 +F test/vacuum2.test ec57f21d394b7b72249b11f8e4b5d487bab56539 +F test/vacuum3.test f39ad1428347c5808cd2da7578c470f186a4d0ce F test/vacuum4.test d3f8ecff345f166911568f397d2432c16d2867d9 F test/varint.test ab7b110089a08b9926ed7390e7e97bdefeb74102 F test/veryquick.test 7701bb609fe8bf6535514e8b849a309e8f00573b @@@ -850,8 -954,12 +852,11 @@@ F tool/speedtest16.c c8a9c793df96db7e49 F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e -F tool/split-sqlite3c.tcl d9be87f1c340285a3e081eb19b4a247981ed290c -F tool/symbols.sh caaf6ccc7300fd43353318b44524853e222557d5 -F tool/tostr.awk 11760e1b94a5d3dcd42378f3cc18544c06cfa576 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f - P 7afb2354d3791cbce00200ddee6d9f230b9452e2 - R 284ce20ede0bb04e29c76d365b6f3d0b -F tool/warnings.sh 682b359e1531c8d4c805e2c1b5656b2d76e481e3 -P 3fe5d54f635f7b27851d256e417f21b91febb871 -R 9217825cb5191e88bf95b5e4ba6d99d3 ++P d55b64ef7e04e10a31360dea55751a33a0d591a4 eaf447ea87b0ff29ae06283204f522fcd005b284 ++R 58ef93486807718798db02129bd46bb2 ++T *branch * stat3-3.7.2 ++T *sym-stat3-3.7.2 * ++T -sym-branch-3.7.2 * U drh - Z 90dfab96918bae66e5af513add83497e -Z 7bc5368e818d03d3e9a11991cb532d98 ++Z 412311c28c86c46b8114a70551171453 diff --cc manifest.uuid index c101a07873,cf35c9b6a3..93a5030b20 --- a/manifest.uuid +++ b/manifest.uuid @@@ -1,1 -1,1 +1,1 @@@ - d55b64ef7e04e10a31360dea55751a33a0d591a4 -eaf447ea87b0ff29ae06283204f522fcd005b284 ++0df04f920b3e6cfe8db7687cc9c392f65c11d9ce diff --cc src/analyze.c index 8aef9d7731,316f0ecad9..bc964bb1f7 --- a/src/analyze.c +++ b/src/analyze.c @@@ -96,6 -204,227 +203,224 @@@ static void openStatTable } } + /* + ** Recommended number of samples for sqlite_stat3 + */ + #ifndef SQLITE_STAT3_SAMPLES + # define SQLITE_STAT3_SAMPLES 24 + #endif + + /* + ** Three SQL functions - stat3_init(), stat3_push(), and stat3_pop() - + ** share an instance of the following structure to hold their state + ** information. + */ + typedef struct Stat3Accum Stat3Accum; + struct Stat3Accum { + tRowcnt nRow; /* Number of rows in the entire table */ + tRowcnt nPSample; /* How often to do a periodic sample */ + int iMin; /* Index of entry with minimum nEq and hash */ + int mxSample; /* Maximum number of samples to accumulate */ + int nSample; /* Current number of samples */ + u32 iPrn; /* Pseudo-random number used for sampling */ + struct Stat3Sample { + i64 iRowid; /* Rowid in main table of the key */ + tRowcnt nEq; /* sqlite_stat3.nEq */ + tRowcnt nLt; /* sqlite_stat3.nLt */ + tRowcnt nDLt; /* sqlite_stat3.nDLt */ + u8 isPSample; /* True if a periodic sample */ + u32 iHash; /* Tiebreaker hash */ + } *a; /* An array of samples */ + }; + + #ifdef SQLITE_ENABLE_STAT3 + /* + ** Implementation of the stat3_init(C,S) SQL function. The two parameters + ** are the number of rows in the table or index (C) and the number of samples + ** to accumulate (S). + ** + ** This routine allocates the Stat3Accum object. + ** + ** The return value is the Stat3Accum object (P). + */ + static void stat3Init( + sqlite3_context *context, + int argc, + sqlite3_value **argv + ){ + Stat3Accum *p; + tRowcnt nRow; + int mxSample; + int n; + + UNUSED_PARAMETER(argc); + nRow = (tRowcnt)sqlite3_value_int64(argv[0]); + mxSample = sqlite3_value_int(argv[1]); + n = sizeof(*p) + sizeof(p->a[0])*mxSample; + p = sqlite3_malloc( n ); + if( p==0 ){ + sqlite3_result_error_nomem(context); + return; + } + memset(p, 0, n); + p->a = (struct Stat3Sample*)&p[1]; + p->nRow = nRow; + p->mxSample = mxSample; + p->nPSample = p->nRow/(mxSample/3+1) + 1; + sqlite3_randomness(sizeof(p->iPrn), &p->iPrn); + sqlite3_result_blob(context, p, sizeof(p), sqlite3_free); + } + static const FuncDef stat3InitFuncdef = { + 2, /* nArg */ + SQLITE_UTF8, /* iPrefEnc */ + 0, /* flags */ + 0, /* pUserData */ + 0, /* pNext */ + stat3Init, /* xFunc */ + 0, /* xStep */ + 0, /* xFinalize */ + "stat3_init", /* zName */ - 0, /* pHash */ - 0 /* pDestructor */ ++ 0 /* pHash */ + }; + + + /* + ** Implementation of the stat3_push(nEq,nLt,nDLt,rowid,P) SQL function. The + ** arguments describe a single key instance. This routine makes the + ** decision about whether or not to retain this key for the sqlite_stat3 + ** table. + ** + ** The return value is NULL. + */ + static void stat3Push( + sqlite3_context *context, + int argc, + sqlite3_value **argv + ){ + Stat3Accum *p = (Stat3Accum*)sqlite3_value_blob(argv[4]); + tRowcnt nEq = sqlite3_value_int64(argv[0]); + tRowcnt nLt = sqlite3_value_int64(argv[1]); + tRowcnt nDLt = sqlite3_value_int64(argv[2]); + i64 rowid = sqlite3_value_int64(argv[3]); + u8 isPSample = 0; + u8 doInsert = 0; + int iMin = p->iMin; + struct Stat3Sample *pSample; + int i; + u32 h; + + UNUSED_PARAMETER(context); + UNUSED_PARAMETER(argc); + if( nEq==0 ) return; + h = p->iPrn = p->iPrn*1103515245 + 12345; + if( (nLt/p->nPSample)!=((nEq+nLt)/p->nPSample) ){ + doInsert = isPSample = 1; + }else if( p->nSamplemxSample ){ + doInsert = 1; + }else{ + if( nEq>p->a[iMin].nEq || (nEq==p->a[iMin].nEq && h>p->a[iMin].iHash) ){ + doInsert = 1; + } + } + if( !doInsert ) return; + if( p->nSample==p->mxSample ){ + if( iMinnSample ){ + memcpy(&p->a[iMin], &p->a[iMin+1], sizeof(p->a[0])*(p->nSample-iMin)); + } + pSample = &p->a[p->nSample-1]; + }else{ + pSample = &p->a[p->nSample++]; + } + pSample->iRowid = rowid; + pSample->nEq = nEq; + pSample->nLt = nLt; + pSample->nDLt = nDLt; + pSample->iHash = h; + pSample->isPSample = isPSample; + + /* Find the new minimum */ + if( p->nSample==p->mxSample ){ + pSample = p->a; + i = 0; + while( pSample->isPSample ){ + i++; + pSample++; + assert( inSample ); + } + nEq = pSample->nEq; + h = pSample->iHash; + iMin = i; + for(i++, pSample++; inSample; i++, pSample++){ + if( pSample->isPSample ) continue; + if( pSample->nEqnEq==nEq && pSample->iHashnEq; + h = pSample->iHash; + } + } + p->iMin = iMin; + } + } + static const FuncDef stat3PushFuncdef = { + 5, /* nArg */ + SQLITE_UTF8, /* iPrefEnc */ + 0, /* flags */ + 0, /* pUserData */ + 0, /* pNext */ + stat3Push, /* xFunc */ + 0, /* xStep */ + 0, /* xFinalize */ + "stat3_push", /* zName */ - 0, /* pHash */ - 0 /* pDestructor */ ++ 0 /* pHash */ + }; + + /* + ** Implementation of the stat3_get(P,N,...) SQL function. This routine is + ** used to query the results. Content is returned for the Nth sqlite_stat3 + ** row where N is between 0 and S-1 and S is the number of samples. The + ** value returned depends on the number of arguments. + ** + ** argc==2 result: rowid + ** argc==3 result: nEq + ** argc==4 result: nLt + ** argc==5 result: nDLt + */ + static void stat3Get( + sqlite3_context *context, + int argc, + sqlite3_value **argv + ){ + int n = sqlite3_value_int(argv[1]); + Stat3Accum *p = (Stat3Accum*)sqlite3_value_blob(argv[0]); + + assert( p!=0 ); + if( p->nSample<=n ) return; + switch( argc ){ + case 2: sqlite3_result_int64(context, p->a[n].iRowid); break; + case 3: sqlite3_result_int64(context, p->a[n].nEq); break; + case 4: sqlite3_result_int64(context, p->a[n].nLt); break; + case 5: sqlite3_result_int64(context, p->a[n].nDLt); break; + } + } + static const FuncDef stat3GetFuncdef = { + -1, /* nArg */ + SQLITE_UTF8, /* iPrefEnc */ + 0, /* flags */ + 0, /* pUserData */ + 0, /* pNext */ + stat3Get, /* xFunc */ + 0, /* xStep */ + 0, /* xFinalize */ - "stat3_get", /* zName */ - 0, /* pHash */ - 0 /* pDestructor */ ++ "stat3_get", /* zName */ ++ 0 /* pHash */ + }; + #endif /* SQLITE_ENABLE_STAT3 */ + + + + /* ** Generate code to do an analysis of all indices associated with ** a single table. @@@ -118,20 -447,28 +443,27 @@@ static void analyzeOneTable int iDb; /* Index of database containing pTab */ int regTabname = iMem++; /* Register containing table name */ int regIdxname = iMem++; /* Register containing index name */ - int regSampleno = iMem++; /* Register containing next sample number */ - int regCol = iMem++; /* Content of a column analyzed table */ + int regStat1 = iMem++; /* The stat column of sqlite_stat1 */ + #ifdef SQLITE_ENABLE_STAT3 + int regNumEq = regStat1; /* Number of instances. Same as regStat1 */ + int regNumLt = iMem++; /* Number of keys less than regSample */ + int regNumDLt = iMem++; /* Number of distinct keys less than regSample */ + int regSample = iMem++; /* The next sample value */ + int regRowid = regSample; /* Rowid of a sample */ + int regAccum = iMem++; /* Register to hold Stat3Accum object */ + int regLoop = iMem++; /* Loop counter */ + int regCount = iMem++; /* Number of rows in the table or index */ + int regTemp1 = iMem++; /* Intermediate register */ + int regTemp2 = iMem++; /* Intermediate register */ + int once = 1; /* One-time initialization */ + int shortJump = 0; /* Instruction address */ + int iTabCur = pParse->nTab++; /* Table cursor */ + #endif + int regCol = iMem++; /* Content of a column in analyzed table */ int regRec = iMem++; /* Register holding completed record */ int regTemp = iMem++; /* Temporary use register */ - int regRowid = iMem++; /* Rowid for the inserted record */ - - #ifdef SQLITE_ENABLE_STAT2 - int regTemp2 = iMem++; /* Temporary use register */ - int regSamplerecno = iMem++; /* Index of next sample to record */ - int regRecno = iMem++; /* Current sample index */ - int regLast = iMem++; /* Index of last sample to record */ - int regFirst = iMem++; /* Index of first sample to record */ - #endif + int regNewRowid = iMem++; /* Rowid for the inserted record */ - v = sqlite3GetVdbe(pParse); if( v==0 || NEVER(pTab==0) ){ return; @@@ -160,9 -498,17 +492,16 @@@ iIdxCur = pParse->nTab++; sqlite3VdbeAddOp4(v, OP_String8, 0, regTabname, 0, pTab->zName, 0); for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ - int nCol; - KeyInfo *pKey; + int nCol = pIdx->nColumn; + KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx); + int addrIfNot = 0; /* address of OP_IfNot */ + int *aChngAddr; /* Array of jump instruction addresses */ - if( pOnlyIdx && pOnlyIdx!=pIdx ) continue; + VdbeNoopComment((v, "Begin analysis of %s", pIdx->zName)); + nCol = pIdx->nColumn; + aChngAddr = sqlite3DbMallocRaw(db, sizeof(int)*nCol); + if( aChngAddr==0 ) continue; + pKey = sqlite3IndexKeyinfo(pParse, pIdx); if( iMem+1+(nCol*2)>pParse->nMem ){ pParse->nMem = iMem+1+(nCol*2); } @@@ -318,8 -661,8 +654,8 @@@ ** If K>0 then it is always the case the D>0 so division by zero ** is never possible. */ - sqlite3VdbeAddOp2(v, OP_SCopy, iMem, regSampleno); + sqlite3VdbeAddOp2(v, OP_SCopy, iMem, regStat1); - if( jZeroRows<0 ){ + if( jZeroRows==0 ){ jZeroRows = sqlite3VdbeAddOp1(v, OP_IfNot, iMem); } for(i=0; ipIndex==0 ){ sqlite3VdbeAddOp3(v, OP_OpenRead, iIdxCur, pTab->tnum, iDb); VdbeComment((v, "%s", pTab->zName)); - sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regSampleno); + sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regStat1); sqlite3VdbeAddOp1(v, OP_Close, iIdxCur); + jZeroRows = sqlite3VdbeAddOp1(v, OP_IfNot, regStat1); }else{ + assert( jZeroRows>0 ); + addr = sqlite3VdbeAddOp0(v, OP_Goto); sqlite3VdbeJumpHere(v, jZeroRows); - jZeroRows = sqlite3VdbeAddOp0(v, OP_Goto); } sqlite3VdbeAddOp2(v, OP_Null, 0, regIdxname); sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regRec, "aaa", 0); - sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regRowid); - sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regRec, regRowid); + sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regNewRowid); + sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regRec, regNewRowid); sqlite3VdbeChangeP5(v, OPFLAG_APPEND); if( pParse->nMemnMem = regRec; - sqlite3VdbeJumpHere(v, jZeroRows); + if( jZeroRows ){ + sqlite3VdbeJumpHere(v, addr); + } } + /* ** Generate code that will cause the most recent index analysis to ** be loaded into internal hash tables where is can be used. @@@ -384,12 -726,13 +722,12 @@@ static void analyzeDatabase(Parse *pPar sqlite3BeginWriteOperation(pParse, 0, iDb); iStatCur = pParse->nTab; - pParse->nTab += 2; + pParse->nTab += 3; - openStatTable(pParse, iDb, iStatCur, 0, 0); + openStatTable(pParse, iDb, iStatCur, 0); iMem = pParse->nMem+1; - assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); for(k=sqliteHashFirst(&pSchema->tblHash); k; k=sqliteHashNext(k)){ Table *pTab = (Table*)sqliteHashData(k); - analyzeOneTable(pParse, pTab, 0, iStatCur, iMem); + analyzeOneTable(pParse, pTab, iStatCur, iMem); } loadAnalysis(pParse, iDb); } @@@ -407,9 -751,13 +745,9 @@@ static void analyzeTable(Parse *pParse iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); sqlite3BeginWriteOperation(pParse, 0, iDb); iStatCur = pParse->nTab; - pParse->nTab += 2; + pParse->nTab += 3; - if( pOnlyIdx ){ - openStatTable(pParse, iDb, iStatCur, pOnlyIdx->zName, "idx"); - }else{ - openStatTable(pParse, iDb, iStatCur, pTab->zName, "tbl"); - } - analyzeOneTable(pParse, pTab, pOnlyIdx, iStatCur, pParse->nMem+1); + openStatTable(pParse, iDb, iStatCur, pTab->zName); + analyzeOneTable(pParse, pTab, iStatCur, pParse->nMem+1); loadAnalysis(pParse, iDb); } diff --cc src/where.c index 00c25a5a1d,33969c0439..1c10417eb9 --- a/src/where.c +++ b/src/where.c @@@ -2688,8 -2728,9 +2724,8 @@@ static int whereRangeScanEst ** Estimate the number of rows that will be returned based on ** an equality constraint x=VALUE and where that VALUE occurs in ** the histogram data. This only works when x is the left-most - ** column of an index and sqlite_stat2 histogram data is available + ** column of an index and sqlite_stat3 histogram data is available -** for that index. When pExpr==NULL that means the constraint is -** "x IS NULL" instead of "x=VALUE". +** for that index. ** ** Write the estimated row count into *pnRow and return SQLITE_OK. ** If unable to make an estimate, leave *pnRow unchanged and return