]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Merge branches branch-3.7.2 and stat3-enhancement into a new branch for
authordrh <drh@noemail.net>
Fri, 26 Aug 2011 13:52:23 +0000 (13:52 +0000)
committerdrh <drh@noemail.net>
Fri, 26 Aug 2011 13:52:23 +0000 (13:52 +0000)
testing purposes.

FossilOrigin-Name: 0df04f920b3e6cfe8db7687cc9c392f65c11d9ce

18 files changed:
1  2 
manifest
manifest.uuid
src/analyze.c
src/build.c
src/ctime.c
src/sqlite.h.in
src/sqliteInt.h
src/test_config.c
src/utf.c
src/vdbeaux.c
src/vdbemem.c
src/where.c
test/alter.test
test/analyze.test
test/analyze6.test
test/auth.test
test/dbstatus.test
test/unordered.test

diff --cc manifest
index f72ca6ad6246b1e4f6bc7344e866c5d743779649,fa38621865eb3f32f5965b2b75a0d8e671a49808..6e6c1ff9b0eed9fd48cfb1ae086059c2c57bb3f8
+++ 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 c101a0787381995c4a60aa80495dce3b6ac95dcb,cf35c9b6a3f15ee5f374de3aec08fee5b67ea1b5..93a5030b200f21a4274c0a5741f0863efe6540df
@@@ -1,1 -1,1 +1,1 @@@
- d55b64ef7e04e10a31360dea55751a33a0d591a4
 -eaf447ea87b0ff29ae06283204f522fcd005b284
++0df04f920b3e6cfe8db7687cc9c392f65c11d9ce
diff --cc src/analyze.c
index 8aef9d7731850b85bb4944a3efd85326d398da1a,316f0ecad95e9efaf0f47024e878ea8a2126c23d..bc964bb1f7368d75aebcfdeb37c0c4406ed70a77
@@@ -96,6 -204,227 +203,224 @@@ static void openStatTable
    }
  }
  
 -  0,                /* pHash */
 -  0                 /* pDestructor */
+ /*
+ ** 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->nSample<p->mxSample ){
+     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( iMin<p->nSample ){
+       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( i<p->nSample );
+     }
+     nEq = pSample->nEq;
+     h = pSample->iHash;
+     iMin = i;
+     for(i++, pSample++; i<p->nSample; i++, pSample++){
+       if( pSample->isPSample ) continue;
+       if( pSample->nEq<nEq
+        || (pSample->nEq==nEq && pSample->iHash<h)
+       ){
+         iMin = i;
+         nEq = pSample->nEq;
+         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 */
 -  "stat3_get",     /* 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 */
+ };
+ #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;
    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);
      }
      ** 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; i<nCol; i++){
    if( pTab->pIndex==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->nMem<regRec ) pParse->nMem = 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/build.c
Simple merge
diff --cc src/ctime.c
Simple merge
diff --cc src/sqlite.h.in
Simple merge
diff --cc src/sqliteInt.h
Simple merge
Simple merge
diff --cc src/utf.c
Simple merge
diff --cc src/vdbeaux.c
Simple merge
diff --cc src/vdbemem.c
Simple merge
diff --cc src/where.c
index 00c25a5a1de4154efd4bce5619f91f19dfbb37ee,33969c0439dff55a5a4b2336c79f965d7bf42a6c..1c10417eb91c6d14b5fe35407260b07dcb505fee
@@@ -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
diff --cc test/alter.test
Simple merge
Simple merge
Simple merge
diff --cc test/auth.test
Simple merge
Simple merge
Simple merge