- 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
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
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
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
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
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
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
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
}
}
- 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.
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.
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);
}
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);
}