Compare commits

...

2512 Commits

Author SHA1 Message Date
drh 4c997c6e75 Fix an incorrect type signature for the loadable extension pointer
for sqlite3_result_pointer().

FossilOrigin-Name: 0bd7875bd9948836a14061275eb8ddac627f562a49f59f400ec98c00e2be82c5
2017-07-13 17:56:52 +00:00
drh 5587d86ddd Add the three new pointer interfaces to the loadable extension mechanism.
Update sqlite3_value_subtype() documentation to remove the statement about
it not being used internally.

FossilOrigin-Name: e5a518038fcb23376d2b17d4d70648320bc5540c5bd8b164201044ebe1ce45c5
2017-07-13 17:54:12 +00:00
drh d43748aa98 Update the FTS3 extension to use sqlite3_result_pointer() and
sqlite3_value_pointer() for passing FTS3 cursor objects from the table
into functions such as snippet().

FossilOrigin-Name: 0fa2e170e5e078d155c98b212ade36bd8424502ae07f2d82ebf77a76f57586ba
2017-07-13 17:48:14 +00:00
drh 3fb406083a Merge the latest changes from trunk.
FossilOrigin-Name: a54be6e041a9185787a22b86603dcb0654e5e4af71225b556d1b6279f8520ad8
2017-07-13 17:34:46 +00:00
drh 0c2433003d Smaller and faster implementation for vdbeFreeOpArray() and freeP4().
FossilOrigin-Name: 0c80593520d30958231be41fc443209eb39e0b3ee0e66308c3ef3a0f4cb8ea66
2017-07-12 20:43:23 +00:00
drh 7ccf95dbab Fix harmless compiler warnings about incomplete structure initializers.
FossilOrigin-Name: 604c11d1a39f09e47b6fcee0f8b1c1054f9dbbc7b2c1cf93312aeaa4b7095018
2017-07-12 18:05:54 +00:00
drh 980a89e630 Remove unnecessary EP_Leaf settings on the Expr object.
FossilOrigin-Name: f951c8b71b2369da62a329c792af5e3d3087bbe020f38c68ca1d0a594b904c08
2017-07-12 17:26:44 +00:00
drh 971ecd7eaa The EP_Resolved flag on the Expr object is not required for correctness nor
performance, so remove it.

FossilOrigin-Name: 54f55d3b7973e326541a81bfb2e752a2f6618e4fec9a3631b95f28e12e9c6e34
2017-07-12 17:08:24 +00:00
drh ec360a8d01 Clarification and simplification and result column naming logic.
FossilOrigin-Name: 68824a439b76a4cca05609a02de7abdc42bd1d26afbfcd047b90001c610d3c56
2017-07-12 14:10:19 +00:00
dan 47ebd4cadd Fix a problem in an lsmtest test case caused by writing data in "text" mode
instead of "binary".

FossilOrigin-Name: 3e56a79ad8754e6da3181883154fa1c8b227a8d16c9b2a3eba925371595ae1f9
2017-07-12 14:03:13 +00:00
drh f0f44b79c9 Compile cleanly with SQLITE_OMIT_UTF16.
FossilOrigin-Name: 783100b801703577e35ec12fe7623e1797e49699f3b8deb0694ef061a142b844
2017-07-12 12:19:33 +00:00
dan 1cd523cf0f In lsm, attempt to unmap the database file before truncating it when
disconnecting. A mapped file may not be truncated on win32.

FossilOrigin-Name: 39069941e98605bc8c7c736819781761760ee2b83363471ceb6f19e5eb06b13a
2017-07-11 20:36:35 +00:00
dan 416b8694fa Simplify the way in which the database file is truncated when the last
connection disconnects. Also ignore the error code from the xTruncate call -
as truncating a database file is always optional.

FossilOrigin-Name: b0a49d90fc91acca1306cf6145adc83acd368686768b7eb4a3b27515b3237396
2017-07-11 19:55:38 +00:00
drh 8999798e60 Fix harmless compiler warnings in the core.
FossilOrigin-Name: 55e93f256018757e5e1cb3b10ef48abf5914e7687419eae58b00998a37061261
2017-07-11 18:11:33 +00:00
mistachkin ba334bb20d Make win32GetTimeOfDay() in the lsm1 test code more portable.
FossilOrigin-Name: 2fe3a84330063378ca9fc5bfc8efe486c52d50b5c40be4f402a4f2318be69436
2017-07-11 17:54:27 +00:00
drh db3e0456d2 Enabled the new sqlite3_prepare_v3() and sqlite3_prepare16_v3() interfaces
for loadable extensions.

FossilOrigin-Name: b9debd626a68c4bc0e5fdeb8d15a991cfe6f62f9586eda76c07a1c18e498e3c2
2017-07-11 17:28:27 +00:00
mistachkin b7bfc3b12d Fix a whitespace alignment issue in lsm1.
FossilOrigin-Name: a8e651e0e52b016c3939df3ee23b4981f1a8841c7ddd2981c1ef391feb559a5e
2017-07-11 17:06:42 +00:00
mistachkin 36c68234d6 Fix more harmless compiler warnings in lsm1, seen with MSVC 2015.
FossilOrigin-Name: 0f1307f1f5638c1c4f1ce2b89cdef7ce8b76dc2a38685cd1ca152cde9e8727da
2017-07-11 16:46:41 +00:00
mistachkin 1be5051923 Fix harmless compiler warnings seen with MSVC for lsm1.
FossilOrigin-Name: cf6da4a52f7f9047e653ef2972e4c0910b29d7182d789a9e30225dc1849e8779
2017-07-11 16:36:10 +00:00
drh 56eb09bc23 Add support for tab-completion (using the ext/misc/completion.c virtual table)
to the command-line shell.

FossilOrigin-Name: 95cd1d9f8baa6be305c9a8bfa26fef2a403f2d5b3b5c9c55382ec04f0bc98d40
2017-07-11 13:59:07 +00:00
drh 2ce15c3f4c Change the src/shell.c file so that it is generated from a new script at
tool/mkshellc.tcl and the template file src/shell.c.in, and automatically
includes the extensions it needs out of ext/misc.

FossilOrigin-Name: 17e0bb12d82b510b86b6886b9fd0faf39b60b1374027344f89d7b89a32b842b9
2017-07-11 13:34:40 +00:00
drh e2b01012bc Fix a backup2 test case so that it works on FreeBSD.
FossilOrigin-Name: 724819b456ca7a5ca6d68415b3b3554741c3ddbb5c416cb6b6b5fc54177f426e
2017-07-11 02:53:38 +00:00
drh f3c0009d8b Add the "phase" output column on the COMPLETION table-valued function, for
debugging.  Improved comments on the implementation.

FossilOrigin-Name: 0e2135552757cc6566ac959475d3b87254b6d462425ee6c457c743001f3370e2
2017-07-11 02:05:21 +00:00
drh dc4dde6bd9 The COMPLETION virtual table now looks at the names of databases, tables,
and columns in addition to SQL keywords.

FossilOrigin-Name: 1cc97711fa86a3938f0930200476d1b0991e4b893a8be3a19015423a3de56bef
2017-07-11 01:38:45 +00:00
drh 3265b5649e Incomplete implementation of the COMPLETION table-valued function. So far it
only works for SQL keywords.

FossilOrigin-Name: caefbc723b5f67afc5ef10b92b20400cbb76cb03e7e75e18d2726cc552083e09
2017-07-11 00:09:44 +00:00
mistachkin b2950c48e1 Fix harmless compiler warnings in lsmtest.
FossilOrigin-Name: bd8a1fb9b33418717c786a7275f636cd4d5facd66de9a416f948b61c6490c743
2017-07-10 21:32:11 +00:00
drh 4a9e14077e Fix errors in comments in the STMT virtual table. No code changes.
FossilOrigin-Name: 9a8f045d62f5c6593a5a2842e817b49fa9d00c74e329a15a326f74e583c1f767
2017-07-10 20:39:59 +00:00
mistachkin 240e7ef4bb Minor cleanup and refactoring of the Win32 VFS for lsm1.
FossilOrigin-Name: bf7eda67c8124c3cd5d9150f2f2694cd3f991b20e0a527398885976d0d787242
2017-07-10 20:33:50 +00:00
drh a868639656 Another spelling error in the README.md file.
FossilOrigin-Name: 0512937425df6f274153f1d822fc4fe358601c2944745c0039c40e645ebedd82
2017-07-10 19:54:48 +00:00
drh e1869a91d6 Spelling error in README.md
FossilOrigin-Name: 12bc47c50252f1307b224d171069b93192d0c905aadf480829bba390c059aee4
2017-07-10 19:08:59 +00:00
drh 764fb30330 Yet another typo in README.md
FossilOrigin-Name: 75c9327b551d072effbb37efebf5fbe1a45965f89fe285df364dda06ca866cd7
2017-07-10 19:07:11 +00:00
drh 67d5bf9118 Fix another README.md typo.
FossilOrigin-Name: 20b1f0eff175aa8be9a7a631ede0a434f6c340fcdb931633e1f228d1fb35abde
2017-07-10 19:05:58 +00:00
drh 14d5ff4202 Fix an obsolete statement about Lemon in the README.md file.
FossilOrigin-Name: 4f6ce7a38baef24e00818926b9b8dc852334e3d4011f1d3a577c8c7e5f7ed93e
2017-07-10 19:03:04 +00:00
mistachkin 91ea8cf4ac Cleanup header usage in lsmtest for files that require _O_BINARY.
FossilOrigin-Name: f3a6a64ec90e6cf24aadf62aef4f92104be5ba6790f7fca040eff7abc31f1061
2017-07-10 18:57:03 +00:00
drh 7ff64dc2bc Updates to the repository README.md file.
FossilOrigin-Name: 7bfd3ab7996bf869eb2705495f3f2cd8bd6d1f4d029a1f26041e95049a9bfd3b
2017-07-10 18:52:29 +00:00
dan ff7733db52 In LSM, avoid calling the VFS xTestLock method to test for a lock that
conflicts with one held by the same process. The results of such a call are
considered undefined (since they are different under win32 and posix).

FossilOrigin-Name: a82a9bea624caf6b24d8e3f3c596817968b258f06e54288022f6df8226281057
2017-07-10 18:33:41 +00:00
drh dbc26722cd Add the "--newlines" option to the ".dump" command in the shell to disable
the newline escaping mechanism.

FossilOrigin-Name: bde431b1e332feaeb516dc46d180e2b2f42820c471feed7eda89452ada898dc9
2017-07-10 18:04:41 +00:00
drh 90e39ec349 When multiple constraints need to be evaluated for a row, do any constraints
that involve correlated subqueries last.  Hence, the priority is index-covered
constraints first, correlated subquery constraints last, and all others in
the middle.  This is a
follow-on and improvement to the push-down optimization of check-in [d7bb79ed].

FossilOrigin-Name: c4cb90487f34937605732c3959891075e2aabfb0bd05e55c44565d65867093ea
2017-07-10 17:00:31 +00:00
drh 66a0bf31cc Additional debugging Noop-comment in the constraint generator when
wheretrace is enabled.

FossilOrigin-Name: 0ca7474f05e9f27f53f8c71f5a3ff99963ffef9be9c147869e096246d552d6f1
2017-07-10 16:38:14 +00:00
drh e24b92bce7 Small performance optimization in sqlite3WhereExprUsage().
FossilOrigin-Name: 38edc6770e54e456500e77389d42fdf39e9a7ed258a4e1fed3c6dd8fdf4dfcb7
2017-07-10 15:26:09 +00:00
dan d3930b1266 Fix another problem on this branch.
FossilOrigin-Name: a4fc98113aeb10860834f68a2fdcef690ea15d8303d23b6dd416994a4b7edab6
2017-07-10 15:17:30 +00:00
dan 8674ec5a7f Fix a problem causing non-covered WHERE terms to be evaluated before covered
WHERE terms.

FossilOrigin-Name: 7d3cb39f60951dcec1ff87da2c4ec998f993de5edf49ee5e5f480c6fe4e5a052
2017-07-10 14:39:42 +00:00
dan ebc63013b7 When testing non-indexed WHERE constraints, test those that involve
correlated sub-queries last of all. This increases the chances of not having
to run the sub-query at all.

FossilOrigin-Name: 1f9c1f359e4693954ba7e2bc7b172ef34eb046e4ca2796df8336975b9d6aa92b
2017-07-10 14:33:00 +00:00
drh 9f6e14c1ef For sqlite3TreeView() debugging output, show the Expr.flags field on
scalar subqueries.

FossilOrigin-Name: dc857a96b00f13ffdf77bc222bc5acbbe14a36ca51e5368b568b3177d1be737a
2017-07-10 13:24:58 +00:00
drh ff4fa772f5 Update error message text for standard error codes to better describe the
latest usage of those error codes.  Modify sqlite3_open_v2() so that it does
return a valid sqlite3 object in the event of SQLITE_MISUSE due to bad
open flags, so that sqlite3_errmsg() does not report "out of memory" in that
case.

FossilOrigin-Name: f27b6370407842e2c175ea4aa9ce018723c57eaac0cccc1f8399bc20f33324be
2017-07-10 12:07:53 +00:00
drh e75be1aedb Remove the error message text from disused error codes such as
SQLITE_EMPTY and SQLITE_FORMAT.

FossilOrigin-Name: 871752f2925ee14bdd3e994c00832d00860c03f6f28e63504aa6d35978b7f37c
2017-07-10 11:17:51 +00:00
drh 155507b344 Always make "column%d" column-names 1-based, never 0-based.
FossilOrigin-Name: 70096c505d702a9646da24613da387cee19afcf395d0294b3797c5ab50bb3ee2
2017-07-09 18:55:29 +00:00
drh d7ca600ede Make sure the columns of a VALUES() clause are named "column%d" even if
the VALUES() clause is a subquery in the FROM clause of an outer query.

FossilOrigin-Name: acf3b9cc9c3932431979995a1dceacc06c659ab400fad95ce3728ff8895a022b
2017-07-09 00:30:58 +00:00
drh 2aa31333c2 Add the --icc, --gcc7, and --orm options to the speed-check.sh test script.
FossilOrigin-Name: 70dae08a9a6e35416f7268b9a95f3c8562b74697918bd1e9d5b5cf4719b9d075
2017-07-08 22:30:30 +00:00
drh 12ca0fc259 Basic test cases for PRAGMA secure_delete=FAST.
FossilOrigin-Name: 0c246017b45c5290f3a7932dfce649f1a6d8f9afc00c6c3edf2ef06c17dbca1d
2017-07-07 22:47:32 +00:00
mistachkin 50963c9da8 Fix comment in the Win32 VFS for lsm1.
FossilOrigin-Name: 12a421bcacf72128426eeafed8663accd8f2ac7edb46f620b60b8239065e657e
2017-07-07 21:20:26 +00:00
mistachkin 85bd1cd52b For lsmtest, use a more portable means of setting open() files to binary.
FossilOrigin-Name: aea6e0ffd33f41482f1b53b9f21b77add2865abda4eec1d9ee197177f74f43d0
2017-07-07 21:15:24 +00:00
mistachkin 1d91e9f26a Adjust copy_file() lsmtest function so it works properly for locked database files on Win32.
FossilOrigin-Name: 54a3855583deac93c955ed77fe82be6a6b7aadd3fdb7e6b895888e2a4ff530bd
2017-07-07 20:35:14 +00:00
drh 08f1efeb16 Add the "PRAGMA secure_delete=FAST" option, which overwrites most deleted
content without increasing the amount of I/O.  Deleted content might persist
on the free page list, however.  And extra CPU cycles are used for zeroing,
of course.

FossilOrigin-Name: 38978ce65b280bb7cba3fc08ba91485fb1b84cd9fbba2e950ecf41c021ff452a
2017-07-07 20:06:28 +00:00
drh a690ff360b Change the error message text for SQLITE_ERROR to omit the part about
"missing database" as that meaning is now obsolete (since approx SQLite 2.0).

FossilOrigin-Name: 732f90d6327c5c6368fc8b4cc207bd644ef08e3ae6d2e7295258ab099deaba63
2017-07-07 19:43:23 +00:00
mistachkin b11c650c01 Fix typos in Win32 VFS for lsm1.
FossilOrigin-Name: 0961ec873b78ad2da0ea9cdf2934bc8f08276375a153fe5d9fa8d4280328deef
2017-07-07 19:22:35 +00:00
mistachkin 73518c5876 Fix the memcpy calls in the lsmWin32OsShmMap function for lsm1.
FossilOrigin-Name: aa4890b9f9e9698c61d6ca0e24c26280f5e0a87a8c02865933ad483a1fd44d84
2017-07-07 19:12:55 +00:00
mistachkin a2d85cbbfa Enhance the MSVC makefile 'clean' target to handle lsm1.
FossilOrigin-Name: 2d6faebc319aefeab796c5f2ead4c3c3e2a9dd25c979a16bdb555a109135b13c
2017-07-07 19:02:51 +00:00
mistachkin 9a7a77ad36 Add support for LSM_DEBUG to the MSVC makefile for lsm1.
FossilOrigin-Name: 277a7fedafbe5b43d44086f3cb73e952873913bdc4b51041f45b6571b386d7d9
2017-07-07 18:31:51 +00:00
drh a7a0bfab91 In the command-line shell, when running ".schema" give a sensible error when
the database file is locked.

FossilOrigin-Name: cc329eb8d65171f3f4fcb39b0e55ef85c97a77f3510cf864bbc1537f993d0074
2017-07-07 18:06:49 +00:00
mistachkin 9b8c5f6819 Fix the usleep() macro in the Win32 test code for lsm1.
FossilOrigin-Name: 63599fa524a7c72ffa5362041f2ec394d9af9c43025d8b6d5a34e98eb423d5ff
2017-07-07 17:57:21 +00:00
drh d5eae667f4 Add new PRAGMAs: "function_list", "module_list", and "pragma_list". All are
enclosed within #ifdef SQLITE_INTROSPECTION_PRAGMAS.  The compile-time option
is not on ctime.c yet, since these are still experimental and one can always
test "PRAGMA pragma_list" and see whether or not it returns an empty set.

FossilOrigin-Name: e0b6ae92adfae46f64fc2e2719e22e5467c34d49c1aeaec5cc5faf04258de0f7
2017-07-07 17:43:30 +00:00
drh 8ae11aac93 Add the "Pragma_list" pragma. Put all three pragmas created on this branch
inside of #ifdef SQLITE_INTROSPECTION_PRAGMAS.

FossilOrigin-Name: 2f3c3781ef3d66ecafef083d7144287ff23eea5a6d93b014dfeb2a8ac71f757e
2017-07-07 17:33:07 +00:00
mistachkin e60092b90c Improve clarity in the Win32 VFS for lsm1.
FossilOrigin-Name: 9c7a9e805d95d3d4a3f7e2d608280b7ca0dda01114e32cd366b1deb14e6e6839
2017-07-07 16:46:08 +00:00
mistachkin baebf3cc4b Add support for LSM_DEBUG_MEM to the MSVC makefile for lsm1.
FossilOrigin-Name: 3340de83df8c4fb19f729e6ff0838a9a03a1e701cdb40cb830e76f294198024a
2017-07-07 16:29:37 +00:00
dan 45158fa5d9 Remove a block from the Win32 VFS for lsm1 that is now superfluous.
FossilOrigin-Name: 5f726f2830dcf91f5e5c010b10761757f746d39b9dd2b8c9770452ce65bb1652
2017-07-07 16:27:43 +00:00
dan 3bc909b0af In lsmtest, use an empty string instead of ":memory:" when requesting a
temporary database from SQLite. This prevents other test code from trying to
unlink() ":memory:", which fails on win32.

FossilOrigin-Name: 281ad505d7a112c5524ea9fb195dfc46f819a58f79f42b37b12fbfe46a089ff2
2017-07-07 16:09:24 +00:00
mistachkin 5bd9e61f05 Remove a block from the Win32 VFS for lsm1 that is now superfluous.
FossilOrigin-Name: db4a41408eff450ee429b936847313c2c92ba1f5b1fcbadaacaff3c08bfdd589
2017-07-07 16:07:53 +00:00
mistachkin d429ec222c Memory reallocation fix for the Win32 VFS for lsm1.
FossilOrigin-Name: 5a3140e4dedace6de4366a3c52e41b818b6d19f356fdab738c6605afc1b674fa
2017-07-07 16:06:30 +00:00
drh 40cf27cb63 Enhance the sqlite3VdbeMultiLoad() interface to automatically generate the
OP_ResultRow opcode on PRAGMA implementations, for a small reduction in the
library footprint.

FossilOrigin-Name: c46f0f076c674891e20240bad56693d891aedc43004bcf980a5d199515f23413
2017-07-07 16:00:53 +00:00
drh ab53bb635c Add new pragmas: "function_list" and "module_list"
FossilOrigin-Name: e5f01d7fde05fdb547f35816ff15c31a92c170b31877f4c640b7bc2be3f580b3
2017-07-07 15:43:22 +00:00
drh 4676462f92 Merge recent enhancements from trunk.
FossilOrigin-Name: 73d0fc027ddcc24e55cdc8c54443a96083cc9a29e57c0abe97e8586ff8a7f4c5
2017-07-07 14:26:43 +00:00
drh d10866798d Exploit the fact that Expr.pRight and Expr.x are never used at the same time
for a small performance gain.

FossilOrigin-Name: aacbb9a461fdb34c7f9c8ce348e44c3e96c93334f210d438d92bfac1794dc686
2017-07-07 13:59:34 +00:00
drh c2d14a9a33 More efficient and compact implementation of walkExpr().
FossilOrigin-Name: 115d4b83392d346634866dd959bef30fca50db2e526df17eaeb3d94da7fc895e
2017-07-07 12:58:30 +00:00
drh b98a2e351e More aggressive use of EP_Leaf on expression nodes, to help prune searches.
FossilOrigin-Name: c1a1d68c8219c8072e60af5c46a30849ae9a04fa1a6b2a8b22b82fec069d691d
2017-07-07 12:43:57 +00:00
drh 3da70a6112 Very slightly smaller and faster sqlite3WalkSelect().
FossilOrigin-Name: 9bc65635b29a4991c7821ef0939975d007f9ac23716717699353ef3246e27791
2017-07-07 11:49:48 +00:00
drh 0db5bfe5de Small adjustment to main.mk that facilitates giving non-standard compile-time
options to the shell.

FossilOrigin-Name: 7c7d53a9bbc27fde2dcc028cb7765c76cad0a784e53095b652c90d371968c53d
2017-07-06 22:43:41 +00:00
drh a0c3927510 Change the (machine-generated) keywordhash.h file to increase the scope of the
tables used for keyword matching, so that the tables are accessible to
functions other then keywordCode().

FossilOrigin-Name: c5ed5ebdf660501fde7cc8aefaaaeae2a68e5899a64ac93f26684842a235281d
2017-07-06 16:33:14 +00:00
drh 9d8e401c2d More compact implementation of the typeof() SQL function.
FossilOrigin-Name: efb4aab0caa4145732a5438cc2a193bc12c455b4007220564d240e75900ea8ad
2017-07-06 13:51:50 +00:00
drh ebaaa67db2 Avoid unnecessary upper-to-lower case conversion for function names when
registering the built-in functions.

FossilOrigin-Name: 06269257647db51fbc9f8cda88abac5db28b6f917a509768af7686dfa2b94511
2017-07-06 13:23:26 +00:00
drh 3b02e0f615 Small size reduction in findCollSeqEntry().
FossilOrigin-Name: 55ecd30304517acd23f89b3450fd6a5e18ac2f79aa24a4ff693f8d71a49f7837
2017-07-06 03:06:20 +00:00
drh 666e86625c Avoid unnecessary calls to sqlite3GetCollSeq() for a small performance gain.
FossilOrigin-Name: 503ba172e4c32e288abf006fc5cb53fd2b0313c4ee4c526c2d9c4c21b7178f2d
2017-07-06 02:49:26 +00:00
drh 07a3b11a50 Slightly more compact implementation of the byte-code generator for
the COMMIT and ROLLBACK commands.

FossilOrigin-Name: 4da663d9863004d8cef58259a043fdcf4f466f80d3714cf58321a52485be8766
2017-07-06 01:28:02 +00:00
drh 169a689f7b Small performance increase in sqlite3SrcListAppend().
FossilOrigin-Name: 7b2623f1994384484cf31ae9e443ee20f19b278bf2e91898dbc01828822ddf91
2017-07-06 01:02:09 +00:00
drh a35d851892 Make the hash table implementation a little smaller and faster.
FossilOrigin-Name: f762f1effe1ce893d6b67815ad8b585bae2c1621d9199dac9c85d39dad16e774
2017-07-05 23:33:33 +00:00
dan adea0d1c39 Have fts3 virtual table cursors free internal resources when they reach EOF,
instead of waiting until the xClose method is called.

FossilOrigin-Name: b6b14ab6c8f9758a64e5fd29203f8fa610b5c4ef917de9be51ae55e072fad4ed
2017-07-05 18:48:07 +00:00
dan 7181395a4d Fix a problem in lsmtest causing one test to fail for multi-threaded LSM
connections.

FossilOrigin-Name: 2bce64c8864b616f9ab0063f64d0ceb2f83e53e110970c6b3b11003cba5c8804
2017-07-05 14:29:04 +00:00
drh 269ba80469 Add the count-of-view optimization when compiled using
SQLITE_COUNTOFVIEW_OPTIMIZATION.

FossilOrigin-Name: d1ba200234f40b84327c7fc28c2584ed069da80e97578df71114d1a9ba9c559c
2017-07-04 19:34:36 +00:00
dan 431a53fde2 Fix further OOM handling cases in LSM.
FossilOrigin-Name: ca757c8665e27de884086b2aab2bd1db481e2d12f2afe136ec151bf5a0e65b91
2017-07-04 19:23:32 +00:00
dan 038af0bdc6 Fix a couple of problems in handling OOM conditions within LSM.
FossilOrigin-Name: 989a5c1745a7145c14c6d9b713176ecba6b99296de8bdd09f666eeef10da9c2e
2017-07-04 17:25:45 +00:00
drh 92395c59ff Fix a problem in the lempar.c Lemon template for YYSTACKDEPTH<=0 introduced
by check-in [36e54cd8b1fb37]

FossilOrigin-Name: 268a40f44cea6c3f561b7f54c90d631877be44292911424bac24f72c5ee87d60
2017-07-04 12:50:00 +00:00
drh 518ee8f06f Fix compiler warnings in LSM1, especially in the test logic.
FossilOrigin-Name: 9bd3be92b8add7bd0d7bc4b0742b2dd227ebb8d67a839b78f26f2b06b47490f2
2017-07-03 21:09:28 +00:00
dan 45408a108f Fix a bug in lsm queries on levels undergoing incremental an merge that
contain range-delete markers.

FossilOrigin-Name: b2c2487928becbea5a932895d153709c98a057a3c71c2600e165478562e9f7c5
2017-07-03 20:19:28 +00:00
drh cde336e0dc Attempt to improve documentation on sqlite3_column_ and sqlite3_value_
interfaces.

FossilOrigin-Name: 9111ac69bf307997e590bc9459222661fc79f549b3c493168a654a5046e6e4ad
2017-07-03 17:37:04 +00:00
dan 05dda7ba8e Add more tests for LSM log file recovery. Fix a problem in recovering log
files that contain range deletes.

FossilOrigin-Name: e34eafd4c5b2bbf2735e136ad69b67bb4288ad4d01a0128d8e107ac46209a182
2017-07-03 09:00:18 +00:00
dan 24f6904e99 Fix a memory management problem in lsm log recovery code.
FossilOrigin-Name: dd55af30b4440bba1b97c2155b9f499d791cd7d8bae8341972c41439fdc41edc
2017-07-01 20:59:06 +00:00
drh c7b1ee5f6e Enhance the RTree module to detect node truncation early and report an error.
FossilOrigin-Name: 66de6f4a9504ec2670b7273de8fb6955c80e03f7f73414ea6b80fd8a99f75976
2017-07-01 15:21:17 +00:00
drh 3561dd4afe Update the carray() and remember() extension functions so that they user
the new sqlite3_value_pointer() interface.

FossilOrigin-Name: a99fa94db7185b8eaf3c9b184cb1479f8b3d5781f71f1717a4b3f2dd1d184fe4
2017-06-30 23:46:16 +00:00
drh 3a96a5d919 Add APIs for binding pointers that can be used by app-defined functions.
FossilOrigin-Name: d9f4a831ba957ead3890b36d0e33e30cfa4c79b7de6400e623b9746a0a5a02d0
2017-06-30 23:09:03 +00:00
drh fd76b71cac Improved documentation for sqlite3_value_type().
FossilOrigin-Name: 0db20efe201736b3ebb177948f6a440ce28e62454536a8496fae64a3b55cb702
2017-06-30 20:11:45 +00:00
mistachkin 04222ce52e Add some assert() statements in the Win32 interface for lsm1.
FossilOrigin-Name: d076d58ff108d286f7ac1f81e1ce945d6f4a4f5f97e3b8d5cee6f8d9a6c48d8f
2017-06-30 19:22:33 +00:00
mistachkin 88f769f967 Fix some minor typos in lsm1.
FossilOrigin-Name: 0ef777d7474383c0211b19baa4a161cf7fce6570f384dfef368cdab45c1a0f01
2017-06-30 18:12:09 +00:00
dan a5b55e370f Avoid constantly freeing and reallocing small internal buffers associated with
LSM cursors. Instead, allow them to persist for the lifetime of the cursor if
they are LSM_SEGMENTPTR_FREE_THRESHOLD (default 1024) bytes or smaller.

FossilOrigin-Name: bacfe8cb3e4d3be736c6789b2ce55ef5603e5c7a289b05b37cae2203cd7f2290
2017-06-30 11:44:11 +00:00
drh a501f7dab4 In the command-line shell, add the -quote option to start up in quote mode.
Enhance the ".mode" command so that it reports the current output mode if
given no arguments.

FossilOrigin-Name: 5e3f9ea5c4fad35fe02a12d59114e94ee00e0a09c1840c88908a4c282e2f4625
2017-06-29 21:33:25 +00:00
drh c31b79d2a4 Remove the ".explain" command from the ".help" output of the command-line
shell, though keep the implementation around for backwards compatibility.

FossilOrigin-Name: 7782c04e9b2c0e95b5ac2a38876c1a233becfd892140bc6844790d62aeaff4f7
2017-06-29 21:11:27 +00:00
drh e755072c3b Some simple tests for the STMT virtual table.
FossilOrigin-Name: a26e17ee56d3c019fc4772fcf95480b4515eea6cfc74c3d494be0d1941e49666
2017-06-29 20:31:01 +00:00
dan d681d3472d Avoid reading or writing the 32 locking bytes at the end of the first meta-page of an LSM database.
FossilOrigin-Name: 3ed6877f89106131fd030c183fac036fed7231cd92dc4715e87a34a045500bdf
2017-06-29 20:23:32 +00:00
dan 28508ddb42 Avoid reading or writing the 32 locking bytes at the end of the first
meta-page of an LSM database.

FossilOrigin-Name: 2b5df3e8a80ae5c0415081dd9b29acaad1464be2e7971399e52c1c98408322d9
2017-06-29 20:13:44 +00:00
mistachkin 97e8b3ea32 Fix issues in the POSIX and Win32 interfaces for lsm1.
FossilOrigin-Name: 38ec41416679e8280d77c8a4913aa6a321784b1237a3fe409b8e256c5f4513de
2017-06-29 19:08:52 +00:00
drh 1d1982c324 Edit comments in sqlite.h.in used for generating documentation, to improve
the description of the new sqlite3_prepare_v3() interfaces, and other
miscellaneous cleanup.  No changes to executable code.

FossilOrigin-Name: 284707a7b3514a55cce24292e45632b7033d6edcff5b27deac5118b27c7b2954
2017-06-29 17:27:04 +00:00
mistachkin de680efbc3 More updates to the Win32 interface for lsm1.
FossilOrigin-Name: cae647696769c9fcdc3beafdfdf74d8384217f4b22820e4545093bea7be58f7c
2017-06-29 16:51:52 +00:00
mistachkin c2586f77ad Correct typo in the Win32 interface for lsm1.
FossilOrigin-Name: 1b4facb1ad0085aa52e63d4d432179467ddc2a69b668d49d86e65ead66a73f57
2017-06-29 15:57:42 +00:00
drh 01e6d540a7 Add interfaces sqlite3_prepare_v3() and sqlite3_prepare16_v3() with the
extra prepFlags argument. Add the SQLITE_PREPARE_PERSISTENT option as 
one bit in that argument.  Use the new option in FTS3, FTS5, and RTREE.

FossilOrigin-Name: 03977248e6fdaa9b35c15e5dd9bb89552f2f0a913cc31609b5af1e2347b67d38
2017-06-29 15:24:57 +00:00
mistachkin 14e61df283 Further corrections to the Win32 interface for lsm1.
FossilOrigin-Name: 4df6e2476ce93b9ca7a6959c8c2d6ef2c30395984b007d74166031dcf09d54b4
2017-06-29 15:13:48 +00:00
drh c6603af755 Rename the "stmts" virtual table to just "stmt" without the final "s".
FossilOrigin-Name: adfdb80105c46ac42b71132c80a91dbd5b1c9ff241fb4fbb5d04641a88898d90
2017-06-29 14:33:51 +00:00
mistachkin 3881d23c72 A couple fixes for the Win32 interface for lsm1.
FossilOrigin-Name: ebbd98e941d8a8ea97b434c29b70095515af0adab1977aa4d37fe74a7401f846
2017-06-29 14:17:48 +00:00
drh c79983312f Add the stmts virtual table to testfixture builds. Add new compile-time
options SQLITE_ENABLE_QPSG and SQLITE_ENABLE_STMTSVTAB to ctime.c

FossilOrigin-Name: 60c628293a1d8a1505e1a36dbd01b1f62bcfd7915e144044c92385423cbf8e07
2017-06-29 13:41:59 +00:00
mistachkin 2ca62cb102 Compilation fix for lsm1 using MSVC.
FossilOrigin-Name: b7794cc5d5abc13c6301c8d5c1b330405432c047f154083430fd15823221e552
2017-06-29 13:35:44 +00:00
drh e4b45f536e Add the LSM1 extension.
FossilOrigin-Name: 824e83274c04d24fd854bc7376c958ea6b05862efc562a3dfed0fc888fd96cc2
2017-06-29 13:19:55 +00:00
drh 366050e89a Add the "stmts" virtual table to the amalgamation, activated when compiled
using -DSQLITE_ENABLE_STMTSVTAB.  Add the SQLITE_STMTSTATUS_REPREPARE and
SQLITE_STMTSTATUS_RUN statistics outputs from sqlite3_stmt_status() and add
corresponding columns to the stmts virtual table.  Change the numeric value
of SQLITE_STMTSTATUS_MEMUSED to get it out of the way of counter values.

FossilOrigin-Name: 88976ae31c2cbc8b75f162140d1356132f69e5b30786e39ad8ca5a1774b03621
2017-06-29 13:13:33 +00:00
drh 3039e3698d The query planner examines the values of bound parameters to help determine
if a partial index is usable.  Reprepares may happen if the bindings change.
This behavior is disabled by the QPSG setting.

FossilOrigin-Name: c322bfa27e88fc9e2c969c1e4ce12a7d541bd2f30e133d267eb2d15fd3477fde
2017-06-29 12:59:40 +00:00
mistachkin d90dbb8c1c Implement xUnlink, xShmMap, and xShmUnmap for lsm1 on Win32.
FossilOrigin-Name: 680cc064c9e809ddc643074b5e65677f484d904b3d52826f6def480ddaa8f0ab
2017-06-29 12:54:58 +00:00
drh 00d11d400b Add the SQLITE_STMTSTATUS_REPREPARE and SQLITE_STMTSTATUS_RUN options to
sqlite3_stmt_status().  Use this for two new columns in the stmts virtual
table.

FossilOrigin-Name: b0b0c8f8d548ef78584ab714ab120b01c1b83fc0d8ae2fd7626b970bab9fca58
2017-06-29 12:49:18 +00:00
drh 5aa307e2a6 Fix the exprCompareVariable() routine so that it works for non-UTF8 text.
FossilOrigin-Name: 25acd9658be792d686b3ebfaa8c3692f9830e043538ed0afecf97110a07758a4
2017-06-29 01:23:12 +00:00
mistachkin cffbd543d3 Implement xRemap for lsm1 on Win32. Also, zero file handle when closing it.
FossilOrigin-Name: 93c9aa7d9aea46b331c53ff579ef704e88ce90f96600b69479a87a4bb4ca2a91
2017-06-29 00:20:42 +00:00
drh c080422642 Alternative implementation of exprCompareVariable(). Need to run tests on
both this branch and the original to see which one to go with.

FossilOrigin-Name: b959c6297c151150ea2dca24aa1f68f3bd76dd6620eb6c03f8dfa59fdd5c13b2
2017-06-28 21:47:16 +00:00
mistachkin 44ab70db7e Implement xLock and xTestLock for lsm1 on Win32.
FossilOrigin-Name: 9112117dad8085c385aa614cd982b307f5822761607ba358f34df7848c549134
2017-06-28 21:36:40 +00:00
drh 3e380a4485 Make the query planners use of partial indexes based on bound variables
responsive to the SQLITE_DBCONFIG_ENABLE_QPSG setting.

FossilOrigin-Name: a934dd14ac55177ac541423f4a077484bb3b461b60c9c2e88d067cca922fa2bc
2017-06-28 18:25:03 +00:00
drh 37f906087b Merge the in the latest enhancements from trunk.
FossilOrigin-Name: 8f63c5863231eba7f853f9587b58a81102c31708402fa9962a6e91aa622fad13
2017-06-28 18:07:29 +00:00
drh d0bbe4e9c2 Incorporate recent trunk changes.
FossilOrigin-Name: 62b8269ba2ff71e2daaa86688698896badd6f6e34ab42fbf92dda7fcda73a230
2017-06-28 15:56:58 +00:00
drh f00f530b7d Build the "stmts" virtual table into the amalgamation. It is active only
when compiled using SQLITE_ENABLE_STMTSVTAB.  That option is supplied to the
command-line shell.

FossilOrigin-Name: 0ff057d86e42e518fda22bfbf5f1977ab6bd0a74a9211ff259ee7e8a7ce98b58
2017-06-28 15:47:29 +00:00
drh 2fb960b545 Fix harmless compiler warnings in the CSV extension.
FossilOrigin-Name: f02a54599de7620438aecd3753199fc52ce8919d7503bb8b2f5592b0e51dbf8c
2017-06-28 15:17:31 +00:00
drh 8b471e7e79 Faster parser stack overflow detection.
FossilOrigin-Name: 36e54cd8b1fb374fd41e3e09b34b86e34327bf07c9e4bfec58382163c5c5d279
2017-06-28 15:01:35 +00:00
drh 6559e2cec7 Minor tweak to the SQL grammar to make the parser tables a few bytes smaller.
FossilOrigin-Name: cc4810b23e683e8c359f7c1a562338ec8501e43cac3475b2be002568fca5e6a4
2017-06-28 14:26:37 +00:00
drh 6be95366c7 In the lemon-generated parser, store the number of symbols on the RHS of each
rule as a negative number and add it to the stack pointer, rather than storing
the value as a positive and subtracting it.  This makes the parser faster.

FossilOrigin-Name: b362f0d8ed34839bf3b29d10ed0853ab94245fba135ccd28e619caa6ee6992d5
2017-06-28 13:47:56 +00:00
drh bd8fcc130a In the lemon-generated parser, automatically promote SHIFTREDUCE actions on
nonterminal systems to pure REDUCE actions, for a performance enhancement.

FossilOrigin-Name: c46d94a8cde816ca383e771721ebd4900de77950cba700e35a26f70fd5b794a4
2017-06-28 11:56:18 +00:00
drh 6e11b16282 Simplify error handling logic in sqlite3_exec() to save about 40 bytes.
FossilOrigin-Name: 6480916c7266437cf8a70e5db2ca5c753ad71c361b68e41cbf8572f77c271920
2017-06-28 01:21:16 +00:00
drh 59a386ea03 Minor code simplification in the ALTER TABLE logic.
FossilOrigin-Name: bfc4e7f30e4654b9603457fb6a4136828e346dcfe4e313fdf56ed62d131b7156
2017-06-28 01:12:53 +00:00
drh 3144df1264 Avoid an unnecessary call to sqlite3XPrintf() in the code generator, for
a performance improvement.

FossilOrigin-Name: 29d6ceb3838394d902e248d1eab627625a857dccb5ed0bb66161a13fafc500c8
2017-06-28 00:55:50 +00:00
drh a5e906f307 Add SQLITE_DBCONFIG_ENABLE_QPSG that forces the query planner stability
guarantee.  This is the fix for ticket [b9f010107724c]

FossilOrigin-Name: b82efd2a24914ace39acf99df75175042471fd73a8d31d66a40b15f63b342e10
2017-06-27 23:36:44 +00:00
mistachkin ec99c0f632 Improve a local variable name.
FossilOrigin-Name: d0f6973d93c36451bf64f47de9a88abec613a624603033bf6717f5071139b6d2
2017-06-27 22:33:06 +00:00
mistachkin b5fdc26c21 Initial work on porting lsmtest to Win32.
FossilOrigin-Name: 7e669d9bfab237ff7ece821cf95cfd3bb753b1882b9a86044b7d4579808aecf4
2017-06-27 22:27:54 +00:00
mistachkin 59b1dd3830 Implement xFullpath for Win32.
FossilOrigin-Name: dbe9c8aa8d70051fafec569054eeda6c02efe9d036ab6beada00da3ed42e52d9
2017-06-27 18:15:38 +00:00
dan 210ec4c855 Fix a virtual table problem that can occur when the vtab is on the RHS of a
LEFT JOIN and there is a MATCH constraint in the ON clause, or when the vtab
is in a sub-query that is the RHS of a LEFT JOIN and there is a MATCH
constraint in the WHERE clause of the sub-query.

FossilOrigin-Name: 87b381663398f029f52cb5598aadd069b03034b6f833ce80ba762b406075a44e
2017-06-27 16:39:01 +00:00
mistachkin 8e1ddde079 Minor corrections to the previous check-in.
FossilOrigin-Name: e1cf8a78a0bbd7b05cefab22a5c9676098887ee9811d37330ce89b3367856f92
2017-06-27 06:28:00 +00:00
mistachkin 02679b0466 Work in progress porting lsm1 to Win32.
FossilOrigin-Name: 2017636e93cf810fe4d1247c18de9f316fca037035a026f77c4588563d7bf0cc
2017-06-27 05:59:47 +00:00
drh af38cdbc08 Add the -withoutnulls option to the "db eval" method in the TCL interface.
FossilOrigin-Name: 18f0616e15684ca327fb10a1d133331af1d3b75f609498982290f6ad69fcaced
2017-06-26 21:08:32 +00:00
drh d5fbde80a2 The ".import" command of the shell, and the csv virtual table extension both
ignore a single UTF-8 BOM at the beginning of their input.

FossilOrigin-Name: 7c15d762d99c2e3e534cd35dfe25ddcd317637eb1f2655fd24c2dd5f9d5a7613
2017-06-26 18:42:23 +00:00
drh 7df7475d0d Make sure sqlite3VdbeSetVarmask() is never invoked when QPSG is enabled.
FossilOrigin-Name: ebcfa73e1c8ebb4fc371a6dcf77f97b6e06e405a299c66182aa4b20423d519ec
2017-06-26 14:46:05 +00:00
drh 169dd928c5 Add the SQLITE_DBCONFIG_ENABLE_QPSG option to activate the query planner
stability guarantee.  This involves refactoring the sqlite3.flags bitvector
to carve out a free bit to use.

FossilOrigin-Name: 7076e8283ebae1b45a5d85d9538b49b6da399d38c3c6935de100f948f814f6a9
2017-06-26 13:57:49 +00:00
dan 4261a4065f Remove an invalid assert() from lsm test code.
FossilOrigin-Name: ca8a7e995c3da10ba05e3b7d4818c633fe5ba6d6f9351b67017a2603b50b903d
2017-06-26 11:46:01 +00:00
dan 3a31c67aae Fix another problem with multi-threaded mode in the LSM test code.
FossilOrigin-Name: 461ced77d93e84f09bfb4291999cd0245506fa9a8369049fd68968bbcf18d41b
2017-06-26 08:24:35 +00:00
dan e6f98bcf09 Update a test case to reflect the fact that the lsm blocksize is configured in
KiB. And defaults to 1024, not 2048.

FossilOrigin-Name: d7015475f121db1f56060716cd8adb73e9b52016890ec9018b620ef9d7d4fbff
2017-06-26 07:31:28 +00:00
dan 07cae6ae74 Fix some compiler warnings in lsm_file.c.
FossilOrigin-Name: 23f16382ed47a90bf5e6c1684d54d28484dca46fea20ca0f131bd477cf222bfb
2017-06-26 06:53:24 +00:00
drh a22dd3860a Disable shell tests for the .schema command if virtual tables are not available.
FossilOrigin-Name: c8186874b3fec737445ad5c4ba3eaecd922af664b387d89dc31eea60476a0294
2017-06-24 19:21:48 +00:00
dan 5aa550cf3b Consider the values bound to SQL variables when determining whether or not a
partial index may be used.

FossilOrigin-Name: 7b59c353b805c64689b4ae9df347705acbb5f116346ad77af8ce087da7893747
2017-06-24 18:10:29 +00:00
drh 7f2d1cd2b0 Make sure the config.h header is included by ctime.c, if that header exists.
FossilOrigin-Name: c2ea62937ec8fabec72d3c7cd38d8e2cabbb5ce48638f8ce7ebefd6cd2716fd3
2017-06-24 16:35:00 +00:00
drh 54ac445d53 Query planner tuning: When deciding between two plans with the same cost,
bias the selection toward the one that does not use the sorter.

FossilOrigin-Name: f0ec36d479ac4efaa0efd0594d032dd7b8ccdf84a4dc3644cd688762186fbcca
2017-06-24 16:03:18 +00:00
drh 45e7d7dd1c Make sure enough memory is allocated for pathological quoting cases when
computing a quoted table name in the command-line shell.

FossilOrigin-Name: 0583b84ab444db3ae3c93db619b67bf84b0305ab989200e77214e02ff2dc923a
2017-06-24 13:31:40 +00:00
dan 65c2a71042 When generating individual loops for each ORed term of an OR scan, move any
constant WHERE expressions outside of the loop, as is done for top-level
loops.

FossilOrigin-Name: 712267c9c08fdcef5d59cedc672657b55fd6a77472711711599f0bd653e6d880
2017-06-23 15:47:05 +00:00
dan c456a76fb3 When generating individual loops for each ORed term of an OR scan, move any
constant WHERE expressions outside of the loop, as is done for top-level
loops.

FossilOrigin-Name: e4a022be4b069b08cfdfda5295461676b99d28e17bbbedfbcb362dec69de59bd
2017-06-22 16:51:16 +00:00
drh c45fdb2a7f Enable pragma virtual tables for the integrity_check, quick_check, and
foreign_key_check pragmas.

FossilOrigin-Name: 118f7bb33a6f78951bbffa957f48015d1bce5aaf9246a99262a90bc8ad52e5a3
2017-06-21 01:36:30 +00:00
drh f383f35e6c Rename the azCompileOpt global constant to avoid a harmless compiler warning
about a name conflict with a local variable.

FossilOrigin-Name: 94e420ecfb4ec047eb7d1d3125ca8487c90d466760b7f7183759ff922bd868d1
2017-06-20 18:19:16 +00:00
dan bd11a2acbb Ensure that the query planner knows that any column of a flattened LEFT JOIN
can be NULL even if that column is labeled with "NOT NULL".
Fix for ticket [892fc34f173e99d8].

FossilOrigin-Name: 483462682d3a57fb9dd85b4772596e9738f1694a454b8ebbc480b9452733e88d
2017-06-20 17:43:26 +00:00
drh a5907a86b8 Experimental "PRAGMA secure_delete=FAST" pragma. The intent is to overwrite
deleted content with zeros without increasing the amount of disk I/O.

FossilOrigin-Name: f1682f0faf1a93ded066464b1ddd5f987e21ee0f6bb5e828ed31c3ad903cf2c3
2017-06-19 11:44:22 +00:00
drh 40db2fd7a3 Fix a missing comma in the previous check-in.
FossilOrigin-Name: f3db02f49073c3f08c3fd7816d85e5472d5e22df20d862fe4886eb2a97efb15f
2017-06-17 18:49:50 +00:00
dan ea03adc6b2 Rework the code in ctime.c a bit to report on more compile time options. And
to only output configuration options passed in to SQLite, not the default
values of #define symbols set automatically. Also generate the large array in
ctime.c using new script tool/mkctime.tcl, instead of entering it manually.

FossilOrigin-Name: 9a443397a6b110f60cae32e1f758914d72931e16ddb423e4d4a119df526bf340
2017-06-17 17:55:33 +00:00
dan 814aad618c Ensure that the value of the THREADSAFE symbol is always included when
reporting compile time options, even if it was not explicitly configured.

FossilOrigin-Name: 95141c642697dc037e57f9e4992ff3460155995d3caef6259235601ee722cb93
2017-06-17 17:29:24 +00:00
dan f417f28bd7 Add extra test cases for sqlite3changeset_apply() and ALTER TABLE ADD COLUMN.
FossilOrigin-Name: 603838fc9a65adda831a6a17b31b2e80f5b56e5946a9f0c1fa2c83d2f2a67f6a
2017-06-17 16:39:10 +00:00
dan da1f49b83f Rework the code in ctime.c a bit to report on more compile time options. And
to only output configuration options passed in to SQLite, not the default
values of #define symbols set automatically. Also generate the large array in
ctime.c using new script tool/mkctime.tcl, instead of entering it manually.

FossilOrigin-Name: bc1951d699e6eeacbe15776a37cd0f5cf3f09eb85d3ae01cff43293cb286fcd7
2017-06-16 19:51:47 +00:00
drh ba87c6c2cd Minor refactoring change to clarify how ATTACH works. No functional changes.
FossilOrigin-Name: 3944a32e1dd90ff903bcbaaa7cb497cebcfcb2ba2a326726ec2268505e524ae3
2017-06-16 18:31:30 +00:00
drh 76cf858d3d Prevent pagesize changes on VACUUM in encrypted databases even when running
the VACUUM on an attached database.

FossilOrigin-Name: 11693849342a308ad929e2d9ead67faabacb523af76128c6973ed6cc8b62c11e
2017-06-16 13:43:37 +00:00
drh 0942559a14 Move the "shell_add_schema()" SQL function used by the ".schema" command
of the command-line shell to a different spot in the shell.c source file
so that it is not in the middle of an unrelated module.

FossilOrigin-Name: 254617a1ccfa1736d4e53d670d80319c79c4d93ebf1de69d89ebdba3949bc270
2017-06-15 16:56:05 +00:00
drh f217f3b68c Fix typo and improve the wording of the description of "Metadata" in the
output of the sqlite3_analyzer tool.

FossilOrigin-Name: ca1ff70780e07e5ee930fe7972db02e887d9b085d8ab78e878d7f966b6d684d4
2017-06-15 16:45:23 +00:00
drh b74013300c Merge the latest changes from trunk.
FossilOrigin-Name: 60105c2253d0b617037e975b0d0b729bcb59b950aa2c33d8891394ad45aabb69
2017-06-15 15:06:26 +00:00
drh 90cdec0672 Fix harmless compiler warnings in the shell.c file
FossilOrigin-Name: 9afd7a2ffd3a39456190ad05e85ff6485298aae262d9e0698a58c1d73507a36f
2017-06-15 13:07:56 +00:00
drh 594ccd09b1 Improvements to the ".tables" command in the command-line shell so that
it shows the name of all schemas if the name is anything other than "main".

FossilOrigin-Name: c7f778b7cee16a1dcebccd256408ee1d08ef2b62e388a9ebba5738a0a89bf3a0
2017-06-15 12:50:47 +00:00
drh 20c9c3f4eb In the command-line shell, enhance the ".schema" command show that it
shows the schema for ATTACH-ed databases in addition to "main".

FossilOrigin-Name: 48e086284a76da10a85315bc992e2294bd4711e35ec5a5abaa16e39a6a69d206
2017-06-15 12:21:09 +00:00
drh c74d962a1f Enhance the sqlite3_analyzer.exe utility so that it computes and shows the
number of bytes of metadata on btree pages and per table and index entry.

FossilOrigin-Name: 43ad41efa9e1fdd79a9804197a227491236495f14ed56c656224d6ce181703c1
2017-06-15 00:52:03 +00:00
dan 2ebf8f474e Fix sqlite3rbu_close() so that the pzErrmsg parameter may be passed NULL.
FossilOrigin-Name: c433672dd8ab625628bde2f4f40a2dc000ed915dbe91833d3f753d8ab51baf25
2017-06-13 16:52:34 +00:00
drh 6e3bccd5c9 Fix the processing of double-negatives in WHERE clause constraints with
STAT4.  Ticket [cfa2c908f2182]

FossilOrigin-Name: 35b34bdf0843b49be39e13ed212e918c2d45afdb8374b5cd02ba6d2d5b16b3b9
2017-06-13 04:31:54 +00:00
drh 56790ea567 Fix an off-by-one error that messes up the display of loop codes in the
".wheretrace" debugging output for queries with more than 62 candidate
loops when SQLITE_ENABLE_WHERETRACE is on.

FossilOrigin-Name: 0bbdaf2801e4102d952db65e53962e534b67b8b72e76fadb4ce404a6249129d9
2017-06-11 20:17:02 +00:00
drh eafc6dfe2b When reusing a materialized view, make sure the estimated number of
output rows is correctly initialized to avoid confusing the query planner.

FossilOrigin-Name: 87aceb417a813a2925b636cffa660fe25f3b7e3b3c84bb2108951bf0af644376
2017-06-11 19:51:36 +00:00
drh e46c63d565 Fix the sessiondiff test module so that it does not run if the session
extension is not enabled.

FossilOrigin-Name: 8f92b7a6223a69304dc8a6ab3b43a49cbb87f572a1e65d8a0c6dc09fca38e1a8
2017-06-11 19:40:34 +00:00
drh c62aab5ba8 Fix a potential null-pointer deference following OOM introduced by
check-in [e39795d7] (unreleased).

FossilOrigin-Name: a2f77285fa44df86863eed576271f1030ec60f15480daf175908c5082c27774b
2017-06-11 18:26:15 +00:00
drh e9acf4b48e Merge enhancements and fixes from trunk.
FossilOrigin-Name: 3fd050c343256c0748256ef183b46df04d9e0da0f81b841dbd336034402b36ab
2017-06-09 15:14:41 +00:00
drh c097b309aa Update the documentation to make it clear that the table name parameter
to sqlite3_table_column_metadata() may not be NULL.

FossilOrigin-Name: 2881ab1ed24ed72760086785bdf224c4e687cf39a02fd349ae13c6e1235e24da
2017-06-09 11:43:53 +00:00
drh c5d353fb33 Adjust the implementation of the ".selftest" feature of the shell to avoid
using the deprecated sqlite3_get_table() interface.

FossilOrigin-Name: 3168e2c92ad0a0dafc78a27ee1d87ac89f426585f506f418a0182141335dc68b
2017-06-09 02:27:49 +00:00
drh d96cc6fbcb Add a testcase() to confirm that an OOM on sqlite3DbStrNDup() is handled
correctly in trigger.c.

FossilOrigin-Name: 343e55992f503efa662e49bb0f3c0d798defd0a11f2ee1c36968902fa7e06823
2017-06-08 14:35:21 +00:00
dan ca66f6c6f4 Ensure pointer map entries are always added when a row that does use overflow
pages replaces one that does not in an auto-vacuum database. Fix for
[fda22108].

FossilOrigin-Name: b30dfba811cb531b09ff2e71a1a18ed53c816cb39155dd52ca3e2701425fe17b
2017-06-08 11:14:08 +00:00
drh cc97ca4c08 In SQLITE_DEBUG mode, attempt to log the page number of the database that
contained the problem when SQLITE_CORRUPT errors are seen.

FossilOrigin-Name: e39795d7d798d5249c7bd2a0f6ff891b455f4300a3d638c39a4668323b367666
2017-06-07 22:32:59 +00:00
dan 41ac439dbe Fix another lsmtest build problem. Add the "-trans BOOLEAN" option to "lsmtest
speed2".

FossilOrigin-Name: 61853bc171e7c3af1db6a33ac8b1ad21e1c08e8d6b317fe061fdcd89c9a42e88
2017-06-07 19:46:18 +00:00
drh 0282c03abc Merge in trunk enhancements.
FossilOrigin-Name: f8bbb608cbf6c245628e3d362e9181fb3dc402b1d8241bcb687caf395f63c916
2017-06-07 16:25:25 +00:00
drh d1417ee1cb Add the SQLITE_DEFAULT_ROWEST compile-time option for changing the estimated
number of rows in tables that lack sqlite_stat1 entries.

FossilOrigin-Name: 234ede26e30f20e6c33002739ed8be35dbfb5c77700bd857ff31072b9b7df347
2017-06-06 18:20:43 +00:00
dan 3b328522f4 Fix a threading problem in lsm test code.
FossilOrigin-Name: 501238b9fbb4eece084b4bfce84a5f37a986f34db8081df517e60ef81f357454
2017-06-06 16:14:49 +00:00
drh cf1393df94 Fix a subtle bug in the remember UDF of the kvtest.exe utility program.
FossilOrigin-Name: 9eea3670e77e2f831b7c00ae2d65a5583f9cad626d9ab286f92582ef29ecd4e3
2017-06-05 19:20:35 +00:00
dan b1d66c5986 Fix a bug in test_fs.c that occurs when the first component of a path contains
a GLOB or LIKE escape character.

FossilOrigin-Name: 73c70590d7689806901378cd2a7e167ec4339f886031369266e07868acd23b93
2017-06-05 16:33:53 +00:00
drh a4327e65bb For the kvtest utility, add the --vacuum option to "kvtest stat" and also
run PRAGMA integrity_check with "kvtest stat".

FossilOrigin-Name: f3c25df4562efda2adeb211a4cc893246354917849a0fa4d95da3d7970e9588e
2017-06-05 13:28:17 +00:00
drh 64bf76d2b2 Fix the column width deduction logic in the command-line shell to account
for multi-byte utf8 characters.

FossilOrigin-Name: ed0842c156ab1a78d5d00d3a55dab5e3f08cd349328d606724688f1528df3f6b
2017-06-05 12:29:26 +00:00
drh 3b77506ba5 Omit some of the fstree tests in vtabH if the PWD contains LIKE wildcards.
FossilOrigin-Name: ead29f9cb757a5f9921086e3bb4998f60e0d6cfcf41ef0f9a230b365b6226947
2017-06-05 10:31:03 +00:00
drh 4c88348729 Initialize a variable to zero to prevent an (incorrect) compiler warning of
it potentially being uninitialized.

FossilOrigin-Name: 65182ce041b30cd0193b958eca975b720fe5200a868baba1e633e49433d86813
2017-06-03 20:09:37 +00:00
drh 5930f663a1 Fix the SQLITE_PTR_TO_INT macro so that works on recent versions of LLVM on
Macs.

FossilOrigin-Name: c4089ffbdb4b3467648c97044b0d3085da7128103079b686f608efde83c7df30
2017-06-03 19:16:29 +00:00
drh 629a75f69a Remove unused header file from kvtest.
FossilOrigin-Name: dd7e043f7c9e16cd98a273b7105fa74bdd14a93db8cd5bde064cc1c40591155c
2017-06-03 18:27:49 +00:00
drh 1346fdad65 In kvtest, add the ability to work with a hierarchy of files on disk,
in addition to having all files in the same directory.

FossilOrigin-Name: f568f666c85ab9b80592927dc033cfd65bd4415576cf5b3beaf300d68a8e074e
2017-06-03 17:24:04 +00:00
drh 16d62901a3 Add the --nocheckpoint and --multitrans options to kvtest.
FossilOrigin-Name: 5828633c2392274b6863b50eaffbb2a176a4d892e83542824a9a3f0d1b62c967
2017-06-03 15:17:21 +00:00
drh 59ce97a013 Merge all recent trunk enhancements.
FossilOrigin-Name: 1d23294d88b1a80fe1f5403ea4fd75e61bb4932d5b714ea450d1b4b84f0896ab
2017-06-02 23:44:38 +00:00
drh f151890791 Add the --fsync flag to kvtest, and document the --nosync flag.
FossilOrigin-Name: 7fdc78a672b2ea6187dcb5fdf32f809bb8e4d501e2434f2233edc3bc2e3acc7c
2017-06-02 23:32:17 +00:00
drh a2e71ced79 Work toward enhancing kvtest to measure write performance.
FossilOrigin-Name: fc73e7d2f16386f96c55c42f9830193f7c178521a7ad90c3117b85ef629b5ce4
2017-06-02 19:31:46 +00:00
drh 170ad68a40 Change the name of the OP_Seek opcode into OP_DeferredSeek for better
clarity of function.  No functional code changes.

FossilOrigin-Name: ab33d299c7dab52703d06f3441c8a98c6c809b2612ec65d71aab2919bd2b1540
2017-06-02 15:44:22 +00:00
drh 6c2d94f928 Fix a typo in the header comment of the "series.c" virtual table extension.
FossilOrigin-Name: d637feb4e3032ee0067c204b56d2af5f7eab228e645f2e77b0b043c2b299724d
2017-06-02 13:16:54 +00:00
dan 38d6985509 Add test code for LSM to the ext/lsm1/lsm-test directory.
FossilOrigin-Name: bb7436e84a315baf05f00e6cab396017e3f287ea404d32e0cc4f389fa1194dec
2017-06-01 16:13:57 +00:00
drh c5e56b3473 Add a comment to the Lemon documentation regarding the security of the
lemon.exe command-line tool.

FossilOrigin-Name: 4c2458c1908181dc2f6bc594395c06d015fcbd78f5d3472f07a6a3909be9673c
2017-06-01 01:53:19 +00:00
drh 2c2f392dca Add interfaces sqlite3_prepare_v3() and sqlite3_prepare16_v3() with the
extra prepFlags argument.  Add the SQLITE_PREPARE_PERSISTENT option as one
bit in that argument.

FossilOrigin-Name: 4a25c5883380fe5990d8180adb58c3bdc7a3d081bc4c69cd4de3cd57074fb251
2017-06-01 00:54:35 +00:00
drh cdbb126be7 Add the SQLITE_STMTSTATUS_MEMUSED opcode to sqlite3_stmt_status()
for finding the heap memory usage by a single prepared statement.

FossilOrigin-Name: c26cf978eead1c9d265eddabaa421e7735b472fcf2792cd2bdeb0901bcf3fb44
2017-05-31 17:30:08 +00:00
drh 3528f6b62b Add the SQLITE_STMTSTATUS_MEMUSED option for sqlite3_stmt_status() that reports
the amount of heap memory used for a single prepared statement.

FossilOrigin-Name: b57d510465458dec5b5fc778fd6e8833392964201f9febebf526e60a543da0c2
2017-05-31 16:21:54 +00:00
drh 6b37e0adc9 Add the experimental "stmts" virtual table for introspection of prepared
statements.

FossilOrigin-Name: cb4c5c66aba757356da3b8ec3c66a5c8c40e180b3360638ac634f7787404a5b1
2017-05-31 16:09:04 +00:00
drh d4ab003d4e Avoid allocating excess memory to the KeyInfo objects.
FossilOrigin-Name: df7859435161f3ecf36635ce574bf73573516a1f2c6e75be320619364e7067d1
2017-05-31 13:45:59 +00:00
drh d5bdd5effb Remove a completely unnecessary memset() from the INSERT code generator.
FossilOrigin-Name: 7d58836b9db1293a3a6581af4358b7c91a588efd5c9b2df384803f3855ff87a8
2017-05-31 13:27:15 +00:00
drh b8a1290a28 Very small performance increase in sqlite3VdbeSetNumCols().
FossilOrigin-Name: 8885b4461044ae8ecdfe1b9aa47f4aad65efabc98e3fcd9e307a06504fab34c6
2017-05-31 11:24:13 +00:00
drh 02f18cc5ac Reorder fields in the PgHdr object for a performance increase.
FossilOrigin-Name: 326e63d71e0e164c5bcd1f74772cb4071b82daf6f04a5d440b985bace5a4c941
2017-05-31 03:20:39 +00:00
drh a8b9793c86 Avoid unnecessary memory zeroing during expression list allocation.
FossilOrigin-Name: de28e6514a42438411e2c9d833ba660108128ca86d0b90f32925fb73195f4862
2017-05-31 02:58:30 +00:00
drh d03257c141 Size and performance optimizations to sqlite3ResolveExprNames().
FossilOrigin-Name: af8c0fed93c830c50641d95691bb507c31947a15529aba2a88bfaa66b3a3287a
2017-05-31 00:49:40 +00:00
drh 2ab792e4c0 Change sqlite3BtreeNext() and sqlite3BtreePrevious() so that they return
SQLITE_DONE if they have already reached the end (or beginning) of the table.
This gives a performance increase and size reduction.

FossilOrigin-Name: e972a3860892022d57b26ec44ce0fbadc61c1ff54b7a10b7e82390db88d323a7
2017-05-30 18:34:07 +00:00
dan d26d2c7de2 Omit a test of codepoint 0x202F (non-break narrow space) from the fts3 ICU
tests. Different versions of ICU apparently handle this obscure codepoint
slightly differently.

FossilOrigin-Name: 69ae688982d6cb9f859f5643c315a1dc5ba76ad35553ecea8329a75ee70a87b1
2017-05-30 18:14:47 +00:00
drh e70d01f143 More efficient error handling and reset in the binding mechanism.
FossilOrigin-Name: 9a3e3b34ba6eafce2f560c13225a3673e18d696b29295b59d958e938fa593baf
2017-05-29 22:44:18 +00:00
drh 1e669f02bc Omit unnecessary fstat() calls for determining the database file size,
resulting in smaller and faster code.

FossilOrigin-Name: dd61c736775c53450821327495276485dced7935d0b4b5ebd17662731afc8adb
2017-05-29 17:59:29 +00:00
drh 8c9ed054b3 Fix an issue with OPT_FEATURE_FLAGS in configure.ac.
FossilOrigin-Name: 43ce3bd3a4b41ea757e308e563d6c1bf7f9c09f10e4766c536d0bf1042c45613
2017-05-29 17:43:06 +00:00
drh 77f6af2b96 Avoid unnecessary fstat() calls to determine the database size when
transitioning into a read transaction on a rollback-mode database.

FossilOrigin-Name: 6c3476b513965df22d648f9a1b99733af753b44d51163cc7d42a69bf562300e1
2017-05-29 16:45:45 +00:00
drh 5f5a2d1c3c Avoid unnecessary calls to fstat() to determine the database file size.
FossilOrigin-Name: c733a1dea37e4678e7bd0d3d0ca9b8eae1fbdc28615f75d8f1e5141aa53567d9
2017-05-29 14:57:23 +00:00
drh 8abc54e2e8 Fix a typo in a comment. No code changes.
FossilOrigin-Name: cb29b838886769afe866b1172e3d5d7e36387149b79c51f91cf59da3f4a5f25b
2017-05-29 14:30:46 +00:00
drh 979dd1be57 Optimizations to the Walker object and its methods to make the code a little
smaller and to help it run a little faster.

FossilOrigin-Name: 6854a34ed708259f2280f7ee56cec09f7fc99810dc739dc2814ddeae286aa2c4
2017-05-29 14:26:07 +00:00
drh d8a295669c Correctly initialize the iSelectId of FROM clause terms that are a self
join of a reused materialized subquery.  Without this, the EXPLAIN QUERY PLAN
output for the query will identify the subquery using the uninitialized
(and arbitrary) iSelectId.

FossilOrigin-Name: 43c9ae371f6250fee98a7c4011726eff8ad37f5a97add4f490ac3a2dd501a0d2
2017-05-29 13:09:24 +00:00
mistachkin e16a350f17 Improve shell help text for the '.open' command.
FossilOrigin-Name: 7cc940a97efc096ff3725710f526c06f52453bd923fb9e825ce6990275df747a
2017-05-29 03:48:13 +00:00
drh ae2ac854b3 Smaller and faster vdbeSorterCompareText().
FossilOrigin-Name: 542dc4c5eb87017fe03b6c181e779993aa84564785e1177ccf937d52f985593b
2017-05-27 22:42:36 +00:00
drh 14e845a9d4 Small performance increase and size decrease in the btreeInitPage() routine.
FossilOrigin-Name: 6f415833e0554706dcf04f68ecba4ca2e54c08f3bbf6a1dba182bb132c912a2e
2017-05-25 21:35:56 +00:00
drh 137c46f8b6 Merge the LEFT JOIN query flattener fixes from 3.19.2.
FossilOrigin-Name: 6513e4a121e32df7e5cd95f47cdf8049b85bdbcb378cf23db29838fb1143d3ce
2017-05-25 17:27:52 +00:00
drh 65ff63ea62 Version 3.19.2
FossilOrigin-Name: edb4e819b0c058c7d74d27ebd14cc5ceb2bad6a6144a486a970182b7afe3f8b9
2017-05-25 16:50:27 +00:00
drh dc6de47925 The SQLITE_EXTRA_IFNULLROW compile-time option causes OP_IfNullRow opcodes
to be issued for references to the right-hand side table of *any* flattened
join, not just LEFT JOINs.  This puts extra stress on the OP_IfNUllRow opcodes
for testing purposes.

FossilOrigin-Name: 1a074c8a2bc0b28918ef905339d11a21d30101b4ea8c06c8b3faca7d17237538
2017-05-25 11:39:50 +00:00
drh 074ce1e7fd The TK_IF_NULL_ROW expression node must be treated as a variable that
references the table Expr.iTable.
Proposed fix for ticket [7fde638e94287d2c].

FossilOrigin-Name: b30a364a12d9865242b1444984cd25ee126dc69108d5c6a2d4b35df184437fe9
2017-05-25 00:28:36 +00:00
drh 8389bff0a8 Increase the version number to 3.19.2 since ticket [7fde638e94287d2] is
going to necessitate another patch release.

FossilOrigin-Name: c315727acd5fffe6e83ad9a5e84360d5cfa9aa8faa10d4970ea9823c7e8126ee
2017-05-25 00:12:04 +00:00
drh f43ce0b445 The TK_IF_NULL_ROW expression node must be treated as a variable that
references the table Expr.iTable.
Proposed fix for ticket [7fde638e94287d2c].

FossilOrigin-Name: 77fc23013cebc7797985864b91d78db5d0e2469511732044ebfaf02b891c979a
2017-05-25 00:08:48 +00:00
mistachkin 831265f962 Fix harmless compiler warnings in FTS5.
FossilOrigin-Name: 57a60e959c198b87ed29fab14356f89e0ea7cdb1dd99adbea45b40e8d0cb310a
2017-05-24 15:32:44 +00:00
drh 6fb139e087 Version 3.19.1
FossilOrigin-Name: f6d7b988f40217821a382bc298180e9e6794f3ed79a83c6ef5cae048989b3f86
2017-05-24 13:08:33 +00:00
drh 63ad86e70e Fix a problem in STAT4 equality estimation for multi-column indexes
introduced by check-in [3e0590dee0e68cc1599].

FossilOrigin-Name: cfb0d9e0207128b1c2b48689288a849b19dbc00a22cfaca26eec4bfc773629f8
2017-05-24 04:18:00 +00:00
drh ce13b99f99 Remove the msvc.h header file from the autoconf tarball.
FossilOrigin-Name: 84996aef68adeabc8bd97cad269188c67de628f776337a25ec2d63bc956cee78
2017-05-23 20:00:00 +00:00
drh 92b71757f7 Do not use strcpy() in the (obsolete) amatch extension.
In releasetest.tcl, run Apple tests using -Os instead of -O1

FossilOrigin-Name: 4440e42031b9cb0edf9a8621cd4f46f209392940ec5b9eefcf8c1e3fef5f7b76
2017-05-23 19:35:20 +00:00
drh 3c790f2a83 Disable the LEFT JOIN flattening optimization for aggregate queries, as it
does not currently work.  Further fix for ticket [cad1ab4cb7b0fc344].

FossilOrigin-Name: 05ada741554b9fd00befcf7b4083637f53de68699ae5210ac18e0773ad1a9910
2017-05-23 15:33:41 +00:00
drh 1d1fc5e385 Disable the LEFT JOIN flattening optimization for aggregate queries, as it
does not currently work.  Further fix for ticket [cad1ab4cb7b0fc344].

FossilOrigin-Name: 44b21e35c92137cc519d0cc87c627cc531d0bd442a7b9a7356fa2c6bc5f70fb6
2017-05-23 15:21:37 +00:00
drh 7c1544e051 Ensure that the expression rewriter inside the query flattener decends into
the substructure of the TK_IF_NULL_ROW operator.  This is a continuation
of the fix for ticket [cad1ab4cb7b0fc344].

FossilOrigin-Name: 28d2902d8f4dfbbfc610f271e00d353b0baae386b56b482f96b88836410be129
2017-05-23 12:44:57 +00:00
drh eff0a7b25e Ensure that the expression rewriter inside the query flattener decends into
the substructure of the TK_IF_NULL_ROW operator.  This is a continuation
of the fix for ticket [cad1ab4cb7b0fc344].

FossilOrigin-Name: 941d8142b7c9a96ff143d1add3c86cf42d61fd08e532d400dac555f23eadbcfb
2017-05-23 12:36:13 +00:00
drh f352cf57e3 Change the version number to 3.19.1.
FossilOrigin-Name: 16656b8ff5cf79565b0b30f804f5f924fabfe989fdf00a2e7c30fe4438143981
2017-05-23 01:35:22 +00:00
drh 44bdc92938 Remove a surplus semicolon, which was harmless on gcc and clang but caused
compile-time errors on msvc.  This only comes up using the encryption extension.

FossilOrigin-Name: 4510d55d1e2e23d4a4470dbd414161beec2ceefb7537fd66ea3c347e11624dfc
2017-05-23 01:30:26 +00:00
drh 10d33c1781 When flattening a query, make sure iTable attribute of TK_IF_NULL_ROW
operators (that result from a prior flattening of a LEFT JOIN) are updated
correctly.  Fix for ticket [cad1ab4cb7b0fc344].

FossilOrigin-Name: 919d36e6ea112c8c94f01e02611c48e78c441657e6898a466cfc39f1e0001403
2017-05-23 01:29:35 +00:00
drh 3f1e9e00e6 When flattening a query, make sure iTable attribute of TK_IF_NULL_ROW
operators (that result from a prior flattening of a LEFT JOIN) are updated
correctly.  Fix for ticket [cad1ab4cb7b0fc344].

FossilOrigin-Name: 92c178507df553e4f1110342c8f9b11b3ee37989e1d634fcaccabf657befa22f
2017-05-23 01:21:07 +00:00
drh d4fb196531 Remove a surplus semicolon, which was harmless on gcc and clang but caused
compile-time errors on msvc.  This only comes up using the encryption extension.

FossilOrigin-Name: 987a2b5537254b1fe843eb798d7eb7f04dbe1e32fb827cfb9e1e1ef6c2096759
2017-05-23 00:32:56 +00:00
dan 07d0f15e93 Fix incompatibilities between the "sqldiff --changeset" command and the
sessions module. Specifically, allow sessions to process changesets containing
tables with zero operations on them and have sqldiff output the expected
output for tables with multi-column primary keys.

FossilOrigin-Name: 0bb23c48064cc64134697469f3f4d2d3610b9e6c7a0dc54a3c47a00bd6c2a860
2017-05-22 18:09:00 +00:00
drh 453ca043a2 Add the ".cd" command to the command-line shell.
FossilOrigin-Name: 5fe28e15b1d6d8a588fcaf93c6035c0e0ab7bcad1067c7933cd430d2e04bbbd8
2017-05-22 18:00:34 +00:00
drh ee841262d9 Increase the version number to 3.20 for the next release cycle.
FossilOrigin-Name: ab471f61ef7d9ed1bf937d5e458f720d12209712a015786434edc818a98168c9
2017-05-22 17:39:37 +00:00
drh d758722449 Merge the last-minute 3.19.0 changes into trunk.
FossilOrigin-Name: e6ba2a93a8d28074ff134dd43c142315de291b7c0a38ecc692863c33975c71c7
2017-05-22 14:04:46 +00:00
drh 2435fa6916 Version 3.19.0
FossilOrigin-Name: 28a94eb282822cad1d1420f2dad6bf65e4b8b9062eda4a0b9ee8270b2c608e40
2017-05-22 13:58:13 +00:00
drh 44ec1d6eda Include the "msvc.h" header file in the amalgamation tarball.
FossilOrigin-Name: 3dd6fe53c7ae6ebe2393e956d040e00b8cd0589674d20aafe1585aaa61325bbe
2017-05-22 13:06:45 +00:00
dan 21766c0c16 Fix a case where NULL was being passed to memcmp() following an OOM. This is
probably not a real problem, as the number-of-bytes parameter was passed 0 in
this case, but it was causing a santizer complaint.

FossilOrigin-Name: 3ea2bad27e516d5dbfa4a9cb0c767d6a8387280a7e4bbf2ae80cd318da670d66
2017-05-22 08:04:09 +00:00
drh 78436d4c66 When planning a query using sorting, resolve ties in the solver by selecting
loop plans with the smaller unsorted cost.

FossilOrigin-Name: f261678c90297f9767040c577796cc1d4db598aa44b0de6906cb73eaef377dee
2017-05-22 00:45:15 +00:00
drh d8025e43ae Prevent a possible NULL pointer dereference in the OP_Found opcode that
can follow an OOM error.  Problem found by OSS-Fuzz.

FossilOrigin-Name: 50ad60ded54aa22dfdf519ed5da6451de790e22a972ff299f7976fbdce7a0579
2017-05-19 23:04:04 +00:00
drh e46515b53f Prevent a possible NULL pointer dereference in the OP_Found opcode that
can follow an OOM error.  Problem found by OSS-Fuzz.

FossilOrigin-Name: c2de178fe7e2e4e0d764e7e6ac637cfc8c053580c43f7246318dafad2974de3c
2017-05-19 22:51:00 +00:00
drh bcbb066534 Improved comments on one routine in the query planner. Improved diagnostic
output for ".wheretrace".  No production code changes.

FossilOrigin-Name: 946b87a5282f00d8c532a51f4390e6de781b9a0d6626cb3c077c5622895dc540
2017-05-19 20:55:04 +00:00
drh 748465b49e Fix a documentation typo. No changes to code.
FossilOrigin-Name: 68942a4feeb83e6e1a32d9bd724ae1d72669949adcfad07fb05b0ac48daf5151
2017-05-19 20:47:54 +00:00
drh 8c3bde05ce Branch for the 3.19 release.
FossilOrigin-Name: f2b829ec52c2037eba4feb9427c56d84aca736cb5fc841dfe91cfff22cf660c1
2017-05-19 20:46:27 +00:00
dan 22025ef198 Fix some problems in fts5 code detected by -fsanitize=undefined.
FossilOrigin-Name: 35f721045dfe3f82e016938ab1a668bfc37b6b57b8813cc963ef640ec82de58d
2017-05-19 12:32:32 +00:00
drh 1e1c4226ee Fix a documentation typo. No changes to code.
FossilOrigin-Name: cfa4aa203646f44b303138c25672293bb87d97126fe2030d4709e8ad7814a807
2017-05-18 18:17:55 +00:00
dan 9ea258d712 Update the tool/warnings.sh script to automatically use the right options on OpenBSD..
FossilOrigin-Name: 7940bff32aa6ea868a53680822d148b7ec7a075c01ae9e0d5ad9859bcc339054
2017-05-16 09:49:42 +00:00
drh dd1bb43ab5 Fix the build so that it works again with SQLITE_OMIT_SUBQUERY.
FossilOrigin-Name: bb0d9281588b8cc24bf2f1f10d0c56277004226adaa2ce5037782503b283b45d
2017-05-15 15:12:24 +00:00
drh 96a27f4cbb Improvements to the omittest.tcl script.
FossilOrigin-Name: 0f05d7e93a73bbeac0a09bbd614287507355a7d75fc7b98729bcf7607fc8e125
2017-05-15 15:05:48 +00:00
mistachkin c8d3e836ca Make sure the 'sqlite3changegroup_*' functions are included in the SQLITE_APICALL handling.
FossilOrigin-Name: a123cb93307a6c48bd711d6af9828c87a1365e023f6fe4ca6eae264c8ec5e0c0
2017-05-12 14:05:11 +00:00
dan ee3333b202 Add another test case for the new authorizer functionality.
FossilOrigin-Name: 339df63f4064f3b9c8d4e8b82e72d00b49d9406bc350b14809a4caf7ddc4b736
2017-05-11 19:09:19 +00:00
drh 9715f0e544 Enhance the json_extract() function to reuse parses of the same JSON when
the function appears multiple times in the same query.

FossilOrigin-Name: 3ba9e7ab79e32090a71c7aa152da9bd5951940ae5e2cf433bceadeb6bfca193f
2017-05-11 18:42:19 +00:00
dan 6b4fbabd6a Do not save the state of an fts5 merge operation mid-way through an input
term, even if no previous entry for that term has caused any output. Doing so
may corrupt the FTS index.

FossilOrigin-Name: 9a2de4f05fabf7e725666fb8824ae1adad56834d7ae4f2e118375bb6f9c0ae77
2017-05-11 18:14:06 +00:00
drh 3fb153cb29 Cache the JSON parse used by json_extract().
FossilOrigin-Name: 44ca6c2c4639f3c50ae9233ee299ff0fc4566462c31f28d8676f8de7ffdcd7f0
2017-05-11 16:49:59 +00:00
drh f7fa4e71f4 Negative N values in sqlite3_get_auxdata() and sqlite3_set_auxdata() can be
used to access an auxiliary data cache over all functions in a single prepared 
statement.

FossilOrigin-Name: ff5306752e83e760255a10f20168c0f090929a4fee2a5f720dfab36f0ee72fae
2017-05-11 15:20:18 +00:00
drh 9418921c59 New requirements marks and documentation for the authorizer.
FossilOrigin-Name: 3980ea0911b3ad3f86d7a7bdc6503f233315c274f473e18831e13eda2c238eeb
2017-05-11 13:43:57 +00:00
drh ee92eb80db Improvements to the sqlite3_set_authorizer() documentation.
FossilOrigin-Name: 47629b1911e52445aad8ea969137bddf0019c55b4a4f0de8e77decb6a434c8a2
2017-05-11 12:27:21 +00:00
drh 2336c935af Change the SQLITE_READ authorization call for unreferenced tables to use
an empty string for the column name, as this is less likely to impact legacy
authorization callbacks that assume column names are always non-NULL.

FossilOrigin-Name: 4139953ab528f20fa346409810edcb22adb6c1edc9d22f40b1b077ef842a2441
2017-05-11 12:05:23 +00:00
drh e694139788 Rename fields of the internal AuxData object to make them unique and easier
to search for.

FossilOrigin-Name: 2be9850cef6492e168243807c34af72119ffbe414027a12c4eda6c421b5b950d
2017-05-10 19:42:52 +00:00
drh 0d236a8bb0 Improved documentation for the SQLITE_READ authorizer callback. No code changes.
FossilOrigin-Name: 92c5ea7047323d10f762877c5f56d20a3e609e8b55efcfe4880ef3048821ac1f
2017-05-10 16:33:48 +00:00
drh 701caf1eb1 Invoke the SQLITE_READ authorizer callback with a NULL column name for any
table referenced by a query but from when no columns are extracted.

FossilOrigin-Name: 92ab1f7257d2866c69eaaf4cf85990677b911ef425e9c5a36a96978cccfb551c
2017-05-10 16:12:00 +00:00
dan 7b458519f2 Fix a couple of test scripts so that they work with
-DSQLITE_DISABLE_FTS4_DEFERRED builds.

FossilOrigin-Name: 30018d31068f3182d713a6cf09753b27b16a6f912d39a5e6c1363da83bec3125
2017-05-10 13:36:04 +00:00
drh e4eb0497d8 Avoid unnecessary codec operations on in-memory subjournals.
FossilOrigin-Name: 199b2a84992823b4687588a5ba20bec9c42579887068ac21caf08df3895f41ed
2017-05-10 12:58:34 +00:00
drh 614c6a09f7 Do not invoke codec macros for in-memory subjournals.
FossilOrigin-Name: d2bb0066f7c8413ef9992e6b07641cdf40ad260778074bd83cc22dcaba87860b
2017-05-10 12:49:50 +00:00
dan 2617c9bdd8 Do not invoke codec macros when reading or writing an in-memory sub-journal.
FossilOrigin-Name: 2c145ee6c9e7916f022331453384cbe61ee3654c08a1b88467f85235b5bc18c4
2017-05-08 18:29:36 +00:00
drh ffe280596e Fix an obscure assertion fault that can follow an OOM. The problem
was introduced by check-in [a1cf44763277b6c7].

FossilOrigin-Name: 04e7e5650efffdce759b46999beb67c250af6cf394a7779ab861f210a84c134d
2017-05-06 18:09:36 +00:00
drh f8a2e8c2d2 Fix requirements marks and harmless compiler warnings.
FossilOrigin-Name: 198ff4c01d86d193a54745764d69376cab8e94747a4daa444690f7e1ec87800b
2017-05-06 17:12:52 +00:00
drh 050b124ce2 Fix a collision of the "B0" identifier name between the termios.h header
file and the SHA3 implementation in the shell.

FossilOrigin-Name: b9a58daca80a815e87e541cb5fff9bc8b93f131d223f322c5b83dd5a5f0c0312
2017-05-04 11:13:50 +00:00
drh 30f01249a3 Remove the unused "sqlite3_stack_used" TCL command from the test harness.
FossilOrigin-Name: e24b73820cdca07eee87853fe6dd9f60d76e039eeb4aebef03654db3c7c94f14
2017-05-03 19:36:50 +00:00
drh 313e6fd222 Fix the sqlite3GetInt32() function so that it correctly returns 0 on a
zero-length input string.

FossilOrigin-Name: 05eba9e3a5f9bb2a40af1dacd885e1915fbcd20b9af4cf0eed79ac16dbeba31b
2017-05-03 17:44:28 +00:00
drh ad012d09dc Always enable URI filenames when compiling with SQLITE_HAS_CODEC. Also allow
plaintext keys using the key= query parameter.

FossilOrigin-Name: 31a51b4d168065fa59cc0e52ba798bd87ac82160c675bd531442b65133edb401
2017-05-03 15:54:53 +00:00
drh e780764b4e Fix the fts3EvalAverageDocsize() routine so that it returns errors from
sqlite3_reset() rather than always returning SQLITE_OK.

FossilOrigin-Name: 430f539cbb3f806fb89191e0b759a5f8b49d9e5b6c95fe9a4b55a1aa0875762a
2017-05-02 18:00:31 +00:00
drh 3f4df4c6f3 Reuse the same materialization of a view when that view appears in a query
more than once, such as in a self-join.

FossilOrigin-Name: 9e35c89dbe744312f612e507b51ff9a5bb656def75392d25bc19fc638548cd1e
2017-05-02 17:54:19 +00:00
drh a1f5c0c90b Move terms of the HAVING clause that reference only columns in the GROUP BY
clause over to the WHERE clause, resulting in a faster query plan.

FossilOrigin-Name: 47cbb471d056c8e1834a5ca72491404a3bfb273b5ff7bdd84b98d263938ea874
2017-05-02 16:55:07 +00:00
drh ab314001b8 Additional comments on the sqlite3ExprIsConstantOrGroupBy() routine. No
code changes.

FossilOrigin-Name: 8424492eac506866d2918e5fe03c8f65fef960215d56012a3b52ed42789ed35a
2017-05-02 16:46:41 +00:00
mistachkin 8d5cee166e Fix typo in comment. No changes to code.
FossilOrigin-Name: 6674814afb9e763e7f7060776586e26da28040b3208ce06c8a285dd647e5a53d
2017-05-02 01:30:44 +00:00
drh c478c8daec Remove an unnecessary branch.
FossilOrigin-Name: a33179596f534067a58d68b77160f11ab13272b29f912d7cbe15ea00bbf03ade
2017-05-01 19:53:12 +00:00
dan 4b2667c8b8 Enhance "PRAGMA integrity_check" to detect duplicate rowids within a leaf
page.

FossilOrigin-Name: adcad37b001d255299be716b16003b56ec1fba349ef73261ee0e543186c4f311
2017-05-01 18:24:01 +00:00
dan 874080bbb6 Clear the BTCF_ValidNKey flag set if a cursor is moved by
sqlite3BtreeInsert(). Fix for [f68dc596c4].

FossilOrigin-Name: a6727eef6d757a39ad23e5c8cbe960f5d909e5d37cb4e90bc3bdbb8bf58cd6f8
2017-05-01 18:12:56 +00:00
drh ed71298085 Futher bug fixes to the function that determines when a materialized view
can be reused.

FossilOrigin-Name: c64fe3a1695925693385d313e9ad2a1d8cb37ddaa8cc19920ae0978c91bc4c2c
2017-05-01 17:04:35 +00:00
drh 33543c237b Minor bug fixes and performance enhancement.
FossilOrigin-Name: b2aae559581d05e4e8caaddfbd137cb275d582e82d58872c6f42e462dc859b1c
2017-05-01 16:37:20 +00:00
drh e08e8d6b61 Initial implementation of an optimization that attempts to reuse the same
materialization of a view on a self-join of the view.

FossilOrigin-Name: 478c34b9a8b5127d13024e10307aa832f160b89720c46424dd17555bd36f590d
2017-05-01 15:15:41 +00:00
dan 181a1167dc Add extra tests for the optimization on this branch.
FossilOrigin-Name: 4921cd9520080f9baff70e548f64a56e2204b398b8397a2d318a98c32ec4b00c
2017-05-01 14:09:32 +00:00
dan ab31a8450b Automatically transfer terms from the HAVING clause to the WHERE clause of an
aggregate query in cases where the result of evaluating the term depends only
one one or more of the GROUP BY expressions (and on no other inputs).

FossilOrigin-Name: 5375a3ce56f1d993b13b469fe33ec7679948f53940f62a15ddbaeb8aaa26a22c
2017-04-29 20:53:09 +00:00
drh 7555581fc1 Add a single testcase() macro to the subquery processing logic.
FossilOrigin-Name: 4e1df76e3d85922648e0e1cce73a266c3b1ed4511ace259ec0a01d7693af9e6f
2017-04-29 19:29:49 +00:00
drh bb6783b86f Improvements to opcode documentation in the bytecode engine.
No changes to code.

FossilOrigin-Name: e54c9f8db5b2fa8ea82c6eab7482255431af16901f7992c9667b56a0e50a9f4f
2017-04-29 18:02:49 +00:00
drh bc43995f99 Evaluate WHERE clause terms that reference only the index before evaluating
terms that require the table, and thereby avoid seeking the table row if
index terms are false.
This is called the "push-down" optimization in the MySQL world, we are told.

FossilOrigin-Name: d7bb79ed3a40419d143fbe35c310e51fe7b384a22f082a61ad788671d2d33ee0
2017-04-29 15:27:04 +00:00
drh 6ab3eb5d0e Minor size and performance improvements to the push-down optimization.
FossilOrigin-Name: 91dfb61a1a25763bb0b5c1e353a9d584bc6de3f6eb445f54202ffe7f6fee6e8d
2017-04-29 14:56:55 +00:00
dan 6f654a40e8 Within a loop that uses a non-covering index test, test non-indexed terms that
can be tested without seeking the main table cursor before those that cannot.

FossilOrigin-Name: afe68f0a8060dc5c92cb1fb32a9f22bd36140cd2c0bb5b6cea853e169c5ed444
2017-04-28 19:59:55 +00:00
dan 4b17369579 Add new test file cachespill.test.
FossilOrigin-Name: 2d0b64316d66a362f5891ceb71a1fd8e4607732274b09b0a8472b97eef68ebc2
2017-04-26 17:21:33 +00:00
dan b9e6a73866 Replace <fts5.h> with "fts5.h" in test file fts5_test_tok.c.
FossilOrigin-Name: 63d9ca5c7392e1efe3330689fe750310a952287e843b3242178724e8561fae0e
2017-04-26 14:34:04 +00:00
drh 69bfa55279 Fix a subtle bug in Lemon discovered and reported on the mailing list
by Kelvin Sherlock, who also suggested the correct fix.

FossilOrigin-Name: 304689f8acb53d68e1afed6e6c4332e78132e3d57071b8f94df0d13515b3b3d8
2017-04-26 04:32:17 +00:00
dan a1188d6d93 When building an ephemeral table of integers, do not assume that the table
does not already contain N if the insert cursor points to N-1. Fix for ticket
[61fe9745].

FossilOrigin-Name: 1c1b0862236f564283be08338790d6494e705f1198547a59499e3f8c07f2cd99
2017-04-24 14:16:55 +00:00
drh 0c3233be0b Fix an assertion fault found by OSSFuzz.
FossilOrigin-Name: e39769f442ea86273f8fb7bd2f249b7d760b2fe4bf9ec191ff91def8231f3f35
2017-04-22 00:20:49 +00:00
dan 39c9d3a367 Remove a NEVER macro for a condition that may be true as of [a47efb7c].
Problem reported by OSSFuzz.

FossilOrigin-Name: bdc50d8d127266d02b291f6bfcd4e35eb07994ce23987d6e3921124cd881929a
2017-04-21 17:03:32 +00:00
dan 0619838c55 Fix an FTS5 bug that could cause a prefix-query without a prefix-index on a
database that contains delete-markers to return extra, non-matching, rows.

FossilOrigin-Name: 840042cb2bed2924e2263f21887317f661e5a585c4466c3af25b91ed57a6b49b
2017-04-21 16:04:18 +00:00
dan dc62daca86 Further improvements to coverage of fts3 module.
FossilOrigin-Name: 6b21d0fdebdccfaf63590d9ca9a279c22b8baec07c1a669b9f617f25bd857384
2017-04-19 13:25:45 +00:00
dan a059e99ca8 Further modifications and test cases to improve test coverage of fts3.
FossilOrigin-Name: ea8a0d2ce0cb1ca3f4f18c72fb780d1c26792799acc87e6726f9eaccf2f178bf
2017-04-19 07:33:52 +00:00
dan 0027e98b85 Use sqlite3_table_column_metadata() instead of a SELECT statement to check for
the existence of a %_stat table in fts3. This leads to smaller and easier to
test code.

FossilOrigin-Name: dc2a48020a3c856a8b4cfa2309c290f0508b991e92cc0e4de680d19aae7872fc
2017-04-18 13:50:00 +00:00
drh bff6fe1f40 Improved optimizations of views as the right operand of a LEFT JOIN.
FossilOrigin-Name: 41c27bc0ff1d3135cdb6273ede4595f5bb0c0e1e1d470ea1633cb525674cf431
2017-04-18 11:20:19 +00:00
dan bda00fbdb7 Refactor the fts3ColumnMethod() function so that all branches can be covered.
FossilOrigin-Name: e47fdb493bd76d85f6f05771ee7a0b3ee31b1eb05839a60d2bdb47149ac692d8
2017-04-18 05:49:23 +00:00
drh cfcca02765 Defer checking for null in the comparison operators, since that is an
uncommon case.

FossilOrigin-Name: 5684525613961fed9db6a4d10dbe25521201b24f08e011df3a20ac895316957d
2017-04-17 23:23:17 +00:00
drh e2bc6552fe Do not allow a Mem object to be both NULL and some other type at the same time.
FossilOrigin-Name: e698db1956bb3aba32cd3ec633ec20f5d19b1a10bc68d3772903bca3c87ee158
2017-04-17 20:50:34 +00:00
dan 4bee5599c0 Consolidate two branches of code in the "PRAGMA foreign_key_check"
implementation.

FossilOrigin-Name: 69f51f838abcf57b35e41f7a10fbb45f56536f93825aac865debc3c8315930be
2017-04-17 18:42:33 +00:00
dan 940464b1dc Fix a problem in "PRAGMA foreign_key_check" in handling a WITHOUT ROWID child
table with an INTEGER PRIMARY KEY parent key. Also, if an FK violation is
detected in a WITHOUT ROWID child table, do not try to read and return the
rowid. The third column returned by "PRAGMA foreign_key_check" in this case
(WITHOUT ROWID child table) is now always set to NULL.

FossilOrigin-Name: 690870bd7b2e607b7992c4496c9f08c29eb72a36af002c606fd7aa3dcf94a2a4
2017-04-17 18:02:41 +00:00
dan 624edacf6a Further improvements to test coverage in fts3.
FossilOrigin-Name: 352413eed469802665e7d2c17b7fe6e3a0b0b2209ce45bdc85fd4243cec50ea6
2017-04-17 16:07:25 +00:00
dan ddf4747053 Improve coverage of code in fts3.
FossilOrigin-Name: 1a08a836fa919524216a16faf5212eebc9ad788c9e15463b68b0576dfccd4387
2017-04-17 13:38:09 +00:00
drh 6887e8facd Fix the ".column" output mode in the command-line shell so that it correctly
counts and formats multi-byte UTF characters.

FossilOrigin-Name: f508aff8d1782abdff4d03726ae098607a0ee6cfd2e35b130097ee5043e98960
2017-04-17 13:18:42 +00:00
drh b6d5a43b8a In the showwal command-line tool, for unix builds, if the
auxiliary argument is of
the form "Ntruncate" where "N" is a frame number, then truncate the WAL
file after the N-th frame.

FossilOrigin-Name: 90015df30655d884ecf7ae61e588824696954252dc6b1a5f78cf2de8cb236104
2017-04-16 22:41:49 +00:00
drh b65b3e429a Add the anycollseq.c loadable extension in etc/misc
FossilOrigin-Name: d7b9813cb17615c3d00afd6994a4309d6d48c8e924b6cd813c543e1fa65c7719
2017-04-16 22:08:31 +00:00
drh 147fd88268 In the skip-ahead-distinct optimization, fix a bug in the logic that determines
when to invoke the optimization based on sqlite_stat1 statistics.

FossilOrigin-Name: 89f9e4363aa19f306e55f749c442eae2f8994f6a47c65e645a79b308b450d5e5
2017-04-15 11:53:47 +00:00
drh a2e2d92b21 Fix to the decision logic for when to use the skip-ahead-distinct optimization.
FossilOrigin-Name: e50fd48969f99bc988389c53ff46714603b1d11de12c71b55c00cbee037f073c
2017-04-14 22:41:27 +00:00
drh 06f60d8e87 Remove end-of-line whitespace from lemon.c.
FossilOrigin-Name: d78355c85f49e139f1ac1a660563865350f0e442652b7bc50b684398f81cc602
2017-04-14 19:46:12 +00:00
drh 14d8855b8f Fix some left-over K&amp;R-C constructs in lemon.c. No changes to the core.
FossilOrigin-Name: a53799059d4ece246610b6c877ab7088ded3548cbca7149a03deea8ac0e27e68
2017-04-14 19:44:15 +00:00
drh 31d6fd5507 Add the TK_IF_NULL_ROW opcode to deal with non-NULL result columns in the
result set of a view or subquery on the RHS of a LEFT JOIN that gets flattened.

FossilOrigin-Name: 3a5860d86fadcf924316707918bf283d26c53b1473e5e67f5cff59d18c2a7742
2017-04-14 19:03:10 +00:00
drh 1a17b44231 When doing a DISTINCT query using an index, try to use the index to skip ahead
to the next distinct element, rather than doing a full scan of the index.
(This is the "skip-ahead-distinct" optimization.)

FossilOrigin-Name: f489b5bb6b35665befdd411c2c55df5258e83cba265d8c4427ba22529cf882a4
2017-04-14 17:30:43 +00:00
drh 399c7e21e4 An initial attempt to optimize VIEWs that occur as the right operand of a
LEFT JOIN.  This particular check-in does not work correctly because it does
not deal with the case of columns in the VIEW that return non-NULL even when
all columns in the table of the VIEW are NULL because of the LEFT JOIN.

FossilOrigin-Name: 1838a59c8a1c151bd6fc822b0ffef661803cf0e4704c917e74a04567b81740b9
2017-04-14 17:18:45 +00:00
mistachkin b1ed717f18 Make USE_FULLWARN=1 the default for MSVC and fix harmless compiler warnings.
FossilOrigin-Name: 6bf673767b8e5cedef1acff795cbe524fab8db2525c06424db4e038934a33936
2017-04-14 14:50:34 +00:00
drh d97cda43ab Enhance the sqlite3TreeView() display for Expr objects so that it shows
the iRightJoinTable value for Expr nodes that have the EP_FromJoin property.

FossilOrigin-Name: 5159cb8f2bcfb1f7114786ba23082d2b91a26e3a7ddfae75f8bd362792949d5e
2017-04-14 14:02:14 +00:00
drh 46967de2ec Simplify the interface to the subst() routines that are part of the
query flattener by collecting common parameters into the SubstContext object
and passing around a pointer to that object.

FossilOrigin-Name: e651074be28b2077b8a298f513e2e699ceca99164ace9869ea50873c0637fd2e
2017-04-14 12:39:37 +00:00
drh 7c88bcd473 Remove an incorrect ALWAYS().
FossilOrigin-Name: f956f6ae6b0863c70c4a2b227338d5c332e87f2ec6f3fcdf2233c14c5b78ca2b
2017-04-14 12:27:45 +00:00
drh 571311502d Fix a couple of unreachable branches.
FossilOrigin-Name: 1aa0ea8db7580aff8bed2f78117ed50019e5545cef48cab782f512a2599fd0c5
2017-04-14 00:45:51 +00:00
drh 172806e489 Fix the skip-ahead-distinct optimization so that it works with indexes that
have repeated columns with different collating sequences.

FossilOrigin-Name: ce1e2b88777e00a82c04abe5ba35eec81b5f324e462f099cd00b21054f369688
2017-04-13 21:29:02 +00:00
drh c04ea80f64 Simplification of the skip-ahead-distinct logic. There is still an issue
with handling COLLATE.

FossilOrigin-Name: 57c5173b6376a76013b0611ce9770100bd8c04e80402e35d821d8614709f4795
2017-04-13 19:48:29 +00:00
dan a74f5c2923 New test cases and minor fixes for the optimization on this branch.
FossilOrigin-Name: 70ac9ea1a6cb2f4906f00f1a04f668e5ba5eeed8d4d0fa4be57a9c9eb0683697
2017-04-13 18:33:33 +00:00
dan d0a537100c Reinstate the SQLITE_API qualifier on the sqlite3_delete_database() method in
test_delete.c. Accidentally removed by the previous commit.

FossilOrigin-Name: 59c70108fd179932ccdd860f93e1cd68b77476d3b1af1af00cf6e378c9984862
2017-04-13 15:51:27 +00:00
dan 44ae27ac32 Update the code in test_delete.c to use the "win32" VFS if SQLITE_OS_WIN is
defined.

FossilOrigin-Name: fa9bb7b768027677f7e7d5a196ba5b245dfc8d8986ccd101c8dab671bd15719d
2017-04-13 15:36:47 +00:00
drh 839fa6d814 Only use the skip-ahead-distinct optimization if the index has been analyzed
and we know that a skip-head is likely to skip over at least 11 rows.  The
magic number 11 was determined by experimentation.

FossilOrigin-Name: 0cf16decd534bf2d66620c293f8c8987f356305f2d97f8fd12d260bda1571385
2017-04-13 13:01:59 +00:00
dan 929b695111 Allow a user column name to be used on the LHS of a MATCH operator in FTS5.
FossilOrigin-Name: 6f54ffd151b0eca6f9ef57ac54802584a839cfc7373f10c100fc18c855edcc0a
2017-04-13 09:45:21 +00:00
drh 8489bf5aff Forward port the skip-ahead-distinct branch which was abandoned for some reason
that I do not recall.  This port should have been achived by a merge of trunk
into the previous head of skip-ahead-distinct, but that did not work.  So I had
to manually "rebase" the changes.

FossilOrigin-Name: 132339a1fb0b9664df4d3eefbed6e77ef100ba95a91dcc622da7bd3fcdfcd6af
2017-04-13 01:19:30 +00:00
drh 8671538cad Fix a regression caused by the fix for ticket [6c9b5514077fed34551f98e64c09a1] -
control characters allowed in JSON.

FossilOrigin-Name: 8e7b611863247a3bf46a96ec4b47d24c0ae0d60c9cee968a1cfd1da157e7c9bb
2017-04-13 00:12:32 +00:00
dan 03155f659f Update fts5 to support "<colset> : ( <expr> )" for column filtering, as well
as "<colset> : NEAR(...)" and "<colset> : <phrase>".

FossilOrigin-Name: c847543f8bb1376fef52bca72b4191162a32eb7e6c5f0cd1aa0ab116b3183396
2017-04-12 17:50:12 +00:00
drh 26849e14c2 Improved \n and \r escapes in the ext/misc/dbdump.c utility function. The
implementation of dbdump.c now matches the implementation in the CLI.

FossilOrigin-Name: f2643315bb41a71eebd79f5d671f9163187e299a52ff8a481186f1e8fa7e5262
2017-04-12 17:38:24 +00:00
dan 15e0f3d901 Avoid updating unaffected indexes on a table as part of an UPDATE that
requires foreign key processing in some cases.

FossilOrigin-Name: 7aae5c0f99aa2fda85654242cfc9e23a0f981d9ce4ab17610d619cd208540b3d
2017-04-11 20:48:30 +00:00
dan 940b5eaa5e Avoid updating unaffected indexes on a table as part of an UPDATE that requires
foreign key processing in some cases.

FossilOrigin-Name: 477bea9ed0dd0fa69896bfd16d9b1d22170cbab784e3279ce65c29c47e032f34
2017-04-11 19:58:55 +00:00
drh ff6d50e973 Limit the depth of recursion for valid JSON in the JSON1 extension in order
to avoid using excess stack space in the recursive descent parser.
Fix for ticket [981329adeef51011052667a9].

FossilOrigin-Name: 1f68c184596912d742b50b1ca38252a9e783aacf121619a27b17a7ae9f6df041
2017-04-11 18:55:05 +00:00
drh e97c9ff49a Smaller and faster implementation of exprMightBeIndexed().
FossilOrigin-Name: 76cd611d41465fcec61c21520d55172cb236530f38386b7d4a5544ba87de2353
2017-04-11 18:06:48 +00:00
drh ef90a6b8dd Very slight smaller and faster sqlite3SelectNew()
FossilOrigin-Name: 4143650c4ce32289d2301cdfc69bb10877246420f656bed122886f6803fc956a
2017-04-11 16:44:39 +00:00
drh cbae543a5c Add an ALWAYS() around an unreachable condition in sqlite3VdbeMemGrow().
FossilOrigin-Name: 0f3eb61f44c94234ffc14c3a493a27ec62c0d1e2bb62798f36eafa98ddcdc58e
2017-04-11 12:20:54 +00:00
dan b8d29c2f75 Fix a segfault that could occur if an indexed expression was used in a
comparison operation within the result-set of a SELECT statement.

FossilOrigin-Name: d6bb7c42ff6309ce168ccdcf03b4cdabfccfc9e2a911d254ac7dc4fea4aa2bc1
2017-04-11 11:52:25 +00:00
drh d6e992cb1e When using an index on an expression, try to use the columns of the index
rather than pulling columns from the table and reevaluating the expression.

FossilOrigin-Name: a47efb7c8520a01110ce3b3531ebe1bab6720780d67fba001992c44c5807d332
2017-04-11 01:30:42 +00:00
drh eac5fc0476 Improved comments. Fix a problem when an indexed expression is used in an
ORDER BY clause.

FossilOrigin-Name: c59eaf2b7cd2596733f349fc0fe979f71fd29bd73152a0c57066e0b69d5b7a4a
2017-04-11 01:01:27 +00:00
drh 2f8b37850c Merge changes from trunk.
FossilOrigin-Name: 8978465f335925378d3aa99df6190ce6a1ee6b130205ccc493f2399803844760
2017-04-10 23:42:04 +00:00
drh 0415d826c0 Smaller and faster vdbeFreeOpArray()
FossilOrigin-Name: e052436d9f54b785facd661adc648512356b831c0547aa8f347ebf4bd8ef1254
2017-04-10 20:51:21 +00:00
drh 4c6463cc29 Slightly smaller and faster sqlite3VdbeMemGrow().
FossilOrigin-Name: efd1702ae8da8e0dd3d2ee7bd5a1bd8aeff2b370498e404041fcb406fdaf72e4
2017-04-10 20:27:54 +00:00
drh 2ac702d8c0 Add a new JSON test case to verify that all control characters are escaped
in the json_quote() function.

FossilOrigin-Name: 6ee12221fa252784c897a24ae8cff64dfe6149cbc9020abe14539df33202d892
2017-04-10 12:31:15 +00:00
drh e12e24ded8 Change the JSON extension so that it disallows control characters inside of
strings.  Fix for ticket [6c9b5514077fed34551f98e64c09a10dc2fc8e16].

FossilOrigin-Name: 475d8f82ec61a4ff3e6a7650731230ccecb6cc580d1397d189d0ba479d9bad4d
2017-04-10 12:25:05 +00:00
drh 7a6ea93fd8 Do not expose the name of the internal Mem object in the public interface
defined by sqlite3.h.

FossilOrigin-Name: 19dd753f9e50fee247b1ab141669817c7e88bc3f6d6065dba6c731db9f7a2409
2017-04-09 19:23:55 +00:00
drh 9fa866a8d9 Disallow leading zeros on numeric constants in JSON.
Fix for ticket [b93be8729a895a528e2]

FossilOrigin-Name: 204e72f0080e8f08f99978870bd3cb9d59b068ecffee82192d707c650548b43b
2017-04-08 18:18:22 +00:00
dan a34adaf667 Expand on the comment above OP_Destroy to explain why it throws an error if
there are any active reader VMs.

FossilOrigin-Name: b9a8c2b9bec9f537b2d5aff6659a5748b1f70b53519a1f9dfceb5209154eca8e
2017-04-08 14:11:47 +00:00
dan 5b09d13a58 Have the rtree module close any open blob-handle within the xSavepoint method.
This prevents such an open blob handle from interfering with DROP TABLE
operations.

FossilOrigin-Name: fa4416adc2a9a3a80db1d5befc0b95c3d0fc41affe38f7f2f45cdfae3f1b49eb
2017-04-08 13:52:41 +00:00
drh 13fe138b0a Fix the quoting mechanism for ".dump" so that it is not applied for the
".mode quote" output.

FossilOrigin-Name: 78c1e90305d48917d9423d8e50a7dfd15ec27aa93cb421610062229c7ede13a6
2017-04-08 13:42:55 +00:00
dan be0bc8bb4d Have fts5 close any open blob-handle when a new savepoint is opened. This
ensures that fts5 does not prevent DROP TABLE statements (which always open a
savepoint) from succeeding.

FossilOrigin-Name: a921ada89050ce1d162fd1b0056939573635e2cec7ac0c2a99ae924b3ae593f7
2017-04-08 09:12:20 +00:00
drh 297e2bdb8e Make sure the RTree sqlite3_blob handle is reset prior to renaming the table.
FossilOrigin-Name: 1cdae2db3c54970a1811e597065724578408c84d49d75b8fe25d56281ddc2e94
2017-04-08 01:09:14 +00:00
drh 72507d431b Fix the ".dump" command so that it works with ".headers on". Also fix the
display of ".mode insert" with ".headers on".

FossilOrigin-Name: a6ce57ee3c7f3527554a75cc1dd5ebcd33c944d4dca07b134d103596a2ae5b32
2017-04-08 00:55:13 +00:00
drh 98368eeb2c Use replace() instead of char() to quote newline and return characters in
strings in the output of .dump, to avoid excess expression complexity.

FossilOrigin-Name: 7307352988174a6c2756dbbe200bf62a45fb4cc1da7faa2c6b0f75e229eab703
2017-04-07 20:20:08 +00:00
drh f1824a77b0 Remove an unused token type.
FossilOrigin-Name: 13a422230dcf4a8a80434af97434d57e456dcaa6bf0c41e6859f37ded6fa96ca
2017-04-07 19:52:13 +00:00
drh aca19e19a8 Proof of concept for the ability to use the expression columns in an index
on expressions in place of equivalent expressions in the result set or in
the WHERE clause.  This check-in compiles but is mostly untested.

FossilOrigin-Name: a52ef2ad7c0e14b78b801f16a1f6ea8d8fa9ae5d7d810e18dd24c600b662a312
2017-04-07 19:41:31 +00:00
drh 6193d49cdf Use replace() instead of char() to quote newline and return characters in
strings in the output of .dump, to avoid excess expression complexity.

FossilOrigin-Name: 4c2b572969ea2ed2a925444ecfa356aa877018cbb9c4f57d081ab4b535cd1dd0
2017-04-07 11:45:58 +00:00
dan 54e2efcd2f Fix the ".lint fkey" shell command for cases where the child key is also an
INTEGER PRIMARY KEY.

FossilOrigin-Name: 48826b222c110a90996a84605318ea6b1e502b8c5129f4d561f8350dbdbcd264
2017-04-06 14:56:26 +00:00
dan 50da9382f9 Fix the ".lint fkey" shell tool command so that it works for foreign keys that
refer implicitly to primary key columns with non-BINARY default collation
sequences.

FossilOrigin-Name: 327eff25ba2420267cc8dc49dd3c3aab45f4bf9e060d1ad480e25d016d21f3ba
2017-04-06 12:06:56 +00:00
drh 6948ed5977 Remove a confusing and pointless sentence from the documentation for the
sqlite3_interrupt() interface.

FossilOrigin-Name: c5f1a2b6eb3df879d247a22b3f92f4f74fcf4f0d219450abc420ae6d02481324
2017-04-05 13:44:40 +00:00
drh dbd6a7dc06 Split off sqlite3DbFreeNN() from sqlite3DbFree() and use it in cases where
we know that the argument to be freed is never NULL.

FossilOrigin-Name: ad90e8bb5e47945607c8fb47b6ade8cfc52a9b684805cc40132629be0ecc14cc
2017-04-05 12:39:49 +00:00
drh ac48b751e2 Save a few bytes and a few CPU cycles in sqlite3ExprListDelete() routine.
FossilOrigin-Name: 9e6c939144a129b36bb119120442a4a021e00187783da211315d4bb13acd7c3a
2017-04-05 11:57:56 +00:00
drh f4dd26c5a0 Remove a conditional made unreachable by the previous ExprList enhancement.
FossilOrigin-Name: a1cf44763277b6c745b5b5509ca9129b6c3231608b4d1c8aec2815b64b5a2a07
2017-04-05 11:49:06 +00:00
drh 43606175e2 Combine the ExprList_item objects and the ExprList wrapper into a single
memory allocation, for improved performance and reduced footprint.

FossilOrigin-Name: 2b6560ad88b92820c383bcdc1e30c06f8b081ef7c6d9b1af71d2bb76c83e35cd
2017-04-05 11:32:13 +00:00
drh 32d0eba4c2 Attempt to remove bash-isms from configure.ac. Use -O0 with --enable-debug.
FossilOrigin-Name: 71ed35ccf7c0f6c49118a44cf6621f46b9ea883e4a74d51b8b1ade6d9a95413a
2017-04-05 10:54:14 +00:00
dan 75f9558808 Fix a problem causing "PRAGMA integrity_check" to disable the xfer
optimization for subsequent VACUUM operations on tables with one or more CHECK
constraints. This could result in VACUUM producing slightly larger database
files.

FossilOrigin-Name: e5bb7db51cdfd8124c60329782798cea398733545594dab55cb892b2a08c4d29
2017-04-04 19:58:54 +00:00
drh 628dfe163f Avoid an unnecessary call to sqlite3WhereGetMask() inside of whereShortCut().
FossilOrigin-Name: 5c11f4303f6a33d6358f451244551be63baf9afe5630332e60b349215e20a3af
2017-04-03 14:07:08 +00:00
dan cfb3235752 Do not attempt to run sync2.test with SQLITE_DISABLE_DIRSYNC builds.
FossilOrigin-Name: 658f08ce84b45f057843263961f6c47a322f841764134ec38f35719f0f2042d7
2017-04-03 13:59:22 +00:00
drh 761f691d0e Force a schema load prior to "PRAGMA optimize".
FossilOrigin-Name: 86897c24c0b35ffea8df72d86a099addf67de210c6568aaba22ef92f1a60c3cf
2017-04-03 13:33:51 +00:00
drh 1cc3a36d90 Fix typos in the documentation for OP_Column.
FossilOrigin-Name: 777b43e64ffb2fb80ba7b705c129c133bf9787993a66cde1759dc070b324b4b4
2017-04-03 13:17:31 +00:00
drh caab5f42db Slightly smaller and faster implementation for vdbeSorterCompareInt().
FossilOrigin-Name: 84fa069c5bdfe41d03d03875c9157cc6785150b677c04e40b8916ba5af073dc8
2017-04-03 12:04:39 +00:00
drh 8e633b3ba9 Remove an unnecessary setting of the Mem.enc field for the output of the
OP_Record opcode, for a performance improvement and size reduction.

FossilOrigin-Name: e6e36b288fdf21b7ff7f0bf85d2225b6505f54367b183c302c93c34a4a40b8b5
2017-04-01 20:44:26 +00:00
drh 662c50e067 Minor performance enhancements to the OP_Affinity opcode.
FossilOrigin-Name: c45cd3b947c0f03a688f827fddb4629a986788f0dd98d5ef899f11e68ff1c202
2017-04-01 20:14:01 +00:00
drh 96a7e28df6 Remove an unnecessary clearing of the Vdbe.iCurrentTime value.
FossilOrigin-Name: fcd2acdd6075aa9a7a66ce254eba77485f7b2804127e109c0309173488cd4b87
2017-04-01 19:45:20 +00:00
drh b808d77771 Faster implementation for sqlite3VdbeIntValue() and sqlite3VdbeRealValue().
FossilOrigin-Name: 8698df60c23d4dcc80b58352c14ae80ec238cac496f8a87bd72a96fef61cc63f
2017-04-01 11:59:36 +00:00
drh b6017a44c5 Remove unused fields from the BtCursor object.
FossilOrigin-Name: 1c0d82e0786ed22d07d774b8b166340fad97bcaab6016e395c469bcfcb7c77a3
2017-04-01 11:40:05 +00:00
drh 75e96b3100 Save a 78 bytes of code space and a million CPU cycles in speedtest1 by
storing the cell index for the leaf page in the BtCursor object in its own
field (BtCursor.ix), rather than as an entry in the BtCursor.aiIdx array.

FossilOrigin-Name: 2452f0617d1085689264b5f66681788cfe9e3b1a7b318307c93942b702a443df
2017-04-01 00:20:06 +00:00
drh 53b2459a36 Declare the Lemon-generated parser object as itself. (Duh)
FossilOrigin-Name: c8000e94cca59dabf83d6cb75b40441aaf793d29880582dc4baa17246449b5fe
2017-03-30 17:13:37 +00:00
drh 52105783fd Increase the version number for the next development cycle.
FossilOrigin-Name: 9e550ccc29f317422dae3a4bb89a78b839330825fecd40a01d1a2acc719cef79
2017-03-30 16:51:35 +00:00
drh ecc0f84d08 Ensure that the stack space used to hold the Lemon-generated parser object
is always 8-byte aligned.

FossilOrigin-Name: 1279de0b70cabf39899d92ece8852a780fd800bf3154971537b3427e5bd3ca50
2017-03-30 16:37:05 +00:00
mistachkin b3d3bea31d When compiling with MSVC, disable extra SELECT/WHERE tracing for dynamically built shells.
FossilOrigin-Name: a68919425c528b887e66b588a73a619f0506cb06855350e0ec8f844acf64d8f7
2017-03-29 23:22:18 +00:00
drh 9ca431aef8 Avoid unnecessary blob handle invalidation when changes are made to an
unrelated table.

FossilOrigin-Name: 4a01880b62706c12d6f16f7c2b5c8b0dc67a9a8a0a48c5b42451e1a133e85611
2017-03-29 18:03:50 +00:00
drh 4eb8d7fa89 Slightly smaller and faster implementation of pcache1InitBulk().
FossilOrigin-Name: 06c2b685e15b3ee045a3e7ea018701392771c7664e59a51c9aba87cdefeb37af
2017-03-29 17:06:14 +00:00
dan 9f549d548d Fix some tests in malloc5.test to account for the sqlite3_release_memory()
change in the previous commit.

FossilOrigin-Name: d336858dfcfb9539c43582b1443911df825f9af7146957734bc6f01c8f4d98e3
2017-03-29 16:55:23 +00:00
drh bf96228754 Fix the sqlite3_release_memory() interface so that it works even if
SQLITE_DEFAULT_PCACHE_INITSZ is non-zero.

FossilOrigin-Name: 5d902b7fea3144bf57f02aca87b9795fdcec4774310ade6ef01f37d206c3d74f
2017-03-29 15:18:40 +00:00
drh 0d8d9c9eff Add the new sqlite3_set_last_insert_rowid() interface to the extension
loader thunk.

FossilOrigin-Name: 8469fc0d48d6af0accef9b8a84e08ad2ca32351907510d177b4ca4815c1ea7cb
2017-03-25 19:16:41 +00:00
dan b9cd86a091 Do not run tests for ".dump --preserve-rowids" when testing
SQLITE_OMIT_VIRTUALTABLE builds.

FossilOrigin-Name: 55df410b2cd27dc4c7670bcc1196fa3a0e9e601fc24c42e53d6b0a26ee3e4b45
2017-03-25 18:31:42 +00:00
drh 34ad36bf81 Disable the new --preserve-rowids option on the CLI ".dump" command if
compiled with SQLITE_OMIT_VIRTUALTABLE.

FossilOrigin-Name: bd5bbe4eece9051cc8c27d834d22fb243d34f261641984555d02a27b7038d4f6
2017-03-25 18:15:05 +00:00
drh 3e7d012eb1 Make the default value for SQLITE_DEFAULT_SYNCHRONOUS a simple integer
literal, so that it does not show up goofy in the output of
"PRAGMA compile_options;".

FossilOrigin-Name: 833ab3212addc340ca8004e8d6a06cc5e51bf256f43dc73d87fbe67518a4891b
2017-03-25 18:03:26 +00:00
drh 2fb79e9b04 Fix two harmless compiler warnings.
FossilOrigin-Name: 32be9c3faaafd736da3f49d475dc9279af4e4ba38070b60033d898345080acf0
2017-03-25 12:08:11 +00:00
drh ba7cce317b Fix a harmless compiler warning in the JSON1 extension.
FossilOrigin-Name: c2c3dd84534bb5ea81c974847b74a166c9cba1545fc749ce625929f303bf22e4
2017-03-24 19:45:05 +00:00
drh 18333efd51 Previous check-in was not correct. This is a better fix for the OP_Once
problem of ticket [06796225f59c057cd120f1].

FossilOrigin-Name: 8194dd2814b0b3f8cffbcb16306f55aabf1c1508b9d27fa806f92f0e6ecd7631
2017-03-24 18:38:41 +00:00
drh ab087d4e67 Fix the OP_Once opcode so that it works correctly for recursive triggers.
Ticket [06796225f59c057cd120f1].

FossilOrigin-Name: 2556014514f36808e6d18b25722eae0daeeb8fbb5d18af13a9698ea6c6db1679
2017-03-24 17:59:56 +00:00
drh f9e91972c9 Add the RFC-7396 Appendix A test cases for json_patch().
FossilOrigin-Name: c5441d2df2526723f72610cc14dd243223663979e67ecdd76fe06fcd366f2b29
2017-03-24 13:31:47 +00:00
drh 29c9969871 Fix an error in the new json_patch() routine discovered by Ralf Junker.
FossilOrigin-Name: 9d5350418b2f6113e0b50c57e8a872006f27753067baf08ffdfa7943c0c9a148
2017-03-24 12:35:17 +00:00
drh adc117d40e Add the json_patch() SQL function to the JSON1 extension.
FossilOrigin-Name: 476088482024e411e2549b1697cdaf0124294c79d43f508c71c4eb66906a56fc
2017-03-23 23:44:55 +00:00
drh 37f03dfb1f Change the name of the json_merge_patch() function to just json_patch().
FossilOrigin-Name: 04d4100445a3373986ee962618bc03ec304f6ba2f867c8e9eee415daffb593fc
2017-03-23 20:33:49 +00:00
drh db528529bf Improvement to the amalgamation configure.ac file contributed by
Bob Friesenhahn.

FossilOrigin-Name: bf28a55d8185e370fea39de297c37387f852f43fac0a316e5900e633f99b367f
2017-03-23 19:51:38 +00:00
dan 8fe3e9d882 Do not run test file autoanalyze1.test if OMIT_VIRTUALTABLE is defined.
FossilOrigin-Name: e1d06a573ee56bf6a14e4dc8086d6a4df1464f2914834cf4596a0a406688f608
2017-03-23 17:22:09 +00:00
dan a77edc69ee Remove an invalid assert() statement failing when VACUUMing a database that
contains an index on a column explicitly declared "COLLATE BINARY".

FossilOrigin-Name: 9f2e04d3c3526b5ff60d941aa6d5446f602cab37cb93972937f39eefabd6868d
2017-03-23 17:03:35 +00:00
drh 1fe162fd0c Avoid redundant edits in the json_merge_patch() function.
FossilOrigin-Name: 4a8e6437dd610c5376a07867a73e5a7e2ea90357a018e1788ecce6f4e10bc939
2017-03-23 12:56:44 +00:00
drh 0002d246a9 Fix harmless compiler warnings in the new json_merge_patch() logic.
FossilOrigin-Name: 5d2cf5a2f8afd88d041d89b3936042ce5a43629d23c48738cb2791b24da3e6af
2017-03-23 00:46:15 +00:00
drh bb7aa2d85e Various fixes to the json_merge_patch() function.
FossilOrigin-Name: f49fd2554b0723eb7cf2fd765d655c6820833ee7e5f7d7629d98c27a6fffa1d9
2017-03-23 00:13:52 +00:00
drh f07b249f92 Change the name of the new function to "json_merge_patch()".
FossilOrigin-Name: 53bf70f37bbca319ea35f70849e2a34ae628a504486158fdad5c4bb7431c68e0
2017-03-22 21:45:20 +00:00
drh 633647af75 Initial implementation of the json_mergepatch(A,B) SQL function.
FossilOrigin-Name: a267444039af519f088dd8f8ee33f686cc3071c087677075af2364ebc2587514
2017-03-22 21:24:31 +00:00
drh 701ff6ad2d Fix harmless compiler warnings in the shell.
FossilOrigin-Name: a786829783ef65ef270ca360712364cbd47a540d31ed1547d50808aad698bea7
2017-03-22 12:51:34 +00:00
drh 918938f9c2 New simplified memory initialization for MacOS.
FossilOrigin-Name: 055b36f1c1593bb123f7319a07c476143d71af052b5b8d34afcd0d500f197882
2017-03-21 20:17:24 +00:00
drh 49297c86d2 Fix an incorrect assert in the ANALYZE logic for STAT4 on WITHOUT ROWID
tables.

FossilOrigin-Name: ad741976c8c29bcc94f9ea9ed7deb580bb00c8a81d1a7fba1a4e03849728433d
2017-03-21 18:56:52 +00:00
dan 119fc11eb0 Add short script ext/fts3/tool/fts3cov.sh. To help measure test-coverage of
fts3 source code.

FossilOrigin-Name: ee9588e873ffebcaa177957950cbb14924e154c391ed7f687116065064ff11b0
2017-03-21 17:19:31 +00:00
dan a14b7e02e9 Do not run sync2.test as part of the "inmemory_journal" permutation.
FossilOrigin-Name: 9f680bc7c47f8391adba6ea2b4b2cb6a5a041e22753543d5224da6656c3762fe
2017-03-21 10:45:38 +00:00
drh 174f855306 Add the --native-malloc option to fuzzcheck. Fix ossfuzz.c and fuzzcheck.c
so that they both deallocate the temp_store_directory before closing.

FossilOrigin-Name: 0dd18ec882bb28a87629d6d8dfeb5ea5d82833634b3781a7d14b917272c4dfa0
2017-03-20 22:58:27 +00:00
drh 16f0582c1b Fix the fuzzcheck program so that it can create new databases again.
FossilOrigin-Name: 021e8874a7d1bb94debae3ae04f83056a8573148ffc872cd76a186a2d22d0296
2017-03-20 20:42:21 +00:00
dan 74869e5e52 Avoid passing NULL as the second argument to memcpy() in fts3.
FossilOrigin-Name: 49b93d972de9649abfd6235b65dda1c9d468956671e50704afde6181ffa56dea
2017-03-20 19:35:30 +00:00
dan 6b904f5e01 Avoid a technically undefined right-shift of a signed value in rtree.c.
FossilOrigin-Name: a144875fe44ff3a30bab299d50b7dbec2ee21f8c73e692a71ee1f7c54b5f0c76
2017-03-20 19:26:27 +00:00
dan 920c83f18f Fix some problems in fts3 found by address-sanitizer.
FossilOrigin-Name: 16a8e84fa7f67a467f824bdd7f72cbd6a6e95dab8cc7aa1e0e751720b98f3e31
2017-03-20 18:53:32 +00:00
drh 5f42995a0a Avoid the possibility of signed integer overflow with oversized precisions
in %d conversions in the printf() implementation.

FossilOrigin-Name: ef3a7c877a7549b351aafd983cfa96c863eb2641b6218bdd5cb563f659f879d8
2017-03-20 16:34:18 +00:00
dan 5b3a3b359a Do not run sync2.test as part of the "journaltest" permutation, as it uses
"PRAGMA synchronous = off".

FossilOrigin-Name: 285005a9bcb210bb2a9aa9fed6a19d4b78641a6e7622d469bd0d2a365b2c0735
2017-03-20 16:06:48 +00:00
drh 7adbcffcb9 Ensure that a "--" prefix is added to sqlite3_trace_v2() output for nested
SQL statements.

FossilOrigin-Name: 673a7b67c4828acaea3baebea500ef1f8ae763588b0d9c9f2ad6ed5ceb3cfee2
2017-03-20 15:29:28 +00:00
dan 154cc74601 Only run sync2.test on unix, as it depends on instrumentation in os_unix.c.
FossilOrigin-Name: ecb9321e18dd72ea18d197c61c4d69500e9c4282c0eac67822cb40b2710a2815
2017-03-20 15:11:40 +00:00
drh 978896e0eb Fix the check.test script so that it works on Windows.
FossilOrigin-Name: 8822eb5d790bf8d4302c3f2dc05ab672193b309fb11771c4b3eea8a77f37e299
2017-03-20 14:44:07 +00:00
drh d3d52ef147 Documentation fix: SQLITE_SOURCE_ID is a now a SHA3-256 hash.
FossilOrigin-Name: 2aa22509e7c8a1f09b16e4544c95d0b77503daed1f83106ccc18dee8bd9487a4
2017-03-20 13:03:39 +00:00
drh a80e160634 Only do the specialized MacOS single-core zone_malloc initialization if
compiled with the SQLITE_MIGHT_BE_SINGLE_CORE flag.  This avoids a (harmless)
warning about OSAtomicCompareAndSwapPtrBarrier() being deprecated.

FossilOrigin-Name: 4e6a03d9e12b120d15946b025f97a97697cb8e8af543c238ffda220c9e3f28f4
2017-03-18 13:59:46 +00:00
drh 46acfc2b47 Fix an error in the newly revised documentation for SQLITE_LIMIT_VDBE_OP.
No changes to code.

FossilOrigin-Name: f4cf8635e6fec6f04075cc067aaa71abc4f71739068e0ad2c44609dcb8691009
2017-03-17 23:08:11 +00:00
drh 544cab7651 Set a reasonable limit on the number of opcodes in a prepared statement
for ossfuzz.c.  This should prevent timeouts in OSS-Fuzz when it generates
totally unreasonable queries.

FossilOrigin-Name: f74899ed2c78019abb406432a74dcd42a0ff8d9add005f8544dc4a8905f232eb
2017-03-17 22:51:28 +00:00
drh 1cb0266dcb Begin enforcing the SQLITE_LIMIT_VDBE_OP. The documentation warned that this
day might come.

FossilOrigin-Name: ef5914617088cbf89bfae88f63ea959a07f02dff387ddc2b43948ad99c6a97b8
2017-03-17 22:50:16 +00:00
drh f53524b4f7 Add the --show-errors and --show-max-delay command-line options to the
ossshell test program.

FossilOrigin-Name: 626bdca98e0cd78ae873d97e75bb7d544ca18759c9f1e67f4adf03daca7fe5bf
2017-03-17 14:59:40 +00:00
drh 59d705ab80 Fix the Makefile.in so that it builds the ossshell test program correctly.
FossilOrigin-Name: 36f5602ec9fb8e404c5250e18b1db877ac7bee643918b94afd51808134ea7900
2017-03-17 14:15:06 +00:00
dan 1f9144ed41 Fix a buffer overread in debugging routine sqlite3VdbeMemPrettyPrint().
Problem discovered by OSS-Fuzz.

FossilOrigin-Name: f336fba7d7d41b91a5000d01dddf785821fa79ea31dbd8d1f769d55f7e871896
2017-03-17 13:59:06 +00:00
drh a3b2da9889 Fix a problem in the enhanced PRAGMA integrity_check where it verifies
CHECK constraints: Do not be confused by the reuse of the Table.pCheck field
by VIEWs with named columns.  Problem discovered by OSS-Fuzz.

FossilOrigin-Name: 019dd3d5ba4a596c4ec3b5f0de8402c72196af0faca9138edbc0f1f4957cae60
2017-03-17 03:21:14 +00:00
dan af3332989f If the user has not set it explicitly, set the "PRAGMA synchronous" setting to
SQLITE_DEFAULT_SYNCHRONOUS when a database connection changes from wal to
rollback journal mode.

FossilOrigin-Name: 5c604479fda06714500959e121c719d1b6c8e54d1658eb9f560a4af95b7c5829
2017-03-16 18:55:21 +00:00
dan fc8f4b658c Fix a typo causing the build to fail if SQLITE_DEFAULT_SYNCHRONOUS==SQLITE_DEFAULT_WAL_SYNCHRONOUS.
FossilOrigin-Name: df39adeaa4d73a3d4ec831843b8ec7fd449f8b2137bdc7d7c320958d00e98db6
2017-03-16 18:54:42 +00:00
dan f5da7dbb07 If the user has not set it explicitly, set the "PRAGMA synchronous" setting to
SQLITE_DEFAULT_SYNCHRONOUS when a database connection changes from wal to
rollback journal mode.

FossilOrigin-Name: 78030c0f52aa39fb2ab32c75c56e6bcefe6382b8df28b1909e3c911e42dbeca3
2017-03-16 18:14:39 +00:00
drh b30574bcae Simplified OOM detection in the instr() SQL function.
FossilOrigin-Name: 6d85eb5736781b43aa674d9544c7523b849b4e634f371702f8764b33e22e1e9f
2017-03-16 14:28:52 +00:00
drh 85c2dc0ae6 Fix an uninitialized variable reference in the text generator
for "PRAGMA vdbe_trace=ON" output.
Problem discovered by OSS-Fuzz.

FossilOrigin-Name: e3d487162d1596ce125644f754ed9531ef4412f31f6837c3e31b7542b90602fe
2017-03-16 13:30:58 +00:00
drh 970ea372c4 Fix a problem in the "showdb" utility that prevents it from correctly
decoding cells with no content beyond the record header.

FossilOrigin-Name: eb7680a1c047b2a33d6a0c9733fafaee11272377c627af10bbd541b6b7ed952b
2017-03-16 13:14:03 +00:00
dan 116b56a2cc Fix a crash that could follow an OOM condition in the instr() SQL function.
FossilOrigin-Name: 6e59e903e4e956617bddef0b94e5cae02d724ac8145940b57ab5b0f628759736
2017-03-16 12:11:07 +00:00
drh 6f25936c9c Updates to README files under the ext/ hierarchy. No changes to code.
FossilOrigin-Name: 029bc5d224bcbdcca2307710539b133c39e2a27b971c28b294a1f517b80cb418
2017-03-15 20:27:46 +00:00
drh 6295ff1d3e Add the "Obtaining The Code" subsection in the top-level README.md file.
No changes to code.

FossilOrigin-Name: b1b1aa8b69aa80c83aec3380565f0b4ec0b6a6e033537becee098872da362e9a
2017-03-15 19:11:29 +00:00
drh a5d75ba9ea Mention the ".selftest" command in the ".help" output of the CLI.
FossilOrigin-Name: 37f766dbad1f99ff86dd1b771bf443036e928e5b4d8abe55bbe4acf3362c7be2
2017-03-15 14:20:34 +00:00
drh 7553c82894 Make "PRAGMA temp.synchronous=N" a no-op to ensure that the TEMP schema
always has synchronous=OFF.  This fixes an issue discovered by OSS-Fuzz.

FossilOrigin-Name: bcf6bb08d8b07d3c4567bcd367f8d4011ce8baad28c25d4e8870bdf347dd48bd
2017-03-15 14:04:03 +00:00
drh 9c4527e57d Improved header comment on the shathree.c extension. No changes to code.
FossilOrigin-Name: 84f2e3d5f611b35de16684956d842df6c93d858e8187f17eb27452758a752c57
2017-03-15 13:47:39 +00:00
mistachkin 943d825b54 Updates to the MSVC makefiles.
FossilOrigin-Name: 1e4b9e7c9ee32b985c440bf3eb65bbdf28055566e66b6feba438143a3ad8dd07
2017-03-14 15:27:56 +00:00
drh 29df8d1fc2 Add the dbdump.c extension that implements functionality similar to the
".dump" command of the CLI, though in a separate library.

FossilOrigin-Name: 2b9980a292d7f0d995b77d9b3fb217bb2206f6d452e036ac502fa06561af4c12
2017-03-13 22:10:05 +00:00
drh 4b34eb3bf5 Add dbdump.exe to the MSVC makefile.
FossilOrigin-Name: 59241a50ad1d6fe9f5804b73b3467dcd407d359ccbdcb9d72f2f6d94c90c1f40
2017-03-13 22:02:01 +00:00
drh d3bc75fb94 Fixes to the dump logic. All appears to be working in preliminary tests.
FossilOrigin-Name: 007b11e301d444361c8eff8734dc2fb968a64343c177ff30cec74a0cf76099e8
2017-03-13 21:49:48 +00:00
drh 473af4fe03 First draft of the complete dbdump.c library.
FossilOrigin-Name: 84ea4fcc52d0af02648c52989c2e69f4961071e1620382555ec59a39161a7a7d
2017-03-13 21:26:41 +00:00
drh 688633cb9e Infrastructure for an extension C-library to implement sqlite3_db_dump() and
a corresponding "dbdump" command-line utility - both of which do the same
work as the ".dump" command of the CLI.

FossilOrigin-Name: 74c5ace498f72d7f5495203678bedd0bc540211131a4e4db7b62115d5322a288
2017-03-13 19:26:34 +00:00
drh d3bb79bd0f In the output of the ".dump" command in the CLI, quote newline and
carriage-return characters using the char() function, so that they do not
get eaten by end-of-line processing logic in the OS or in other command-line
utilities and/or libraries.

FossilOrigin-Name: 68f6dc7af1013f296a11db14c007cc13cc3fe56832848bfed835ed8f74dcc676
2017-03-13 18:24:06 +00:00
drh 510b7ff536 Fix the sqlite3TreeViewSelect() routine so that it works with a null pointer
to the Select object.

FossilOrigin-Name: 9034cf7efc603864f51e931c7dc4fbbc2d01904e951e78c88d4d80f9936250e8
2017-03-13 17:37:13 +00:00
dan c3becddb75 Fix a segfault that could occur following an OOM error in the
flattenSubquery() routine.

FossilOrigin-Name: c6dda3f752c184f441624c9993e77d5031063d79a0e177b6e25a9886514a742e
2017-03-13 14:30:40 +00:00
drh bbc0177460 In the OSSFuzz test module, invoke the progress handler much more frequently
so that timeouts are detected punctually even if the test script is running
opcodes that individually take a long time (for example, an OP_Function opcode
that invokes "randomblob(1.5e6)").

FossilOrigin-Name: f3b6959c04c4ef7b8ff03582b867012a869d52b4a90a0d7ab079ee4c21be5464
2017-03-13 13:45:29 +00:00
drh ba28b5ab0a Fix a possible NULL pointer dereference in following an OOM error
in sqlite3ExprIsInteger(). Problem found by OSS-Fuzz.

FossilOrigin-Name: 5ec655e8e817c1ed3bfb2e576745a7cef441494ad7baf1bf9f8895e98ac19c5a
2017-03-12 20:28:44 +00:00
drh 1ed1e616f7 Remove an obsolete assert() in the IN operator code generation.
FossilOrigin-Name: 18bf6aca2ac86478fd12d5020f3a41cfd2bd2dc3defe2298411f79ad308a6f73
2017-03-12 19:39:00 +00:00
drh 202230ef5c Make sure the translateColumnToCopy() routine in the query planner does not
try to access an array that failed to be fully allocated due to a prior OOM.
This fixes an issue discovered by OSSFuzz.

FossilOrigin-Name: 3299a26160c239255608d1e2b15a221e28b18a3d
2017-03-11 13:02:59 +00:00
drh 708b22b1e3 The output of the ".dump" command in the CLI quotes newline and carriage-return
characters using "char(10)" and "char(13)".

FossilOrigin-Name: 8b2954dd8376e2de985cf5dedeb6eec32c430505
2017-03-11 01:56:41 +00:00
drh 891d6b4e9e Increase the number of significant digits in floating point literals on
".dump" output from the shell.

FossilOrigin-Name: 7359fcacaadc349f520536311dcd1d0b5cea7673
2017-03-11 00:46:57 +00:00
dan 1ba30db8bd Remove the rbu_round_trip.tcl script. It is now part of project "test-dbs".
FossilOrigin-Name: b5bf2957677e8f2acd7426b302229a966de08fd9
2017-03-10 18:36:34 +00:00
drh a6bf20b587 Fix an error in the SQLITE_MAX_MEMORY implementation resulting from a bad
merge.  Update the OSSFuzz interface so that it times out after running
the byte-code engine for 10 seconds.

FossilOrigin-Name: f8560c60d10c0365b33342ab05b5a953987b0471
2017-03-10 17:03:11 +00:00
drh 1e45c7db56 Add the -DSQLITE_MAX_MEMORY=N compile-time option. The default is no limit.
FossilOrigin-Name: eabd4ef498a0f0d97d65e321c4d06ab90523ed61
2017-03-10 16:22:40 +00:00
drh e43d6aee45 Add the SQLITE_MAX_MEMORY compile-time option that provides a hard upper bound
on the amount of memory that SQLite will use, per process.

FossilOrigin-Name: 77dfe2abdae88dea81217f352d87e5ba2c822715
2017-03-10 15:55:54 +00:00
drh a2df53bd61 Enhance the ".stats" dot-command in the CLI to use sqlite3_status64() instead
of sqlite3_status().

FossilOrigin-Name: 118f5c0564fef70cbd06fc0d9dbb2baec162cc39
2017-03-10 14:36:10 +00:00
drh f157d10f9f Improvements to ".selftest --init". Tests are number in increments of 10
starting with 100.  The tests are generated inside a SAVEPOINT.  Errors are
reported during test generation.  Tests can be appended to existing tests.
Add a test case to verify the schema.

FossilOrigin-Name: b044b152aac2ec606750940ea816ad4a4aef8eb6
2017-03-10 01:05:38 +00:00
drh fb546afb4d Remove the test/dbselftest.c program. In its place, add the ".selftest"
command to the CLI.  The new CLI version is .selftest is slightly different
in that it uses SHA3 hashing instead of SHA1, so the new is subtly 
incompatible with the old.

FossilOrigin-Name: f4fcd46f08ba59d2a3e772cad98383129f648386
2017-03-09 22:00:33 +00:00
drh f8563c00b2 Fix the ".dump" command to correctly extract tail data from corrupt
WITHOUT ROWID tables.

FossilOrigin-Name: 6c627e50622d8bcd25ec7d5503f3fafd725673a8
2017-03-09 18:13:52 +00:00
drh e6e1d124db Begin moving separate boolean variables in the ShellState object of the CLI
into the shellFlgs bitmask.

FossilOrigin-Name: 50eec5d9aa38fab1a85d788356ffdaf6c35d9ece
2017-03-09 13:50:49 +00:00
drh f80d4ff59f Make sure the database connection is open prior to running the ".sha3sum"
command.

FossilOrigin-Name: 2ea300fb8f7c497f3f092dc91f4305d8431c27d9
2017-03-08 18:06:20 +00:00
drh 3ee83efec1 In the ".sha3sum" command, if there is a LIKE pattern, show the hashes for
each table separately.  Without a LIKE pattern, show a single hash over the
entire database.

FossilOrigin-Name: 30f878832820ce7ccc4627c4f0f98fbe82f8b0f6
2017-03-08 17:56:54 +00:00
drh 1554bc8a2e Add the ".sha3sum" command to the CLI - used to compute a cryptographic hash
of the <em>content</em> of a database file or of individual tables with in
that file.

FossilOrigin-Name: fc663799075a22b0a61a6a114116bb2d1b96d4ab
2017-03-08 16:10:34 +00:00
drh 4146b4e34a Improved comments explaining the sha3_query() format. Fix a performance #ifdef
error in the sha3 implementation.

FossilOrigin-Name: 54ef7abd7f5b16f4b29c9519d283e142c9340fbf
2017-03-08 15:03:12 +00:00
drh acc83d2e4f Add the shathree.c extension for implementing SHA3() and SHA3_QUERY() SQL
functions.

FossilOrigin-Name: f7ca9193ddafd3676406bdfeb1b7d21182c2a3c1
2017-03-08 13:50:40 +00:00
drh f42d318002 In the CLI, avoid unnecessary identifier quoting in the ".dump" output.
Also add new ".dump" test cases.

FossilOrigin-Name: de65f907610a59e64cbf2214789c11f7117a86a6
2017-03-08 12:25:18 +00:00
drh e611f14471 Add the --preserve-rowids option to the ".dump" command in the CLI.
FossilOrigin-Name: c60aee24714a47ce12ee2a4dcefb9f55211d3761
2017-03-08 11:44:00 +00:00
dan 5cc95ebf37 Add test script ext/rbu/rbu_round_trip.tcl. Uses "dbselftest" to test that
"rbu" and "sqldiff" work together.

FossilOrigin-Name: 961e79da73b4550b3e5b0f9a617133a76485db67
2017-03-07 20:03:25 +00:00
drh 9b38d6660f Performance optimization in the tokenizer/parser loop.
FossilOrigin-Name: 2cb71583d631cd417acbeebbb4ee950573a9deef
2017-03-07 14:38:52 +00:00
drh 567bd44917 Minor comment typo fixes. No changes to code.
FossilOrigin-Name: 01cd9fb176cde30658233e36aad44e4a5519612e
2017-03-07 12:18:23 +00:00
drh a92b81f487 More size and speed improvements in the expression name resolver.
FossilOrigin-Name: e0a3d39f51a50420bae97e2bc9a8c01a5b0d3db8
2017-03-07 03:40:48 +00:00
drh 3cf48e3e89 Small size reduction and performance increase in the name resolver routine
for expressions.

FossilOrigin-Name: 1a3554e1d71b666325ff377fae5329d79ce5c05f
2017-03-07 03:25:52 +00:00
drh 59dbe3a5ef Make the default MASK argument for "PRAGMA optimize" be 0xfffe, to allow for
future expansion of up to 14 new default-on optimizations.

FossilOrigin-Name: 73019a8bba29fd07f73559cd00d5346fa822b439
2017-03-06 23:51:16 +00:00
drh e1f1c0802c Fix a typo in a comment. No changes to code.
FossilOrigin-Name: ec529bf11b16c801ea438e57d208ff7e4cedf1f9
2017-03-06 20:44:13 +00:00
drh cc98b1fc89 Add an initial implementation of the "PRAGMA optimize" command.
FossilOrigin-Name: 137aeb2b160888100bc1e871b00860149e5f6196
2017-03-06 17:33:58 +00:00
drh 063d57039e Merge updates from trunk.
FossilOrigin-Name: 5f7fc79aa06ca9b79664c50c3c277c98a74ff9a0
2017-03-06 11:39:34 +00:00
drh 2996796dcf If a reprepare is needed after binding to a variable with a number larger
than 32, set only the high-order bit of the Vdbe.expmask rather than setting
all bits.  This could potentially result in fewer false-positive reprepares.

FossilOrigin-Name: 45797feefe90cb7da53256b0c42fdaa1221d0a27
2017-03-03 21:51:40 +00:00
drh f3f883fcd7 Remove an redundant function call from the date/time function implementation.
FossilOrigin-Name: 4a04c48a311b19ba5e566877dc5baff543c41aba
2017-03-03 21:36:26 +00:00
drh 35a0925a23 Fix another corner-case for the 'start of ...' modifier in the date/time
functions.  Related to ticket [6097cb92745327a1].

FossilOrigin-Name: 8831f4393dda42b3434e7767968caea84bbca2af
2017-03-03 20:43:43 +00:00
dan 30741eb0d3 Fix a case introduced by [4cd2a967] where a corrupt database could cause a buffer overwrite.
FossilOrigin-Name: 5d0455fece514552ad7f283d56526f53d7c688bd
2017-03-03 20:02:53 +00:00
dan 0e9b43ff85 Before beginning an incremental checkpoint in RBU, sync the directory
containing the target database file. This ensures that the new directory entry
created by renaming the *-oal file to *-wal is synced to disk.

FossilOrigin-Name: 915a9a28783fbb2f4c0794eb4264ce8c0b9d42f7
2017-03-03 16:51:46 +00:00
drh 9715f7f033 Fix a bug in the 'start of ...' date/time modifiers when they follow a
julian day number.  Fix for ticket [6097cb92745327a1].

FossilOrigin-Name: 081dbcfb6d82528cefecb36c4491fa6e1a790b17
2017-03-02 23:40:21 +00:00
dan 1d62a66230 Fix another RBU case similar to the previous. This one for systems where the
sector-size is larger than the page-size.

FossilOrigin-Name: 4012bb3aa91927156ba149caa4e5c622b0729d79
2017-03-02 16:56:48 +00:00
dan cb1b0a693a When saving the state of an RBU update in the incremental-checkpoint phase,
sync the database file. Otherwise, if a power failure occurs and the RBU
update resumed following system recovery, the database may become corrupt.

FossilOrigin-Name: edee6a80e1cc7e6a2b8c3c7f76dd794fc8ab9a72
2017-03-02 14:51:47 +00:00
drh 1cfaf8eafb Add an optional bitmask of allowed optimizations on the "PRAGMA optimize"
command.  The 0x01 bit is Debug Mode.

FossilOrigin-Name: a35388eef4096c1856b025dbd90143409d4a72d3
2017-03-02 14:17:21 +00:00
drh 8d990b34db Merge recent trunk enhancements.
FossilOrigin-Name: c60cdb47612c05c252613e50a8ac10635469fdfe
2017-03-02 13:22:04 +00:00
drh 76adb23980 Make sure the Vdbe.expmask value is set correctly in sqlite3VdbeSwap().
This fixes a problem introduced by [a8fd7052].

FossilOrigin-Name: 29f54b899e5cf22ece98ab41c39c41d75a4b228d
2017-03-02 13:13:30 +00:00
dan 2147221c36 Fix a use-after-free problem in the shell tool code that could occur if an SQL
statement were executed after an ".open" command with invalid options.

FossilOrigin-Name: ac760db0727209db0a816e112ea5f47e54d54dac
2017-03-01 11:30:27 +00:00
mistachkin 6e5688d375 Make PATH handling more robust in the batch tools for MSVC.
FossilOrigin-Name: 23a8917e848a999533bc66467f7cb2f4f3d45bc1
2017-02-27 17:16:27 +00:00
dan 81415257ec Improve performance of fts5 writes by writing the "averages" record once at
the end of each transaction instead of every time the table is updated.

FossilOrigin-Name: 2b210d691462b463796e7948399133c296e89ebf
2017-02-27 17:06:56 +00:00
dan 8a89d834d6 Add an sqlite3_set_last_insert_rowid() method. Use it to work around fts4 and
fts5 modifying the last-insert-rowid unintuitively from within commit
processing.

FossilOrigin-Name: 952a3906b30a818e4574bb85f57150577d04f74e
2017-02-27 16:15:29 +00:00
dan 9c58b63c18 Add an sqlite3_set_last_insert_rowid() method. Use it to work around fts4 and
fts5 modifying the last-insert-rowid unintuitively from within commit
processing.

FossilOrigin-Name: fe41bb5632a5d438acfd682809f1bd12315b970a
2017-02-27 14:52:48 +00:00
dan 2efd3488ba Remove references to special handling in virtual table methods from the
documentation for sqlite3_last_insert_rowid().

FossilOrigin-Name: 660f9569d76e4ff1f5bd4f37f640e6a4fc2cf87d
2017-02-27 12:23:52 +00:00
dan 70cdf38232 Add an 'extern "C"' block to header file sqlite3userauth.h.
FossilOrigin-Name: ffd61fb449a510b2fc90caf86b266733051cc365
2017-02-25 20:57:46 +00:00
dan 5328181db1 Optimize defragmentPage() in the case where the page contains either one or
two free-blocks and a small number of fragmented bytes.

FossilOrigin-Name: 4cd2a9672c59ea4b3b4cf3d2f139af3c18a8e833
2017-02-25 17:47:31 +00:00
dan 3b2ede1f03 Tweak the code on this branch to detect b-tree page corruption in the same cases as the trunk.
FossilOrigin-Name: f9863b39d96dce6cb5e49a5f3a445ff3d897a951
2017-02-25 16:24:02 +00:00
dan e6d065a81e Optimize defragmentPage() in the case where the page contains either one or
two free-blocks and a small number of fragmented bytes.

FossilOrigin-Name: 202b1c0276aec6b8da64d3277de1ad91c9d62d80
2017-02-24 19:58:22 +00:00
dan bda4cb876c Save a few bytes and a few cycles by setting Vdbe.expmask to zero for
statements prepared using legacy interface sqlite3_prepare().

FossilOrigin-Name: a8fd705258643863493476f8b42ee981608a339f
2017-02-23 16:30:16 +00:00
drh 555227bec0 Add two NEVER() operators in the sqlite3BtreeRowCountEst() routine.
FossilOrigin-Name: 7a959f6d1ea038988cdb4c02d6f37abaec2580a0
2017-02-23 02:15:33 +00:00
drh bce0414844 Do a single OP_Expire at the very end of "PRAGMA optimize", and omit the
OP_Expire on ANALYZE commands invoked by the pragma.

FossilOrigin-Name: 188300a337c87b7ee0dd1f4b9a4f1bd80e70cca4
2017-02-23 00:58:36 +00:00
drh 2ead47cb49 Change the name of the analyze_as_needed pragma to "optimize". Enhance the
comment (which will become documentation, assuming these changes land on trunk)
to explain that the optimize pragma is likely to be enhanced in various ways
in future releases and that applications should not depend upon the current
behavior.

FossilOrigin-Name: 9fced545a6f80c55d6dc4a6106cb2d3569566b3e
2017-02-22 20:24:10 +00:00
drh 114ce7a4b1 Merge integrity_check and other improvements from trunk.
FossilOrigin-Name: fe073905081b421405ca425ca03c5b8b0ff5f2c8
2017-02-22 19:49:54 +00:00
dan 24d772cc27 Move a branch condition in analyze.c inside an #ifdef SQLITE_ENABLE_STAT4 block.
FossilOrigin-Name: d6afd98de3ee8b714dfd6477ead955096f623972
2017-02-22 19:41:16 +00:00
dan bd1d270ec9 Improve the performance of ANALYZE when SQLITE_ENABLE_STAT4 is defined.
FossilOrigin-Name: 737a82444065752785c643b1d29ca097c828effb
2017-02-22 19:27:51 +00:00
drh 6bd166b81e Improvements to PRAGMA integrity_check.
Verify CHECK constraints.
Verify NOT NULL constraints even on table that lack indexes.
Verify CHECK and NOT NULL constraints with PRAGMA quick_check.

FossilOrigin-Name: aa02bd3c95e374008b930d296c88dfafaf11c65a
2017-02-22 18:53:13 +00:00
drh 66accfc56b Cleanup and simplification of the output row count limit control of
PRAGMA integrity_check.

FossilOrigin-Name: 5af7d72ed9ec758283d78ceb46627d72021c1c60
2017-02-22 18:04:42 +00:00
drh 8b174f2916 Fix integrity_check so that it verifies NOT NULL constraints even for tables
that have no indexes.  Enhance quick_check so that it verifies NOT NULL and
CHECK constraints.

FossilOrigin-Name: 5264844b069cdc20f456acee9f5b2b97c986120d
2017-02-22 15:11:36 +00:00
drh 8a284dcefe Enhance "PRAGMA integrity_check" so that it verifies CHECK constraints.
FossilOrigin-Name: 549bae0856004ff65b505175460abd598b30fe57
2017-02-22 14:15:37 +00:00
dan 1325adf5e9 In sqlite3VdbeHalt(), return as soon as possible if
Vdbe.magic!=VDBE_MAGIC_RUN. This makes sqlite3_reset() slightly faster in some
cases.

FossilOrigin-Name: 80adc0cb4ed7bacc54b15ac8b5b205403939c8c4
2017-02-21 21:24:05 +00:00
dan f0e808c60b Fix an FTS5 problem that could cause a crash when certain queries were
interrupted using sqlite3_interrupt().

FossilOrigin-Name: e400909f313c317b7b67be6eb867ed61df7383dc
2017-02-21 17:52:58 +00:00
drh e324782254 Very small enhancement to dispatch speed for SQL functions.
FossilOrigin-Name: 3c3228ed16ed8a72630bd56bb9192ee3c7f82093
2017-02-21 15:27:22 +00:00
mistachkin 4689956b9e Correct a harmless typo in the previous check-in.
FossilOrigin-Name: 1589db012ef1389bf84399fccf96d143b2ac4c0f
2017-02-20 23:32:04 +00:00
mistachkin 5e6710ab65 Avoid unsigned integer overflows for SQLITE_WIN32_HEAP_INIT_SIZE when the Win32 heap subsystem is used with very large values of SQLITE_DEFAULT_CACHE_SIZE and/or SQLITE_DEFAULT_PAGE_SIZE.
FossilOrigin-Name: 96b6a98e5e4cb0ddbfcd78b05bfbfcd8976e9f32
2017-02-20 19:13:37 +00:00
drh 7e84b377a9 Small grammar simplification.
FossilOrigin-Name: 0d8a868acd74fb1d076f23fda58b841bb7e6900b
2017-02-20 14:30:17 +00:00
drh ad67e66dca Merge fixes from trunk.
FossilOrigin-Name: ff213f2ef5bf96754a2264685d25546d8b5ccf0a
2017-02-20 13:11:07 +00:00
drh 99d5b4cde6 Updated comments. No code changes.
FossilOrigin-Name: e842ad391e62df273a5b1ed569d42ea46d03a99b
2017-02-18 22:52:40 +00:00
drh 4a54bb5794 Add the OP_SqlExec opcode and use it to implement "PRAGMA analyze_as_needed",
invoking ANALYZE subcommands as necessary.  This simplifies the implementation.

FossilOrigin-Name: d386015f5e7ecdd951d70db56b7bbd858be7ad90
2017-02-18 15:58:52 +00:00
drh eeea412a9d Add the SQLITE_BUG_COMPATIBLE_20160819 compile-time option to omit the error
message when an unrecognized argument is provided to the VACUUM command.

FossilOrigin-Name: 491814272dce7e937b4734fcbc2ad69e12377b56
2017-02-18 13:47:11 +00:00
drh dfe11bae99 Fix errors in the table resize detection.
FossilOrigin-Name: 4229caec0b60a1617b9d5ff94b47271cbd7be1e0
2017-02-18 02:42:54 +00:00
drh 182e84c116 In the analyze_as_needed pragma, avoid running unnecessary OP_LoadAnalysis
and OP_Expire opcodes.  Make the analyze_as_needed pragma responsive to the
schema name.

FossilOrigin-Name: 882599a4a7ea92c9e7752e0745475508e58a11c3
2017-02-18 02:19:02 +00:00
drh f196972c73 Fix the #endif location for an #ifndef SQLITE_UNTESTABLE macro in the
command-line shell.

FossilOrigin-Name: 8cc9d74c176a78aeebfbb39198c21b5dd547ff52
2017-02-17 23:52:00 +00:00
drh 5e98e838da The analyze_as_needed pragma now responds to table size growth and will
automatically rerun the analysis after each 10x size increase.

FossilOrigin-Name: bfbdd07409688fac4ccddbab3639745f6152e23d
2017-02-17 19:24:06 +00:00
drh 72052a73a3 Add the "PRAGMA analyze_as_needed" command.
FossilOrigin-Name: e93db2373127d31d33ec46ef918fa9386bb664a6
2017-02-17 16:26:34 +00:00
drh a3928dd7be Set the TF_StatsUsed flag on tables when the query planner outcome is
affected by the sqlite_stat1 data.  Also, change the column names of the
"PRAGMA stats" command so that they are not keywords.

FossilOrigin-Name: fb2b8ae8310e4ea4b42354bbf36c3084a9d5c6d7
2017-02-17 15:26:36 +00:00
drh 33bec3f5e8 Enhance the Index and Table objects so that they remember if their stats come
from the sqlite_stat1 table.  Make the "PRAGMA stats" an SQLITE_DEBUG only
pragma.  Add the flags column to "PRAGMA stats".  These are all preliminary
steps toward a "PRAGMA analyze_ifneeded;" feature.

FossilOrigin-Name: 85026c8ee143bbd46565660fff8346ef81421546
2017-02-17 13:38:15 +00:00
drh 7898bfff26 Fix a test case that was made to fail by the LIKE optimization enhancement
in check-in [158290c0ab] but which went unnoticed because test builds were
running with ICU enabled and ICU disables the LIKE optimization.

FossilOrigin-Name: 218b2bbb0de07288889f6762d4461ea8acd78969
2017-02-17 02:04:31 +00:00
drh 2b44fd94ba Enable the ".wheretrace" and ".selecttrace" extensions in the command-line
shell when compiled on Windows using DEBUG=3 or higher.  Fix a harmless
warning in the shell that comes up when compiled this way.

FossilOrigin-Name: 8a03be1dc42737ba0712d33f639ea26dc243b20e
2017-02-17 01:43:51 +00:00
drh e9ba910f0d Change the name of WhereInfo.pDistinctSet to pResultSet, since it is now
used for more than just DISTINCT processing.

FossilOrigin-Name: 9fc5cd505fe6ab043519d68e999d2285e22452af
2017-02-16 20:52:52 +00:00
drh 5c258dc1cc Change two MallocZero() calls into MallocRaw() to avoid unnecessary memset().
FossilOrigin-Name: ff5e733cbffd73faa4046e0f1c7f24bb6e131738
2017-02-16 17:18:07 +00:00
drh c5f4816fc5 Fix a comment on a field of the ExprList object. No changes to code.
FossilOrigin-Name: bb8e264227175fc93f1c86a0083f8ad6c4ce2dc7
2017-02-16 16:26:53 +00:00
drh 6f271a421d Increase Table.tabFlags from 8 to 32 bits.
FossilOrigin-Name: 7e14044c65f64322769bcad4640a5896be0a1687
2017-02-16 15:57:30 +00:00
drh b6bf97b384 Remove two redundant initializations from the virtual table logic.
FossilOrigin-Name: 6bd82b95a6b78bb60569af4da58ef4b9f997fe7b
2017-02-16 15:06:06 +00:00
drh 44266ec651 Always use the IsVirtual() macro to determine if a Table object is a virtual
table.  Slightly smaller and faster code.

FossilOrigin-Name: 6affb1c89d87288cad87dde5a533832cdf06b8aa
2017-02-16 14:48:08 +00:00
drh 3a3b420abb Query planner optimization to detect empty tables in a join early and bail out
without doing excess work.

FossilOrigin-Name: 58797e9bafa95709e0f706a15f42f93b409e2db5
2017-02-15 22:36:15 +00:00
mistachkin 0d5b3b7665 Minor enhancement to mutex tracing on Win32.
FossilOrigin-Name: 830b9235673be55f0c932fb157de03725e648c25
2017-02-15 18:30:57 +00:00
drh dc5ece86ae Remove the CLANG_VERSION macro, since we have learned that version numbers in
clang are "marketing" and are inconsistent and unreliable.  Builds using clang
will still use the GCC_VERSION macro since clang works hard to be gcc
compatible.

FossilOrigin-Name: 810d29320b853b3a01aa50d8f2a0bceacf79e0aa
2017-02-15 15:09:09 +00:00
mistachkin d742367ab5 Further reforms to Tcl_*Alloc() usage.
FossilOrigin-Name: ee1e689633e517ce46307b9afbf1eda03482c928
2017-02-15 04:16:56 +00:00
mistachkin dd22c09af8 In the blob test code, avoid crashing on low-memory systems by using Tcl_AttemptAlloc().
FossilOrigin-Name: 1d267757a89d9267ee9c201373f801eb9772ab04
2017-02-15 01:39:28 +00:00
drh 0c5cd969b8 Clarification of the help text for the command-line shell.
FossilOrigin-Name: ca4f1e4962df64ae756c286f3795af7d6f692cdd
2017-02-14 21:47:46 +00:00
drh 7e4acf7b44 Enable the SQLITE_ENABLE_NULL_TRIM option for WITHOUT ROWID tables.
FossilOrigin-Name: 54836270c9c0bfa5910f7ad74ec238b9d7ddee5f
2017-02-14 20:00:16 +00:00
drh d2f92c26d5 More realistic lengths of string values in speedtest1 with --testset orm.
FossilOrigin-Name: e4731fd65f9698817690b741cc454f25e8e871e6
2017-02-14 16:30:13 +00:00
drh a829054049 Fix a testcase number on the ORM testset of speedtest1.
FossilOrigin-Name: 58b2f911eec2e3eb9944dd6d8573ff5c7bd43f70
2017-02-14 15:58:58 +00:00
drh a8207f488f Add the new "--testset orm" to the speedtest1 utility.
FossilOrigin-Name: 1836adc1d1f8e496ae0a07bf0fc933a19dc8fee5
2017-02-14 15:57:11 +00:00
drh d879e3eb8d Change all legacy instances of "#if SQLITE_DEBUG" to "#ifdef SQLITE_DEBUG" for
consistency.

FossilOrigin-Name: 670f10b24230863688270d12ac519609ade2302b
2017-02-13 13:35:55 +00:00
drh 30a5831c45 Fix typos in using the MSVC_VERSION macro.
FossilOrigin-Name: f3b65926b1f439adb95e3bbce8e58785b8cf8427
2017-02-13 13:26:33 +00:00
drh ac279be98e Avoid a duplication #define in FTS5
FossilOrigin-Name: c447441cff1884d6fe5f0a76d64b3e7d908584a1
2017-02-13 13:20:02 +00:00
drh f9463dfbcf Fix indexes on expressions so that they can be actually used with
a COLLATE clause.

FossilOrigin-Name: e464b919f76520b45bb58983c6702db59d820ee4
2017-02-11 14:59:58 +00:00
drh 13ac46eea2 Ensure that indexed expressions with collating sequences are handled
correctly.  Proposed fix for ticket [eb703ba7b50c1a5].

FossilOrigin-Name: 9689d04b8250139e32078b2aa9748edcc6231bcd
2017-02-11 13:51:23 +00:00
drh 653a5f4e71 Bump the version number up to 3.18.0.
FossilOrigin-Name: 7520c238558346d421e3c24cb7d17a54d1aa56b2
2017-02-10 21:40:04 +00:00
drh 1c84bd4787 Enhance the LIKE optimization so that it works for arbitrary expressions on
the LHS as long as the pattern on the RHS does not begin with a digit or
a minus sign.

FossilOrigin-Name: 158290c0abafde67ee3f2363f0b6646887841df3
2017-02-10 21:37:57 +00:00
drh 2c338a9d9a Add the "," flag to printf().
FossilOrigin-Name: 064445b12f99f76e9a12957be97edd520ab3ae27
2017-02-10 19:38:36 +00:00
drh a39284bfa8 Cleanup the usage of the SQLITE_DISABLE_INTRINSIC compile-time option.
Remove the SQLITE_RUNTIME_BYTEORDER compile-time option.  Use
-DSQLITE_BYTEORDER=0 instead.  Fix a bug in R-Tree that occurs when compiling
on a known little-endian machine without the use of intrinsic byteswapping
functions.

FossilOrigin-Name: 798fb9d70d2e5f95e64237b04d6692360133381a
2017-02-09 17:12:22 +00:00
dan ad3b4c078e Avoid preparing a SELECT statement each time an UPDATE or DELETE by docid is
executed against an fts3 table.

FossilOrigin-Name: 1afec5758b624e6a066d4e7ef50695095e9d7ff1
2017-02-08 19:12:36 +00:00
dan 18fdde21b8 Avoid preparing a SELECT statement each time an UPDATE or DELETE
by docid is executed against an fts3 table.

FossilOrigin-Name: 9962c10a5c6672bd82b2bf640d878fcdac0b815a
2017-02-08 19:10:47 +00:00
mistachkin 40b84365e4 Typo fixes in comment. No changes to code.
FossilOrigin-Name: c09dd5c0befaf5028abfead8114bd74a30ffe5d4
2017-02-08 18:13:46 +00:00
drh 087a29c78b Always invoke the xRoundup() method of the memory allocator before calling
xMalloc().

FossilOrigin-Name: 77b470b0df73dc5ae5ad2f0170ef7c50558c7c88
2017-02-08 16:01:57 +00:00
drh 0356ebd0a5 Round up the size of all memory allocations to a multiple of 8 bytes when
using the system memory allocator.

FossilOrigin-Name: c46e06fab4465128ac3364bafef5fa3d016796d0
2017-02-08 12:18:05 +00:00
drh ec26ce3328 When generating the hash on the sqlite_master table in dbselftest, use an
ORDER BY clause, since the sqlite_master table is reordered by VACUUM.

FossilOrigin-Name: c8bfd99b96608a08f934f46b4e1a4d0f1cc69ea7
2017-02-07 21:44:40 +00:00
mistachkin 953fbd16af MSVC makefile enhancments for several command line tools and the session extensions.
FossilOrigin-Name: fc1dfe870279531d77ffb18a9ca4b4dcbc7aab8d
2017-02-07 21:09:34 +00:00
drh 134e527091 Fix harmless compiler warnings in dbfuzz.
FossilOrigin-Name: 61242267824135a9d5438ec15e3352a2f21dc2fc
2017-02-07 21:00:44 +00:00
drh b67e175448 Fix harmless compiler warnings in kvtest.c
FossilOrigin-Name: db6b39937dd9d6fcd5fcc582c8dd529caad755da
2017-02-07 20:57:00 +00:00
drh cbc65e5f4f The dbselftest utility now generates hashes in the selftest table with --init.
It also accepts multiple database files on the command-line.

FossilOrigin-Name: e68829c9bbc69bf4a0dc057e0a6e977f2fac79be
2017-02-07 20:51:38 +00:00
dan 18b20c981d Omit fts5fault1.test from the inmemory_journal permutation.
FossilOrigin-Name: cb1e83f9583bf93ce7583d9f5e97272e2d43cfb8
2017-02-07 19:36:14 +00:00
dan a7fc253d42 Update a test parameter in malloc5.test to account for the increase in default
lookaside buffer size.

FossilOrigin-Name: be82d5ae20ba62a165bdc28766a8dc8049abcac6
2017-02-07 19:23:51 +00:00
drh b9e9bc1de6 Add the initial version of the "dbselftest" utility program.
FossilOrigin-Name: 1fcac8365e0f7bcfd55442d718da6626c864d45a
2017-02-07 17:36:12 +00:00
dan 2e9dceb432 Update an error message in corruptC.test.
FossilOrigin-Name: 722e57fe61162a82b8001c7b1d3e06174caa90b9
2017-02-07 16:15:48 +00:00
dan 9fcb6ddc1e Fix a build problem affecting non-amalgamation rtree builds.
FossilOrigin-Name: bb7f445ba1df53cd4a169612b18fc533016102b7
2017-02-07 14:45:18 +00:00
dan 821fad51b4 Fix a test case to account for the fact that sqlite3_blob_reopen() now returns
SQLITE_IOERR_NOMEM instead of SQLITE_NOMEM if an OOM occurs in the VFS layer.

FossilOrigin-Name: e11cc52389f61f6421179281877b119c02286121
2017-02-07 14:22:39 +00:00
drh 364ca6a90e Fix SQLITE_BYTEORDER #defines in R-Tree when compiled separately from the
amalgamation.

FossilOrigin-Name: a136609c98ed3cc673c5a3c2578d49db3f2518d1
2017-02-07 13:51:48 +00:00
drh edd9bcb372 Make the cellMargin() routine of R-Tree slightly smaller and faster while also
fixing a harmless compiler warning.

FossilOrigin-Name: 07fe6228208684d579c4f6c334c90eb6262a9233
2017-02-07 12:58:38 +00:00
drh 76f63789f2 Back out [ec8ff892ac] which is causing missed OOM errors on some tests.
FossilOrigin-Name: 0611770d6a2fcb9fa0bedee19df9916820ae8f3b
2017-02-07 03:44:42 +00:00
drh b18bf843f7 Fix a minor typo in a comment in R-Tree. No changes to code.
FossilOrigin-Name: f77ee9e941f22b0b2e88871df4466fdde9cde131
2017-02-07 00:55:47 +00:00
drh 04128ace8d Remove a small amount of unnecessary code from R-Tree.
FossilOrigin-Name: e5aea894267addb4dc9b21de24a20417b0be508a
2017-02-06 16:52:32 +00:00
drh 943aa77a8a Add the "max-limits" utility program to the tools/ subdirectory.
FossilOrigin-Name: c54173b6c1acbb41ed9c323099e94b8e02c6c895
2017-02-06 15:27:44 +00:00
dan 809955b504 Fix a bug in kvtest causing "init --variance 0" runs to generate single byte
blob values only.

FossilOrigin-Name: 6b0276f968d3c6430076c6e540907cf840d0f398
2017-02-06 07:37:50 +00:00
drh 9630f3ba08 Remove incorrect testcase() macros from R-Tree.
FossilOrigin-Name: 853a58a75ecbd01ebbf7e07fbd8c4fc9bef54a99
2017-02-06 01:19:07 +00:00
drh 238390c3b4 Simplification to the error handling to extension loading in
sqlite3_open().

FossilOrigin-Name: ec8ff892ac9c6a8f81bcf69f1933f4bb69faa743
2017-02-04 20:15:51 +00:00
dan ff677b20fc Allow sqlite3session_apply() to apply changesets to tables that have been
extended using ALTER TABLE ADD COLUMN.

FossilOrigin-Name: b20ff81ff9c8af500ea96e0ba9d34524220a89f1
2017-02-04 17:33:30 +00:00
drh fe05491b87 In RTREE, use an sqlite3_blob object rather than an sqlite3_stmt object
for reading content out of the %_node shadow table.

FossilOrigin-Name: 97ccf3e4de11ffea46993cb7fb7ab559b9810705
2017-02-04 14:24:05 +00:00
drh 010e312f8f Close sqlite3_blob objects on xSync rather than waiting until xCommit.
FossilOrigin-Name: 95ee745fceb4a48c683f34c404c380fe5e7d684a
2017-02-04 13:12:12 +00:00
drh 88610c968e Improved performance and stack usage when processing VALUES clauses with
a very large number of rows.

FossilOrigin-Name: 5706d4708a30eb54da0ecbb6eb02f54746c390d9
2017-02-03 20:54:57 +00:00
dan 067cd837fb Avoid a performance problem when very large "VALUES(..), (..), (..)" terms are
used in queries.

FossilOrigin-Name: f5306ad6816cc377036685cdae227e762885229c
2017-02-03 19:16:39 +00:00
drh 59a40db3d2 Improved tests for the carray() table-valued function.
FossilOrigin-Name: 83a099f139aba03edac19c890a0019e922032a25
2017-02-03 15:16:25 +00:00
dan a7466205ca Modify the sqlite3SelectDup() routine to avoid recursing on Select.pPrior.
FossilOrigin-Name: a7674ead5be986c66f7d61d598adc7e5728bcd30
2017-02-03 14:44:52 +00:00
drh 1101ae4113 Ensure that all cursors have their positions saved prior to rolling back
a savepoint.

FossilOrigin-Name: 8e03a8e95fada5c24d369672a71f6e02288051da
2017-02-02 20:32:28 +00:00
mistachkin 07b139b8c1 Fix issues in the sha1 extension seen with MSVC.
FossilOrigin-Name: 5a0da77c22ebc7db5e63b1520d30f3ad97b9bb3b
2017-02-02 19:24:05 +00:00
drh 3accc7e1af Remove the unused pReadNode prepared statement from each RTREE object.
FossilOrigin-Name: e51dc0ec60d45cd57564735b6b2bb254a588533e
2017-02-02 16:30:25 +00:00
drh ce655a2367 Fix a potential uninitialized (though harmless) variable in RTREE.
FossilOrigin-Name: a1c74e09d63aca630d022ed074866433eed6b493
2017-02-02 16:08:27 +00:00
drh 413e207e31 The sqlite3_blob_close() interface can cause recursive invocations of
nodeBlobReset() in RTREE.  Make sure that does not cause problems.

FossilOrigin-Name: 88333441cbf26bfde2acebf2a3f75b5ebbdfb0ae
2017-02-02 15:35:54 +00:00
drh 2033d1c8ca Change RTREE so that the sqlite3_blob object is closed whenever the cursor
count drops to zero and there is not a pending write transaction.

FossilOrigin-Name: 9bb4eafe1a60176ed2e731bb7e3067c0b8a46615
2017-02-02 14:40:06 +00:00
drh 6d683c5c6e Use the sqlite3_blob interface for reading values from the %_node shadow
table in RTREE.  This is a work in progress.  There are still some minor
problems.

FossilOrigin-Name: fc4917d730b29b0bf60fea5e0166728635783e9c
2017-02-02 02:28:45 +00:00
drh 2343c7eb3f This is an experimental patch that ensures that all cursors have their position
saved prior to starting a ROLLBACK TO.

FossilOrigin-Name: 01d97e5b6502b1811b52a681f445e1aaae6c0ee6
2017-02-02 00:46:55 +00:00
mistachkin 6890d3e458 Fix harmless compiler warnings seen with MSVC.
FossilOrigin-Name: 0c66cf0f0a9ada2ddcb8d61001ef791b86226416
2017-02-01 23:06:17 +00:00
mistachkin 5f7b95f73b Backout the change in [02f6293f27] as it causes MSVC to complain.
FossilOrigin-Name: aaae74d06f4865818465cfdb440258ae8a5b985a
2017-02-01 23:03:54 +00:00
mistachkin 2fa517bf2a Fix C99-style variable declaration issue seen with older versions of MSVC.
FossilOrigin-Name: 54d285464a222c59327eb6c917c1cc0125a55a27
2017-02-01 22:59:29 +00:00
mistachkin 2e52532217 Fix harmless compiler warnings seen with MSVC.
FossilOrigin-Name: 997f765bc6706769ae15f3e719354473e02bd78b
2017-02-01 22:43:08 +00:00
mistachkin 8c5e8feb35 Add an option to the MSVC makefile to enable treating warnings as errors.
FossilOrigin-Name: 6a378c29b43d61313ca9daa599e59d8eeeed9a27
2017-02-01 22:32:49 +00:00
drh 31a1349515 Unwind the RTREE dimension loop inside of rtreeCallbackConstraint().
FossilOrigin-Name: 4854ea9c18e7d8066c90b41568d0fae97b01ea6d
2017-02-01 17:08:56 +00:00
drh 5db59b33c4 Completely unroll the dimension loop inside of cellArea() in RTREE.
FossilOrigin-Name: 3c4c0126c287f844220b65e00fec17c059fbb7c8
2017-02-01 16:41:30 +00:00
drh 0e6f67b754 Precompute the nDim2 value in the Rtree object and use that to make loops
over coordinates faster.

FossilOrigin-Name: f1f3c8cc733a05c12dd980f2dfa0ab4ccd76c04b
2017-02-01 15:49:02 +00:00
drh 03626e3812 Use compiler intrinsic functions (when available) for byteswapping in RTREE.
FossilOrigin-Name: 82fcd54a5941c20895ffc22d8009c1ebdae44eda
2017-02-01 15:24:32 +00:00
drh 1650fcb1b5 Fix the build by making the OPFLAG_ISNOOP macro available unconditionally.
FossilOrigin-Name: 510933cb24c5bf883265af3a6075e60a4b5ffa37
2017-02-01 15:19:29 +00:00
dan f6c69221e3 Update the documentation comment in sqlite.h.in for sqlite3_preupdate_hook().
FossilOrigin-Name: 7f8570208c06c056d426e9299d9930181a0464f8
2017-02-01 14:19:43 +00:00
dan f62154d4ac Changes so that the pre-update hook and the sessions module work with WITHOUT
ROWID tables.

FossilOrigin-Name: 964bdc27f8f1b1db2e5c0c2a65c8156614cbe087
2017-02-01 14:10:24 +00:00
drh 14494fa712 More RTREE performance optimizations related to decoding values.
FossilOrigin-Name: c5395e7496d0cd593f5e16ee5f6719d020dc0c66
2017-02-01 02:25:28 +00:00
drh 35497fccbe Improved comments on the statGet() implementation in ANALYZE. No changes
to code.

FossilOrigin-Name: 9663eea2a16bb4eec71476d307a3722a768308c3
2017-02-01 01:34:15 +00:00
drh fcbd6cdb41 R-TREE optimization: unwrap the coordinate decode loop in
rtreeCallbackConstraint().

FossilOrigin-Name: 0bf7b51896ec441f62490964c7a44a3c75c6b7e2
2017-01-31 21:22:03 +00:00
drh a4613e1f4c Very small performance improvements and size reductions in
sqlite3VdbeExec() and blobSeekToRow().

FossilOrigin-Name: 85dddf2b453b8afaf1f485b96084d31e22f97dda
2017-01-31 19:10:42 +00:00
drh baf5dec700 Simplifications to blobSeekToRow().
FossilOrigin-Name: 495ea824093ff535734c22c3115384c08f855c02
2017-01-31 19:02:15 +00:00
dan 610e17bd91 Add a speed-test program for the sessions module.
FossilOrigin-Name: 25f1275fe3e940c1d9a7b013cb3744304b2eda1e
2017-01-31 17:31:30 +00:00
drh 0caad09585 Remove a C99-style comment. Fixes to the kvtest-speed.sh script.
FossilOrigin-Name: 91eb6b628e278d20eccc647293e5b30765163e12
2017-01-31 16:49:01 +00:00
drh d59bcbdee7 Remove another unnecessary local variable initialization from sqlite3VdbeExec()
FossilOrigin-Name: 2361b03b61311aab9b9ec9de040bbb73be31be0d
2017-01-31 16:43:36 +00:00
drh 78a9e92ecf Remove an unnecessary initialization of the pOp variable in sqlite3VdbeExec().
FossilOrigin-Name: 02f6293f278f7b0a0f4876f5c6a0f4dc42620d79
2017-01-31 16:34:51 +00:00
drh 9dc7ad1d7e Add the "stat" command to kvtest.c. Also add the --variance option to the
"init" command.  Add the tool/kvtest-speed.sh script used for doing 
performance testing on key/value access patterns.

FossilOrigin-Name: b63deed600b1a457a6960ebad5645f4de9c56e5d
2017-01-31 15:29:05 +00:00
drh 1379521f4a Fix a typo in a comment.
FossilOrigin-Name: bd22bf9cbe028e9811ca3afaadafd90312cb0fc9
2017-01-31 15:27:04 +00:00
dan 6abc7a6b37 Merge latest trunk with this branch.
FossilOrigin-Name: 4a592abbc555fd3b70979b551b00c2ba631253df
2017-01-31 14:08:04 +00:00
drh 8e74e7ba4c Further minor enhancement and size reduction in
sqlite3ExprAssignVarNumber().

FossilOrigin-Name: eacfdcf25796ea29b5e63499c3d7397498305ad9
2017-01-31 12:41:48 +00:00
drh 18814dfb7e Performance optimization in sqlite3ExprAssignVarNumber().
FossilOrigin-Name: 5987ca1ff94ed3c1666f783bb15b16158aa7e1db
2017-01-31 03:52:34 +00:00
dan cb9a364390 Experimental change to invoke the preupdate hook when WITHOUT ROWID tables are
written.

FossilOrigin-Name: 856f8604c59c8fdd9bfb7d86fc0e212f091ab49a
2017-01-30 19:44:53 +00:00
dan e7eeeb99f7 Fix building with SQLITE_OMIT_FOREIGN_KEY defined.
FossilOrigin-Name: e93d2c49a44af994ff10cc9cc7eafacd5a4f73ab
2017-01-30 11:38:19 +00:00
drh d26cc54183 In the amalgamation, allocate the parser engine object from stack rather than
from heap, for improved performance.  This only happens in the amalgamation,
since otherwise the sqlite3RunParser() routine does not know the object size.

FossilOrigin-Name: 4fe879d4b5da6ae0688a7a99004683a234966597
2017-01-28 20:46:37 +00:00
mistachkin 51b15c3871 Fix a couple comment typos. No changes to code.
FossilOrigin-Name: 2a2e7d86b275c970726f642a37a098950a3b906e
2017-01-28 19:53:51 +00:00
dan f64ece143c Avoid redundant table b-tree cursor seeks in UPDATE statements that use the
two-pass strategy.

FossilOrigin-Name: dc555b1039c6930f6d15355c698ff917a85e8056
2017-01-28 19:45:34 +00:00
drh 6034d47618 Updates to the sqlite3_blob documentation. No changes to code.
FossilOrigin-Name: 426b440a5745f9c431c6a3d9ba542af61a6a83fb
2017-01-28 15:26:14 +00:00
drh 27c8467734 In the speed-check.sh script, automatically invoke "fossil test-diff --tk" on
the cachegrind output against trunk, if not generating a trunk run.

FossilOrigin-Name: aa1ab37100a91ab4bb91d50a1267c26967efcb21
2017-01-28 13:40:55 +00:00
dan 2d2e4f3895 Fix a typo in the docs for sqlite3_update_hook().
FossilOrigin-Name: 7c029655cc3369a1e46741fdd3701d36d420b28b
2017-01-28 06:50:15 +00:00
drh cc04dacb85 Add the sha1.c loadable extension that implements the sha1() and sha1_query()
SQL functions.

FossilOrigin-Name: 24e77c1cef163a9822635570b3211789ff23d5c9
2017-01-27 19:27:38 +00:00
dan 50133dea28 Fix a problem causing the pre-update hook to be invoked by DROP TABLE
statements.

FossilOrigin-Name: fbb6bf1b69cfd581b4ffd778c344e3fbd9c9406f
2017-01-27 17:02:26 +00:00
drh 9ec82ff2ba Alternative ICU fix (compare to check-in [50e60cb4]) that avoids casting
integers to pointers.

FossilOrigin-Name: d9752c8f7c55426fd7d2b877c5cc3784f93b5349
2017-01-27 13:14:12 +00:00
drh 7aee83b935 In the command-line shell, enhance the ".mode" command so that it restores the
default column and row separators for modes "line", "list", "column", and
"tcl".

FossilOrigin-Name: 58f02e6eae8fc9e2577fe435b0282fb46af3960d
2017-01-27 01:52:42 +00:00
drh 6ee610bfc0 Another micro-optimization in accessPayload(). Slightly smaller and faster.
FossilOrigin-Name: c012619b65d70b4ef6cf33532ef57d7f8ba42d74
2017-01-27 01:25:00 +00:00
drh cdf360a0d5 Performance optimization in accessPayload().
FossilOrigin-Name: ebb1fd98d4e448aa6d8f1e5be7ddc5bedb3db95b
2017-01-27 01:13:49 +00:00
drh 42e28f12a3 Simplify the accessPayload() routine so that it always populates the overflow
page cache.  In the one case where populating the page cache can lead to 
problems, simply invalidate the cache as soon as accessPayload() returns.  
This simplification reduces code size and helps accessPayload() to run a 
little faster.  This backs out the eOp==2 mode of accessPayload() added by 
check-in [da59198505].

FossilOrigin-Name: 68e7a8c6765649195ef1ad9407d87d44a307b462
2017-01-27 00:31:59 +00:00
drh 945b094632 Remove an unreachable branch in the error handling logic for
sqlite3BtreePayloadChecked().

FossilOrigin-Name: 293bf3ed7e40745349c83b202b27ed1b48517e1a
2017-01-26 21:30:00 +00:00
drh b7dab70a92 Improvement to the OP_Permutation opcode to prevent it from using CPU cycles
for initialization in prepared statements that do not use that opcode.

FossilOrigin-Name: b4a98f65564a0d9fba2fef95ebd00a39b3e1e572
2017-01-26 18:00:00 +00:00
drh fae58d51ce Remove the obsolete lastRowid cache from the sqlite3VdbeExec() for a size
reduction and performance improvement.

FossilOrigin-Name: b4803184652e5f4f823c1521412bc480baeb3dbf
2017-01-26 17:26:44 +00:00
drh d08406477a Performance optimization in sqlite3VdbeCloseStatement().
FossilOrigin-Name: 1e96e5ec1ee617cb5b5cbdc5a2ee79c8cc35821d
2017-01-26 17:11:18 +00:00
drh 83ec2761fa Performance optimization to sqlite3_blob_read().
FossilOrigin-Name: 7459f4b7ed4007d9ec44c3bf0fcba04f5f8540a9
2017-01-26 16:54:47 +00:00
drh 8bb9fd3b45 Minor simplification and performance optimization for Direct Overflow Read.
FossilOrigin-Name: 3e96d6efa867b765c8acf1454014b1e71b2e4f21
2017-01-26 16:27:32 +00:00
drh d930b5cb06 Make SQLITE_DIRECT_OVERFLOW_READ work for in WAL mode as long as the page
being read is not in the the -wal file.

FossilOrigin-Name: 9879be1899adf5634f551a2077b15ccb1133e4e3
2017-01-26 02:26:02 +00:00
drh 2b15f6e11b Enhancements to the kvtest utility program. Add the --jmode option.
Improved output formatting.

FossilOrigin-Name: 62a4851ccf88837d1c16dae8204f7f264e80e3c9
2017-01-26 01:54:39 +00:00
drh 87f500ce43 Modify the ICU extension to use a static initializer, as VC++ complains about
a dynamic initialization.  Maybe the dynamic structure initialization is a
GCC extension.

FossilOrigin-Name: 50e60cb44fd3687dde5551d02bad60c323beaabc
2017-01-26 00:58:27 +00:00
drh d447dced96 Trim NULL values off the end of records when the SQLITE_ENABLE_TRIM_NULLS
compile-time option is used.  Increase the size of the P5 operand to 16 bits.
Fix a problem with short records in the sessions extension.

FossilOrigin-Name: 4801bd59a01dcc11a3eb9e776e7599b36f162d2a
2017-01-25 20:55:11 +00:00
dan 7271d7a19c Fix another pre-update hook issue, this time in sqlite3preupdate_old().
FossilOrigin-Name: c7651d21bfdfd9b8cf04b26e0264bc58c03d247f
2017-01-25 18:53:27 +00:00
dan d47e1ccb57 Fix a test script problem in exclusive2.test causing it to fail on this
branch.

FossilOrigin-Name: f66614dc78e32d2d369518200b3322cd97990ffe
2017-01-25 18:12:46 +00:00
dan 2a86c1962c Fix a problem with the pre-update hook on this branch.
FossilOrigin-Name: 6fc4fbfa29cfa795edf32e4a1f2d0eceb3007f68
2017-01-25 17:44:13 +00:00
drh 585ce1923c Experimental enhancement to automatically trim NULL values from the end of
records, for a reduced disk footprint.  This change also involves increasing
the P5 operand from 8 to 16 bits.

FossilOrigin-Name: 118ded403b95050b74ae2b03919c43d614094a32
2017-01-25 14:58:27 +00:00
drh 7888d14caa Ensure that sqlite3_blob_reopen() correctly handles short rows.
Fix for ticket [e6e962d6b0f06f46e].

FossilOrigin-Name: 8cd1a4451cce1fe28f462800e2be1dee1735c0d0
2017-01-25 14:38:19 +00:00
drh 666d34c791 Fix SQLITEINT_H macro usage in two extensions.
FossilOrigin-Name: 0803390c152141c9ab4e7a28406b2a5d72a5c2fa
2017-01-25 13:54:27 +00:00
drh 210b0d0eb3 Ensure that sqlite3_blob_reopen() correctly handles short rows.
Proposed fix for ticket [e6e962d6b0f06f46e].  Further testing needed.

FossilOrigin-Name: 57d8dad35c2a9ab635e954dce7f3986ae1ca8ed2
2017-01-25 04:41:34 +00:00
drh d1b2566b07 Document the --mmap option in the --help screen for kvtest. Enhance kvtest so
that numeric arguments can have suffixes like "K" or "M".  Add kvtest to the
unix makefiles.

FossilOrigin-Name: 175bda87288c7ce15b163316159f53a60822ccad
2017-01-23 19:11:38 +00:00
drh bace324082 Add the --mmap option to the kvtest utility program.
FossilOrigin-Name: 4948f7e6d2a1cfce36a7aab2f5b65be07c285ac3
2017-01-23 18:40:15 +00:00
drh 6aabff38e9 Optimization: Try to avoid unnecessary btree searching when repositioning
a cursor to the next row.

FossilOrigin-Name: ee793d30c1dc1f78f49e6230d17750eceedbd8ed
2017-01-23 16:56:18 +00:00
dan 65c4c0b02d Add the missing SQLITE_API symbol to test_delete.c (it is not added
automatically as this file is not part of the amalgamation).

FossilOrigin-Name: 7a4f512ddf9e7e718389c80930d6268ab598459c
2017-01-23 15:58:09 +00:00
dan 1b9fd2651b Fix a problem preventing FTS5 from correctly passing the FTS5_TOKENIZE_PREFIX
flag to custom tokenizer implementations.

FossilOrigin-Name: 03c601344ed56b316bcc5fd02f6648b0009ba61b
2017-01-23 07:06:27 +00:00
drh 38305ab55f Fix an uninitialized variable in the command-line shell.
FossilOrigin-Name: 06b8001ade62bc59e6ae20f761167a81d85a4272
2017-01-22 16:34:35 +00:00
mistachkin 35f30d3398 Fixes to documentation comments in the public header file.
FossilOrigin-Name: 772dcb08f400f20d4dbfb74df39de78da24ee5fd
2017-01-22 02:04:05 +00:00
drh eacb4412b1 Fix an initialized variable in kvtest.
FossilOrigin-Name: ed62c5a6562262709128099f757ae60807a930d7
2017-01-22 00:11:07 +00:00
drh 7f11afaba1 A better implementation of the moveto-neighbor optimization that checks for
nearby rows on adjacent pages.

FossilOrigin-Name: 2c4ecb85a475b9063aa8a3bb517ac181a7ded649
2017-01-21 21:47:54 +00:00
drh 451e76d5b5 B-tree optimization: When seeking on a rowid table that has already been
positioned, check to see if the new row happens to be the next row on the
same leaf page.  That is a reasonably common case, and if it is true it
avoids a full binary search.

FossilOrigin-Name: 8e5cfb2039126da7689c4b1c88760f10e1234eaf
2017-01-21 16:54:19 +00:00
drh 3b2936fada Change sqlite3_blob_reopen() to call sqlite3VdbeExec() directly rather than
going through sqlite3_step().  Performance enhancement.

FossilOrigin-Name: 347df3c1fd7322e7aacaf1e9f8be81830947c482
2017-01-21 16:27:56 +00:00
drh 184d902db1 In the kvtest.c test utility, reuse the buffer into which blobs are read,
rather than reallocating it for each row.  This is a closer match to how
other test programs work, and thus provides a better comparison.

FossilOrigin-Name: 0d1ad13a296b22d6fe36879b56f99bd6af1acd3a
2017-01-21 15:55:41 +00:00
drh 36cae856ee Remove an unnecessary sqlite3_bind_int64() call from sqlite3_blob_open().
Also other minor refactoring of the sqlite3_blob implementation.

FossilOrigin-Name: 9d197a532349f4b1caf66bbed70ca46df86cb86f
2017-01-21 14:11:28 +00:00
drh cd64553015 Minor performance optimization and size reduction to the accessPayload()
routine in btree.c.

FossilOrigin-Name: 264e5c10d7144910b3223b64546567fa20e4bc65
2017-01-20 20:43:14 +00:00
dan dfd0de82f1 Fix a typo in the help message for kvtest.
FossilOrigin-Name: 8971d98f25a4f5fb060db8ed6a4b06f083122a50
2017-01-20 16:47:34 +00:00
dan befcd8ad84 Add option "--stats" to test program kvtest. Specifying --stats causes kvtest
to output information similar to the shell tool option of the same name.

FossilOrigin-Name: 90291327fc127671d9847a4a2ce1ed47a408cfc6
2017-01-20 16:46:20 +00:00
drh 508286701a Get the "--testset rtree" option working on speedtest1. Add the --rtree,
--lookaside, and --clang options to the speed-check.sh script.

FossilOrigin-Name: 87b640c8d07a76b2bc7e896e01965cc09e06f77b
2017-01-20 16:09:12 +00:00
drh 4df65fc20f Minor performance optimizations to sqlite3_blob_open() and
sqlite3_blob_reopen().

FossilOrigin-Name: 52a61967d920047ea0b4409b79793e05c0128964
2017-01-20 00:40:26 +00:00
drh 8674e49214 If compiled with SQLITE_INLINE_MEMCPY, all memcpy() calls are replaced with
in-line code.  With that change, cachegrind shows which memcpy() calls
are taking the most time.  This is a performance-measurement hack only and
is not for production use.

FossilOrigin-Name: 9ed38521617136223a667988aed40e25797faf84
2017-01-19 21:20:11 +00:00
mistachkin 2f31d02049 In the 'vtshim' extension, avoid accessing freed memory when handling errors from xCreate/xConnect.
FossilOrigin-Name: ffd559afd32dcdce9c733ebccdee88fda9b689cf
2017-01-19 18:20:36 +00:00
mistachkin aac853bae8 In the 'windirent' test module, use a macro for the hidden/system attribute checking.
FossilOrigin-Name: a84a08d0716656dc0b26eafb1841c48d83c67ef2
2017-01-18 22:47:42 +00:00
mistachkin d3e73d6c1c Remove superfluous option to Tcl 'lsort' in the vtabH test file.
FossilOrigin-Name: b92cc6e58ae31cbe6600a522beb5485f7add04b2
2017-01-18 22:19:01 +00:00
mistachkin 7059138a08 Make the vtabH-3.1 test more portable and robust.
FossilOrigin-Name: d3c91c1fb345fbcbfc60a897bebf771c795430c9
2017-01-18 22:16:34 +00:00
mistachkin 8a9e83583b Fix handling of initial hidden and/or system files in the opendir() implementation for Windows. No changes to non-test code.
FossilOrigin-Name: 26dd42b462dc621b8b0a2295fc91d3e61ac732b6
2017-01-18 22:16:20 +00:00
dan 25fd2e247b Fix a problem that could cause a spurious SQLITE_NOMEM error when attempting
to resume an RBU operation if the previous client failed right after
completing the incremental checkpoint. Also a "cannot vacuum wal db" error
that could occur when resuming an RBU vacuum if an error (OOM or IO error)
occurs during the incremental checkpoint.

FossilOrigin-Name: 681d96eb822e606da53700867191d4738bda20c8
2017-01-17 10:41:42 +00:00
drh c711f53f30 Disable intrinsic functions for Windows using Clang, due to reports of
linkage errors.  This causes a 0.6% performance reduction.  We will want to
revisit this change in the future.

FossilOrigin-Name: 7fd560c6d2ff470b755ad118287a0a8825b3009e
2017-01-17 00:10:58 +00:00
drh de48a3f98a Back out check-in [0b3174e0b1364c] and replace it with a better fix for \ticket [91e2e8ba6ff2e2] - a fix that does not cause the problem identified by
ticket [7ffd1ca1d2ad4ec]. Add new test cases for both tickets.

FossilOrigin-Name: 9b64af7b5201a8700ae9e384b04714ca18df7449
2017-01-16 18:10:17 +00:00
drh da060052e3 Back out check-in [0b3174e0b1364c] and replace it with a better fix
for ticket [91e2e8ba6ff2e2] - a fix that does not cause the problem
identified by ticket [7ffd1ca1d2ad4ec].

FossilOrigin-Name: 0613665274346917f5482f9210bf0c60a0fed7d9
2017-01-16 16:43:02 +00:00
drh ce31643fd9 Add test cases for tickets [91e2e8ba6ff2e2] and [7ffd1ca1d2ad4ec].
FossilOrigin-Name: 9d0dfe0b088a5917afa06207ca3ac5618e3da82f
2017-01-16 16:01:50 +00:00
dan ef2f5925d8 Fix a problem preventing resumption of RBU operations after recovering from a
process or system failure that occurs during the incremental-checkpoint phase.

FossilOrigin-Name: 97914266cb4ec63b0c9185ab139673139bd2f0ed
2017-01-13 18:24:37 +00:00
drh be7a0cee4e Fix the build for SQLITE_ENABLE_MEMORY_MANAGEMENT.
FossilOrigin-Name: 8c85b8fdd7f0ba65fba83361d361a567b797a184
2017-01-13 12:53:35 +00:00
drh 7b20a15d13 Remove a branch that is probably unreachable, and which adds no value.
FossilOrigin-Name: 9acc72381ccd5e36f3ffdf7e7fbefc5a15701eb4
2017-01-12 19:10:55 +00:00
drh ae051a8970 Fix harmless compiler warnings in the UPDATE code generator.
FossilOrigin-Name: 385db266673abaf7013ffad09b28014c246547ef
2017-01-12 16:21:54 +00:00
drh 70d90a2c37 Remove an unnecessary corruption test from the btree balancer. If corruption
is present, it will be found harmlessly by later tests.

FossilOrigin-Name: bddf39562d08e259c43dd59b82afb62fe0eb2eef
2017-01-12 16:14:33 +00:00
drh b701c9a6c3 Improved detection of cells that extend into the reserved space at the end
of the page while adjusting overflow page pointers during autovacuum.

FossilOrigin-Name: 8097712c9c1f4ea16bc5dd462da248ef98896061
2017-01-12 15:11:03 +00:00
drh 24be549329 Remove invalid test case from cursorhints2.test
FossilOrigin-Name: 163cc1b2f7100827d5803b81dcd97a1417744f66
2017-01-12 11:52:47 +00:00
drh ea8f0a155e Make sure Tcl_AppendResult() always has a NULL-pointer argument at the end.
FossilOrigin-Name: c07aef6f909fe35de110f0b180dbf5aa4c226af3
2017-01-12 11:50:08 +00:00
dan ba47020b63 Changes to allow some multi-row UPDATE statements to avoid the two-pass
approach.

FossilOrigin-Name: 7ae6104a3e0d1d2cacfe2be732f0220a53908132
2017-01-11 21:03:53 +00:00
dan e206ea7f48 Fix a problem causing the pre-update hook to be passed an incorrect rowid
value in some single-pass multi-row updates.

FossilOrigin-Name: 62257eb53c13d4c7ed128d5d89f6f10d4aff945c
2017-01-11 20:10:30 +00:00
dan 2c6fec21dc Fix a problem with single-pass multi-row UPDATE statements that invoke REPLACE
conflict handling.

FossilOrigin-Name: 0a2b8e1b9dc600b5a93622e8eea6218649df5e0f
2017-01-11 19:03:08 +00:00
dan 372f942f17 Fix a problem preventing UPDATE statements that use a range-scan on the PK
index of a WITHOUT ROWID table from using a one-pass strategy.

FossilOrigin-Name: cab86c90945126c24c40cf2dedd053a8c46d00d6
2017-01-11 15:42:14 +00:00
drh 785d8ed0d4 In the STAT4 computations, ensure that the aAvgEq values do not go negative.
FossilOrigin-Name: f58f75b5a06f88ba97bd1a02bee621c64691c6f8
2017-01-11 14:15:29 +00:00
dan f91c1318f4 Changes to allow some multi-row UPDATE statements to avoid the two-pass
approach.

FossilOrigin-Name: 46db23ccd116ce5b9d949f9293be8a2818411b46
2017-01-10 20:04:38 +00:00
dan f112f0b3de Add a test case for ticket [25e335f802dd].
FossilOrigin-Name: e500c15a9f55aed1601f7c14169dd56fd76f1fdd
2017-01-10 17:37:49 +00:00
drh 8e36ddd37e Throw an error if the ON clause of a LEFT JOIN references tables to the right
of the ON clause.  Fix for ticket [25e335f802dd].

FossilOrigin-Name: c92ecff2ec5f178433d21f25c653d0fdd9128d7c
2017-01-10 17:33:43 +00:00
drh 1d21bac8aa Avoid unnecessary calls to the xRoundup() method of the memory allocator when
the soft heap limit is not set.

FossilOrigin-Name: 4209b89eab01814228a178963238e0dffffad2a4
2017-01-10 16:09:46 +00:00
drh d9bcb32ebb Fix a potential assertion fault discovered by OSS-Fuzz.
FossilOrigin-Name: 71c03b59b645884ebd6b9e18713cd2eb8c949870
2017-01-10 15:08:06 +00:00
drh e4a8b8769e Remove a redundant assignment statement.
FossilOrigin-Name: a5fa09657bd6c4ea5fe6712b0f8af2170cbe0381
2017-01-09 19:55:19 +00:00
drh 7441df72be Performance optimization and size reduction in the OP_Variable opcode.
FossilOrigin-Name: 237aa97452e20c312f256a8fd62531e3d447f84b
2017-01-09 19:27:04 +00:00
mistachkin ab61cf7d93 Fix typo in a comment. No changes to code.
FossilOrigin-Name: d38fd22935b1572f4481b39c2f9274329b18ea99
2017-01-09 18:22:54 +00:00
drh e7b554d615 Modify the OP_RowData opcode so that when P3!=0 it is allowed to hold an
ephemeral copy of the content.  This avoids unnecessary memcpy() operations
in the xfer-optimization and VACUUM.

FossilOrigin-Name: 6e106acd74da3baa5c308a76443d2f0a7c904e5e
2017-01-09 15:44:25 +00:00
drh f4e994b23a Add the SQLITE_UINT64_TYPE compile-time option.
FossilOrigin-Name: a5fe03bc419d9c7e6068ed38810e3f183de179b5
2017-01-09 13:43:09 +00:00
drh 68116939eb Improvements to the iIdxNoSeek optimization of sqlite3GenerateRowDelete()
so that it is automatically disabled for BEFORE triggers but works in all
other cases.

FossilOrigin-Name: 3178ec4c27efc4ff84bcd17ddb17ec50a6ac96b3
2017-01-07 14:47:03 +00:00
drh 4cef5b1c81 Critical fix to the previous check-in so that it works when there are
BEFORE triggers that move the cursor before the OP_Delete has a chance to
be applied.

FossilOrigin-Name: db2c0960ffb3b396b20e0441d3edb812254c82bc
2017-01-07 14:26:28 +00:00
drh ad1d9a8707 Avoid an unnecessary btree seek while deleting an index entry due to a conflict
on a REPLACE operation.

FossilOrigin-Name: f0495c5133d0dc04d63521136d6b9ca440792cdf
2017-01-07 03:26:50 +00:00
drh a67b5cb6b3 Avoid duplicate b-tree searches in the duplicate row detector used to
implement DISTINCT.

FossilOrigin-Name: d577dda0a7fbfacda57e8cad2bc4651d2a05d813
2017-01-07 00:56:01 +00:00
dan e1ff3f5e11 Ensure that "PRAGMA case_sensitive_like" and "PRAGMA shrink_memory" set the
number of output columns to 0 (as they are statements that return no data).

FossilOrigin-Name: 6696cd1878be4bd44a24841b04163e52d847711e
2017-01-06 13:49:40 +00:00
dan 1439a1e80f Improve handling of corrupt data in fts5.
FossilOrigin-Name: 609ac1c73f7c2b48a571c178a72383996a9538fe
2017-01-06 11:55:03 +00:00
drh 3d775e7586 Clarify the documentation on sqlite3_column_count().
FossilOrigin-Name: 9ea0baddd893e54ec79399ae83033ae139650535
2017-01-06 01:09:43 +00:00
mistachkin 817be73bfc Remove several non-portable tests for the deprecated temp_store_directory PRAGMA.
FossilOrigin-Name: 28d87789141d816e0bce6d3965ce84c79b803218
2017-01-06 00:02:51 +00:00
dan 2b64313b8d Ensure that sqlite3_column_count() returns 0 for the "set" mode of "get/set"
PRAGMA statements that do not return a value in that case (e.g. page_size,
cache_size, auto_vacuum).

FossilOrigin-Name: 2f57939a5583ae420b525c7e0f0dcda8626fe992
2017-01-05 20:00:08 +00:00
dan 9e1ab1a8a4 Ensure that sqlite3_column_count() returns 0 for the "set" mode of "get/set"
PRAGMA statements that do not return a value in that case (e.g. page_size,
cache_size, auto_vacuum).

FossilOrigin-Name: 5c05d8ec5e895661dae2de30c73dfdeaff93511e
2017-01-05 19:32:48 +00:00
dan ac56ab7e48 Fix handling the case where a sub-query in a FROM clause is itself a UNION
ALL, and one side of that UNION ALL is a query on a view that includes an
ORDER BY. Fix for ticket [190c2507].

FossilOrigin-Name: 590ca83b8e8cdd5d24ed7f10f43e540aa0627f22
2017-01-05 17:23:11 +00:00
drh 5f40cebf43 Fix problems in trigger and foreign key handling when doing REPLACE on a
WITHOUT ROWID table that has no secondary indexes.

FossilOrigin-Name: 571f166ea8721e2322965b6f23e758b78d13baca
2017-01-05 13:50:12 +00:00
drh 34d04d64f0 Ensure that the sqlite3_value_text() interface returns a buffer that is long
enough to hold the complete string plus the zero terminator even when the
input is a zeroblob.  Fix for a problem detected by OSS-Fuzz.

FossilOrigin-Name: 2dc7eeb5b4d2eaf1d843eda56f339fd4cc80d78e
2017-01-05 07:58:29 +00:00
dan f9a12a106b Fix some problems with foreign key processing within REPLACE ops on WITHOUT
ROWID tables with no triggers or auxiliary indexes.

FossilOrigin-Name: c1220b1af62629d7fc2178512786d613cd7ea711
2017-01-05 06:57:42 +00:00
drh 801f55d837 Improved the comment on the block of code the provides the performance
optimization originally added by check-in [925840cfdb].  The original
check-in omitted condition 4, which was the cause of bug [30027b613b].

FossilOrigin-Name: c6506b82aa6583ccde5f673c79526d5f3920b67a
2017-01-04 22:02:56 +00:00
dan 4e1f0efb4d Possible fix for 30027b61. There may still be problems surrounding foreign key
processing.

FossilOrigin-Name: 71ccb1f4c490fdebc7008e884384e7809b849742
2017-01-04 20:13:51 +00:00
drh 87e1e56b5b Adjust filename creation in test_sqllog.c so that it uses leading zeros on
counters, so that files appear in order when sorted lexicographically.

FossilOrigin-Name: 8d670973595bd01ffc9b2ab53b965e6d6d22c573
2017-01-04 14:53:53 +00:00
drh b005f9e620 Performance enhancements in the printf implementation.
FossilOrigin-Name: 82e4001b8caef7b31967f3edcbc1a545c081bdbc
2017-01-04 13:09:05 +00:00
drh 49c5ab243b Factor constant functions out of the inner loop since they are more expensive
than the extra OP_Copy needed to move the result into place.

FossilOrigin-Name: 80ad317f89c46db0d0d252aefdc036a34a61183d
2017-01-04 04:18:00 +00:00
drh ad879ffdb5 Clean up the implementation of constant function factorization.
FossilOrigin-Name: 2ab997e47998d261bd6190bbce5c09f3fbd4cfd3
2017-01-04 04:10:02 +00:00
drh 1e9b53f9bc Attempt to factor out constant functions from the interior of table scans,
since functions can often be expensive to compute.

FossilOrigin-Name: 62e9270a8057d758621da33adb27fad14225f95d
2017-01-04 01:07:24 +00:00
drh 8236f688e8 Changes to the printf implementation for better performance.
FossilOrigin-Name: acdb8f6f10953ed4290aadc9e026edd57d1dd21a
2017-01-04 00:26:28 +00:00
drh a3a40211bd Use compiler intrinsic functions for signed integer math when overflow
detection is needed.

FossilOrigin-Name: d3ac32a6e7f1823450feb3d1089802542090d164
2017-01-03 21:57:11 +00:00
drh 7433ae5df6 Back out the use of __sync_fetch_and_sub() as it does not appear to work.
FossilOrigin-Name: 4c2efd4239bf07eb4b92d4af54edd68ee6312670
2017-01-03 21:50:49 +00:00
drh 5c6b944d16 Fix a typo in a comment.
FossilOrigin-Name: ae087123db8e7d47b25a8d0a98cfd62e85e42fc6
2017-01-03 21:03:37 +00:00
drh b94f2eccc1 Use the CLANG_VERSION macro to control clang-specific features.
FossilOrigin-Name: f8ebeec211483503e135104ef977b3c384a1d789
2017-01-03 20:01:24 +00:00
drh eea46aeafc Use the GCC built-in __sync_fetch_and_sub() to make the sqlite3StatusDown()
routine atomic, and thereby avoid some mutexing.

FossilOrigin-Name: f69ce75b3d94331fdbfa2f3a27d61db24c285d2b
2017-01-03 18:05:04 +00:00
drh 4a47761e0d Make use of the __buildin_OP_overflow() functions from GCC when doing
64-bit signed integer arithmetic.

FossilOrigin-Name: 82cbebb8ee4484f13e5f48d305e20e73063f273e
2017-01-03 17:33:43 +00:00
drh 5c41d00f42 Add the experimental affinity() SQL function when SQLITE_DEBUG is defined.
FossilOrigin-Name: bed0eaa5f50112e64fc97a2afdc9d56cf8f5026a
2017-01-03 14:45:35 +00:00
drh 5424075137 Put the affinity() function implementation inside of #ifdef SQLITE_DEBUG.
FossilOrigin-Name: f778f58ae4ea3e16f51b94591a2c1e563dcb0cde
2017-01-03 14:39:30 +00:00
drh 01e64a1704 Merge all the latest changes from trunk.
FossilOrigin-Name: c27cd8a8127b81d3176f6a5b9915c9b3c69574fb
2017-01-03 14:30:28 +00:00
drh 2710b14c45 Defer size checking on row-value assignments for when the RHS is a SELECT
until after the "*" wildcards have been expanded.

FossilOrigin-Name: 36944be6be5c42096f5da84187ff203af26b08ae
2017-01-03 13:45:22 +00:00
drh b67343d075 Fix a typo on a comment. No code changes.
FossilOrigin-Name: abc27b6023e28a717bfa15648ddc152bda9c7b96
2017-01-03 11:59:54 +00:00
dan f299edb0b0 Add test cases for the fix in [f12ed3ce]. No problems discovered.
FossilOrigin-Name: 548532fdcf84d565c17aed79a6b595e8b62a3ab4
2017-01-03 08:11:24 +00:00
drh 966e291160 Improvements to the way vector assignment size checking is done. Size checks
when the RHS is a SELECT are deferred until after "*" wildcards are expanded.

FossilOrigin-Name: 696219b11049930cdbc38f574820f4bbaf8621bb
2017-01-03 02:58:01 +00:00
drh 49cd39b48c Fix the row-values in UPDATE statements within TRIGGER problem identified
by ticket [8c9458e7].

FossilOrigin-Name: f12ed3ce0bfb2d94c9baad23fdcbd816c72439a1
2017-01-03 01:24:10 +00:00
drh b163748e88 Improved assert()s on the sqlite3ExprListDup() logic for TK_SELECT_COLUMN.
FossilOrigin-Name: 14da99d41f7968bf816203b4ae11c1f0d1ee0b5d
2017-01-03 00:27:16 +00:00
drh 90a7eae84c Test cases for the row-value UPDATE TRIGGER fix.
FossilOrigin-Name: b9b964373c89a491649f366ad7d70ae4d69b891d
2017-01-02 23:43:03 +00:00
drh 3f50bb84f5 Put an ALWAYS() on an unreachable branch in the sqlite3ExprListDup() routine.
FossilOrigin-Name: 2caaaab5e07f6b76d66fbe4e93a4b956937427d8
2017-01-02 23:18:35 +00:00
drh 47073f62bf Proposed fix for the row-value TRIGGER UPDATE problem described in
ticket [8c9458e7].

FossilOrigin-Name: 61a442ea2ceec2cbd327dae0ff5214e1f3c69ec0
2017-01-02 22:36:32 +00:00
drh 63a49ce0b2 Increase the version number to 3.17.0 for the next release cycle.
FossilOrigin-Name: 16415b5aad445c9e4e849018b48538d74eec8944
2017-01-02 19:10:14 +00:00
drh 56d65cd7b9 Provide the SQLITE_DEFAULT_LOOKASIDE compile-time option and make it's default
value be 1200,100 (raised from 512,125 in the latest release).

FossilOrigin-Name: 584da48f9e818f25134e0a62fb7e84f07019511f
2017-01-02 19:02:20 +00:00
drh 83a4f47d57 Change SQLITE_DEFAULT_PCACHE_INITSZ from 100 to 20, which is experimentally
determined to be slightly faster.

FossilOrigin-Name: 12d9493cb29307aec65ceccc68e802e4d0f18112
2017-01-02 18:40:03 +00:00
drh 38eef32172 Avoid unnecessary calls to sqlite3BtreeEnterAll() and sqlite3BtreeLeaveAll()
when no btree is using shared-cache.

FossilOrigin-Name: cfb3158204628eb2fd170090a7f212df0e4ce6c9
2017-01-02 18:19:29 +00:00
drh 197231b160 Add the --all option to the wordcount test program.
Fix the speedtest1 test program so that it builds on MSVC and so that
the --lookaside 0 0 option works.

FossilOrigin-Name: cb338f367e5408861bd7c0fbf74cebdbd8e3c515
2017-01-02 12:20:15 +00:00
drh e772bc7d30 Version 3.16.0
FossilOrigin-Name: 04ac0b75b1716541b2b97704f4809cb7ef19cccf
2017-01-02 11:57:58 +00:00
drh 245ce62ea2 Detect row-value comparison size mismatches even when the size of one
operand is obscured by an unexpanded subquery.

FossilOrigin-Name: 2c4d167ccd4be591487f404de9ee629fd484c8bf
2017-01-01 12:44:07 +00:00
drh e2b45d1789 Add the --help and --all options to the wordcount test utility.
FossilOrigin-Name: 18baeadfc89f6252e38dbc22904b11c5b56347ee
2016-12-31 21:55:23 +00:00
drh aa430bfb00 In speedtest1.c, make the "--lookaside 0 0" option completely disable lookaside.
FossilOrigin-Name: 52b99bcbf18f34196ec29f829c6af539e0d05524
2016-12-31 18:37:50 +00:00
drh eb25713e91 Minor #include change to speedtest1.c so that it will compile under MSVC.
FossilOrigin-Name: 8c28fde004678c85524770969eb001719b109179
2016-12-31 14:33:05 +00:00
dan 3043b53222 Fix a crash that could occur following an OOM in the group_concat() function
if the second argument is an SQLITE_BLOB value.

FossilOrigin-Name: 14d855d2b2b5b3485e0673d11405db7266b34c6d
2016-12-30 17:40:14 +00:00
drh 1d081ab39e Strengthen the defense against OOM in the instr() SQL function.
FossilOrigin-Name: a0971e713682a73d8c7c20511db256c20d2f6388
2016-12-30 15:16:20 +00:00
drh 5f4ade0473 Add a test to ensure that the app-defined pcache xFetch() method is never
passed a key of zero.

FossilOrigin-Name: 0bdbe49c6d392c4c86a6c01219c9d91d150dea7d
2016-12-30 14:25:42 +00:00
dan 895decf6b5 Avoid passing NULL pointers to memcmp() or memcpy(), even when the
"number-of-bytes" argument is passed 0.

FossilOrigin-Name: 56ff72ab44288296efc99a608f7edc4346366a50
2016-12-30 14:15:56 +00:00
drh d0d7e13511 Fix a harmless compiler warning in fuzzcheck.c
FossilOrigin-Name: 2842bc60538369f888c7df8365858c910322277d
2016-12-30 12:10:48 +00:00
drh 9c4dc22926 Disable the pagerAcquireMapPage() routine if memory-mapped I/O is disabled.
This fixes a harmless compiler warning on OpenBSD.

FossilOrigin-Name: 3e25ba6e42fba239795a465b8510386a361ee5be
2016-12-30 12:06:22 +00:00
drh fb4e3a3bbb Encode a 64-bit integer literal in date.c as a constant expression so that
it works on older compilers.  Also fix a harmless compiler warning in vdbe.c.

FossilOrigin-Name: f57952bac652901e1bd48b68301941efbcf29dc4
2016-12-30 00:09:14 +00:00
drh 96ada59cbb Fix harmless compiler warnings in the command-line shell and in Lemon.
FossilOrigin-Name: afcdc4a60e357d171156e0de705bf7ad1b37daab
2016-12-29 19:48:46 +00:00
drh cae20d5cf1 In kvtest.c, use stat() instead of fseek()/ftell() to determine the size of
a BLOB to be read directly from disk.  This makes the pile-of-files database
more competative against SQLite.

FossilOrigin-Name: a7dca29f03e037fe71cc600db97f8058e3bd28a4
2016-12-29 17:25:06 +00:00
drh 03d0c20bbd Add the kvtest.c test program used to show that it is many times faster to
read thumbnail and similar BLOBs out of an SQLite database than it is to read
them as separate files from the filesystem.

FossilOrigin-Name: 8074d59cf177cb91ee371e2660f2c59ce540b7e2
2016-12-29 16:58:01 +00:00
drh 2f917e05d7 Add more detail to the header command to further explain how to compile and
use the kvtest.c utility.

FossilOrigin-Name: 55d29839c9fafe9e6a694f5790151d1f22396b01
2016-12-29 16:49:22 +00:00
drh d7b9b97c3b Fix kvtest.c so that it compiles using MSVC.
FossilOrigin-Name: e2bbeae7e77cde531885ca492494a02e5322154d
2016-12-29 16:18:35 +00:00
drh 6739c692ba In kvtest.c: do not show the --cache-size setting on fopen() runs.
Show progress for the (potentially slow) "export" command.

FossilOrigin-Name: b0f58d2470e08b9c217afd19fcfde3e6d1007d1d
2016-12-29 15:26:50 +00:00
drh 61c565f63b Improvements to the kvtest.c utility. Added the --cache-size option.
Additional reporting of version and settings at the end of "./kvtest run".

FossilOrigin-Name: f6fcac6ae8b3bffee6bf994eef2064affd301a95
2016-12-29 14:44:43 +00:00
drh cac028ba19 Add the kvtest.c test program for measuring key/value read performance under
various scenarios.

FossilOrigin-Name: 489e0787c1ea47963174387e8ade6295ceff568e
2016-12-29 03:57:43 +00:00
drh 402124de5c Do not allow the nockpt.test module to run under the inmemory_journal
permutation.

FossilOrigin-Name: a6af06f164b1f65779e2171ec4946119c66f9be8
2016-12-27 15:59:15 +00:00
drh 575242f66f Allow sqlite3_interrupt() to be invoked on a database connection that is in
the process of being closed even if SQLITE_ENABLE_API_ARMOR is defined.

FossilOrigin-Name: 7854bee260996087bdb7f8729ba8cfb4f467f93f
2016-12-27 13:33:52 +00:00
drh 5ad74a761d Adjust a corruption test case to accommodate the sqlite3BtreeInsert()
optimization of check-in [0b86fbca66].

FossilOrigin-Name: 4cb0945f13f2040c8b67936b950da48fc951d55d
2016-12-27 12:45:41 +00:00
drh 218c66e0e3 Disable new test modules nockpt.test and interrupt2.test for incompatible
permutations.  Add a CORRUPT_DB term to an assert() in vdbe.c.

FossilOrigin-Name: a54e619e6f0266932c8873f9ac826fd042a0602f
2016-12-27 12:35:36 +00:00
drh 1aa346950e Avoid a potential (harmless) signed integer overflow in memory usage
accounting when calling sqlite3_realloc() to reduce the size of an
allocation.

FossilOrigin-Name: 2d71cbdf6bc24f0269027c70b39ea7f342436bdb
2016-12-27 12:08:36 +00:00
drh c595419910 Minor changes to make some newer test cases work under more compile-time
options.

FossilOrigin-Name: 382eea36c56f866efee1321f643687a4061e8b9e
2016-12-27 02:43:47 +00:00
drh dfcfff646a During fuzz testing with the fuzzcheck utility program, impose a record
length limit of 100MB and a limit on the length of LIKE strings of 50 bytes.

FossilOrigin-Name: edc9db41f3ee200ba44579a46ed8331bbbbf539e
2016-12-26 12:25:19 +00:00
drh e6ce2b6704 Enable ossfuzz.c to build even if SQLITE_OMIT_PROGRESS_CALLBACK is defined.
FossilOrigin-Name: a37c00dcd192f9d610ecb91810ef57ef41d1f6a6
2016-12-26 12:14:44 +00:00
drh 9cc5b4eeb5 Remove an incorrect ALWAYS() macro from balance_nonroot(), which could result
in corrupt databases if it were optimized out.  This ALWAYS was added 
only two weeks ago (check-in [f9f2e23bbd68a]) and has never appeared in an
official release.

FossilOrigin-Name: e447b23cfd7bb31817e42adb3a98868d351c6b8a
2016-12-26 01:41:33 +00:00
drh a1a523a5bb Add the built-in affinity() SQL function.
FossilOrigin-Name: 57e40e1cb1bcd3dd8473d2fdeecc9c7ff3d6192b
2016-12-26 00:18:36 +00:00
drh beaf514e23 Enhance the fuzztest utility with the --prng-seed option. Always reseed the
PRNG prior to each test.

FossilOrigin-Name: 8c5187f69d719b69aa6eaf2dc8f89243e5979222
2016-12-26 00:15:56 +00:00
drh 6a5a4208fc Combine the implementations of the ".tables" and ".indexes" commands in the
command-line shell.  The ".indexes" command now puts the indexes in multiple
columns, just like ".tables" and shows all indexes in all attached databases.

FossilOrigin-Name: def29333655691c7d54451193be13445a2857d29
2016-12-24 21:32:40 +00:00
drh 2951809ed4 The schema name "main" is always an acceptable alias for the primary database
even if the primary database is renamed using SQLITE_DBCONFIG_MAINDBNAME.

FossilOrigin-Name: 2f481b854f04bec546eb172d1b6dbc88067d3fda
2016-12-24 19:37:16 +00:00
drh b20a61b704 Change the output format of the ".databases" command in the command-line shell
so that it shows the schema name, a colon, and the corresponding filename.

FossilOrigin-Name: 8558512e9ca343300a767ef23810f2d7b50fd925
2016-12-24 18:18:58 +00:00
drh a4b81d2a44 In the command-line shell, improve the formatting to the ".databases"
command and on the ".tables" command, only show the schema prefix for
databases past the first ("main") database.

FossilOrigin-Name: c0d5626e274cbf8c2d2167183c4d6835d72dae57
2016-12-24 18:04:28 +00:00
drh 6bd4dc6dc4 Fill in missing opcode documentation entries for OP_SorterNext and
OP_SorterSort.

FossilOrigin-Name: 2940661b8c014b94973e05c44f1b1f4f443dbdd3
2016-12-23 16:05:22 +00:00
drh cfdc235ec3 Use the VList object to capture the mapping between SQL parameter names and
variable numbers in a single memory allocation.

FossilOrigin-Name: 99fddf2ecb7202bfdf5ddc4cc1c4e155c883f7ec
2016-12-23 13:54:22 +00:00
drh ce1bbe51b5 Add check to prevent a VList from growing after pointers to labels have been
taken.

FossilOrigin-Name: aa23d7eaf69f5ecbf9500b2353846094cae41e6c
2016-12-23 13:52:45 +00:00
drh f326d66d61 Fix the VList object so that it actually works.
FossilOrigin-Name: 9dcd85698af46fd5ba34004ca690d368c4ae3078
2016-12-23 13:30:53 +00:00
drh 9bf755cc44 Use the VList object to replace Parse.azVar for tracking the mapping between
SQL parameter names and parameter numbers.  There is a performance
improvement, though there are still a few hiccups in the current code.

FossilOrigin-Name: 68ecafa1425a41358c88f41efea3262f1b4490f2
2016-12-23 03:59:31 +00:00
drh 344a1bf133 Fix harmless compiler warnings.
FossilOrigin-Name: fa86db2f915c0a189c3be02b1aaa7f24d339d7d6
2016-12-22 14:53:25 +00:00
drh cdfffed790 Change the default lookaside configuration from 500 slots of 128 bytes each to 125 slots of 512 bytes each. This uses the same amount of memory (64,000 bytes) but seems to perform much better in test applications.
FossilOrigin-Name: 52a12e47de88744187bd1c71f2820885cde414a8
2016-12-21 21:26:58 +00:00
drh a582b01698 Simplifications to the way UnpackedRecord objects are allocated. Smaller
and faster code that also fixes a subtle (currently unreachable) bug.

FossilOrigin-Name: f7ab01f254cd9d7006b8dec29adb234a671b8e6f
2016-12-21 19:45:54 +00:00
drh f99dd359d0 Change the OP_IfNotZero opcode so that it decrements register P1 by 1 rather
than the value in P3, and so that it only decrements if originally positive.
This avoids decrementing the smallest 64-bit signed integer.

FossilOrigin-Name: 165c044686212fbf7182dd560ad1e57eb4cc9838
2016-12-18 17:42:00 +00:00
drh 22d709dd91 Refinements to the new dbfuzz test program.
FossilOrigin-Name: 50325abe79b6a79b09ec6a1cee7d80ca02337428
2016-12-17 21:07:30 +00:00
drh 6918e2f9b2 Enhance fuzzershell.c to read and execute SQL commands in the autoexec table
of the database under test.  Add the dbfuzz.c test program combining selected
features of fuzzershell.c and fuzzcheck.c.

FossilOrigin-Name: ef6e071a62cd79a0edbbef9f41ca9482540e5cb8
2016-12-17 20:27:22 +00:00
dan 11da002c02 Fix a problem in the shell tools readfile() command causing blobs to be
truncated at the first embedded 0x00 byte in release builds, or an assert() to
fail in a debug build.

FossilOrigin-Name: 8dedd6ad44bd1d103dced9d1350188cb2327128d
2016-12-17 08:18:05 +00:00
drh d47c6c495d Add the ".lint fkey-indexes" command to the command-line shell.
FossilOrigin-Name: 94689e3bdac2eabbcf1a51d741c2604ed4bd8a40
2016-12-16 18:43:49 +00:00
drh 3fd9f33bd1 Fix minor issues with the ".lint" command implemention in the shell and
the shell help text related to ".lint".

FossilOrigin-Name: 1268dc77712d85de0b62332c88b22f7489f4e87f
2016-12-16 18:41:11 +00:00
drh 186c930702 Built-in PRAGMA statements without side-effects can be invoked as
table-valued functions by prefixing their name with "pragma_".

FossilOrigin-Name: d66ec5cfb67c6c8134fb642e0c2f72113fe1b7fd
2016-12-16 18:14:19 +00:00
dan 3c7ebeb548 Change ".fkey_missing_indexes" to ".lint fkey-indexes".
FossilOrigin-Name: ee621ade38c11806e1df57c459da5f018a6d0670
2016-12-16 17:28:56 +00:00
dan dd9e0be46a Update .fkey_missing_indexes to use the built-in pragma vtabs.
FossilOrigin-Name: 3ab05987b0cc12af64bf32d885d04aff45d7a77c
2016-12-16 16:44:27 +00:00
dan c17f6255a4 Merge the pragma-as-vtab change into this branch.
FossilOrigin-Name: 4ba45e722371ca4343e3563e7e1c2896b48c9a87
2016-12-16 16:13:45 +00:00
dan 69b9383edf Fix a problem causing the planner to generate sub-optimal plans for some queries
that use recursive WITH sub-queries with LIMIT clauses.

FossilOrigin-Name: 053a149cc8244a7f85137129cfcb8622efe90306
2016-12-16 15:05:40 +00:00
drh d8b7200b84 Fix an error in the way the "schema" argument to some pragma virtual tables
is handled.

FossilOrigin-Name: 546821e29edb0282a4b1d8f49512e36027a6bf6d
2016-12-16 04:20:27 +00:00
drh 30776acd74 Simplifications to facilitate full test coverage.
FossilOrigin-Name: 01afc515970a868c6a36d9a598453d0fde9e39ca
2016-12-16 02:31:50 +00:00
drh 9a63f09204 Minor bug fixes and enhancements to the pragma eponymous virtual tables.
FossilOrigin-Name: 3f8f461504139a4efea0e033e3a274cc4b2d3072
2016-12-16 02:14:15 +00:00
drh c06bbceb9c Merge enhancements from trunk, and especially the ability to use
temp.sqlite_master as an alias for sqlite_temp_master.

FossilOrigin-Name: 994a4401f5c34fed17af420761291b03072a5ea1
2016-12-16 01:09:22 +00:00
drh e0a04a36a6 All temp.sqlite_master to be used as an alias for sqlite_temp_master.
FossilOrigin-Name: 8d646905b830d5bb29092e103ac5cb499b3c7e5a
2016-12-16 01:00:21 +00:00
drh ae7045cd53 Fix the cost estimation in the BestIndex method of the eponymous pragma
virtual table implementation.

FossilOrigin-Name: 7126807a186746a8663fbaa267d63214d06476e4
2016-12-15 21:33:55 +00:00
drh d7175ebeaf The pragma as eponymous virtual table mechanism now appears to work.
FossilOrigin-Name: 2c274a1a7b57ef1208901fbc1d96d39c0d492652
2016-12-15 21:11:15 +00:00
drh 2fcc1590c4 Code to automatically create eponymous virtual tables for read-only pragmas.
Compiles, but does not yet work.

FossilOrigin-Name: 988a61e8b03f302c69d11898d1ea95f002cba1a5
2016-12-15 20:59:03 +00:00
drh 35a1895990 Do exponential rather than linear expansion of the SrcList.a array when
appending new elements, to reduce the number of malloc() calls.

FossilOrigin-Name: 4e3749127e7249f46e17bfabc614b0876f60565a
2016-12-15 18:59:14 +00:00
drh c232aca184 Do more pragma processing from tables rather than in-line code.
FossilOrigin-Name: a88ca3524b97f296dffc68335466b3767a681747
2016-12-15 16:01:17 +00:00
dan f9647b6625 Add the -groupbyparent option to the ".fkey_missing_indexes" command.
FossilOrigin-Name: 976c51b4836dfba2ce9b246334a85bda08ac526f
2016-12-15 06:01:40 +00:00
dan 35ac58eabc Add the experimental ".fkey_missing_indexes" command to the shell tool. To
identify indexes that should be created on child keys if FK processing is to
be enabled.

FossilOrigin-Name: 7df23aca1f7c7b769d614d740b3fda3073f46ba9
2016-12-14 19:28:27 +00:00
drh 79df77821a Refactor the Table.nRef field as Table.nTabRef for easier grepping.
FossilOrigin-Name: 9cae4c2e300e20304ced0dc8c1415c4922185928
2016-12-14 14:07:35 +00:00
drh d07df8e76a Increase the size of the reference count on Table objects to 32 bits.
FossilOrigin-Name: d08b72c38ff6fae6ddf7dc84a54f6d7189876289
2016-12-14 13:54:25 +00:00
drh 5ed7de09b0 Fix the configure makefile to align it with the manual makefile. Unsaved
changes from the previous check-in.

FossilOrigin-Name: 00a184b65f73f361e1728fea06529f746fab66b5
2016-12-14 11:39:52 +00:00
drh c06e54345c Adjust the unix makefiles so that "make test" runs fuzzcheck prior to even
attempting to build the other test programs.

FossilOrigin-Name: bb48f7a55945da4cee369bae0809037900fcaac7
2016-12-14 11:23:51 +00:00
drh ac178b3d7f Three times faster sqlite3SrcListAppend() in the common case by avoiding the
call to sqlite3SrcListEnlarge() for the first allocation.

FossilOrigin-Name: 0ea2762f1d8f6a93ae2ee3b7b835927a474c6f66
2016-12-14 11:14:13 +00:00
drh 8a123d60a8 Fix the optimization that prevents writing freelist pages to the journal.
FossilOrigin-Name: 6aa9b26544cbd0b41115c5f127dcf9a286d17e2b
2016-12-14 10:30:12 +00:00
drh 79f20e96dc In the command-line shell, in the output of the ".dump", ".schema", and
".fullschema" commands, convert CREATE TABLE statements that appear to come
from shadow tables into CREATE TABLE IF NOT EXISTS statements.

FossilOrigin-Name: c7021960f5c070fb5c9db9e41b4000d3dc065f42
2016-12-13 23:22:39 +00:00
drh 380c08eaad Fix harmless compiler warnings.
FossilOrigin-Name: ed2c9f3738c96d8e3dbece7ccb721cb1a8ae8fac
2016-12-13 20:30:29 +00:00
drh fc4111f7d6 Convert sqlite3PagerGet() into a pointer-dispatched virtual method. This
makes it about 25% faster.

FossilOrigin-Name: 7f88bb44129a0cd36e27e00dc7c37e87cf3c90f7
2016-12-13 18:47:54 +00:00
drh cbed604f52 In the pager, avoid checking for the illegal page number 0 except when creating
a new page.

FossilOrigin-Name: dee20ba982125ea98c280ad1571789af0f393903
2016-12-13 18:34:01 +00:00
dan 68a494c06f Fix a problem causing SQLite to return false "foreign key violation" errors
when there is a partial (i.e. WHERE constrained) UNIQUE index on the parent
key columns. This bug did not cause SQLite to allow illegal data to be
inserted into the database, only to reject legal operations.

FossilOrigin-Name: 850877d1ea43104cc215353414b870c340acced2
2016-12-13 16:57:49 +00:00
drh d5df3ff2cc Further refinements to the virtual method implementation of
sqlite3PagerGet().

FossilOrigin-Name: 67df44464847b43f8c0b186157e31cc66c1e5796
2016-12-13 15:53:22 +00:00
drh 12e6f68279 Make the sqlite3PagerGet() interface into a virtual method, with different
implementations based on the current state of the pager.  This gives a small
performance increase by avoiding unnecessary branches inside the various
methods.

FossilOrigin-Name: df5bb90d208e0633056389e97696d260e3830e8d
2016-12-13 14:32:47 +00:00
drh 26f419800a Add the --mmap option to the speedtest1 program and to the speed-check.sh
script that is frequently used to run speedtest1.

FossilOrigin-Name: 1a636d5e0eec0a4d968519d1dfd35a983e512c78
2016-12-12 23:24:08 +00:00
drh 2a70254f74 Remove unnecessary MemPage initialization resets in the autovacuum ptrmap
processing.

FossilOrigin-Name: 1b36fbb9f05f3a5844e198b489bff36ef6cd908c
2016-12-12 18:12:03 +00:00
drh 5fa3d6ec3b Faster operation for large in-memory databases.
FossilOrigin-Name: 9675518b33e8d40769daefb860dc748113f750b6
2016-12-12 16:08:44 +00:00
drh 6606586d81 Performance optimization in sqlite3PagerWrite().
FossilOrigin-Name: d4dff10a3d4edf8e1cc77c0a4f185d33f2c2e953
2016-12-12 11:05:15 +00:00
drh 585a59795c Updates to the tokenizer for EBCDIC. No changes for standard builds.
FossilOrigin-Name: 4fc6580ffa7232aaf751f38f90c45edc8863abe5
2016-12-12 01:53:36 +00:00
drh 77dc0ed621 Size and performance optimization in btreeInitPage() in the freeblock
validation step.

FossilOrigin-Name: 57deb1b412e0c328528f2b4d697e326bfd028dca
2016-12-12 01:30:01 +00:00
drh f0bc50aa3a Change the order of comparison for divider cell overflow in balance non-root
to avoid a (harmless) reference to an uninitialized variable.

FossilOrigin-Name: f9f2e23bbd68a8994621623446868d666df52eff
2016-12-12 00:58:40 +00:00
drh 8c730bc5c5 Avoid an unnecessary memset() in the sqlite3BtreeInsert() routine.
FossilOrigin-Name: 35ecd4ebc55579175f7c934e4eb1edb969008428
2016-12-10 13:12:55 +00:00
drh fbd8cbdcf5 Reorder the fields in the VdbeCursor object so that those that need to be
bulk zeroed on allocation are grouped at the beginning, and the memset()
only runs over those fields that really need it.

FossilOrigin-Name: 8165f88bb1d40693d67005a8d5dc499085f64b91
2016-12-10 12:58:15 +00:00
drh 719da30d53 Avoid signed integer overflow when dealing with a LIMIT and OFFSET whose
sum exceeds the maximum integer value.

FossilOrigin-Name: c9bdf7adb4745cfaf23d9afd496e71fa37793108
2016-12-10 04:06:49 +00:00
drh 2d08343a91 When doing the sqlite3BtreeInsert() overwrite optimization, make sure the
memcpy() does not extend off the end of the page.

FossilOrigin-Name: 684ef4582ed19b2af22dda6fc085c70464f92f1b
2016-12-09 19:42:18 +00:00
drh f923825424 Additional comments and an assert on the sqlite3BtreeInsert() overwrite
optimization.

FossilOrigin-Name: c1f0ae9d2981a19875103750379ad26f2575f878
2016-12-09 18:09:42 +00:00
drh 80159da6c6 In sqlite3BtreeInsert() when replacing a re-existing row, try to overwrite
the cell directly rather than deallocate and reallocate the cell.

FossilOrigin-Name: 0b86fbca6615ccf1f3a62614db577a8acbec6d9e
2016-12-09 17:32:51 +00:00
dan 55092c1504 Fix an fts5 bug that could cause a crash following an OOM error or
sqlite3_interrupt() interrupt.

FossilOrigin-Name: 0ea3ece988883874bb88e3daaa220d7fc0cf36ef
2016-12-09 16:12:04 +00:00
drh a2ee589c46 Avoid unnecessary zeroing of fields in the MemPage object that are going
to be reinitialized before use anyhow.  A smaller and faster binary results.

FossilOrigin-Name: 01ada3d1068476f90dcae02cb089001ea4bcc23d
2016-12-09 16:02:00 +00:00
drh e0568d6fb8 Fix an obscure problem in range estimation with STAT4.
FossilOrigin-Name: 1f16c9a76bc48331799f33b30d143c632fe0e7db
2016-12-09 00:15:17 +00:00
drh 4c177424a2 Fix the showstat4 utility program so that is displays strings using
standard SQL notation (single quotes) rather than C-style notation.

FossilOrigin-Name: 92998e4afbe4da1723e7e5155071a0e7242bd6ff
2016-12-08 23:52:38 +00:00
drh 5f00b9bea7 Fix a minor error in the cg_anno.tcl script causing the cycles-per-file counts
to be miscomputed.

FossilOrigin-Name: b26df26e184ec6da4b5537526c10f42a293d09b5
2016-12-08 19:04:36 +00:00
drh 23ee9dc369 Update the tool/cg_anno.tcl script to give a summary of cycle counts by
canonical source file name.

FossilOrigin-Name: 254a83bf30c15d6a355db309ccb97a8744675cc3
2016-12-08 18:36:19 +00:00
drh 2700acaacd More changes to take advantage of the sqlite3VdbeAppendP4() method.
FossilOrigin-Name: 83bc5e40af9b20afeed008bf3e2669b7ac9e2dc8
2016-12-08 01:38:24 +00:00
drh f14b7fb73b Add the sqlite3VdbeAppendP4() method for adding P4 content to the most recently
coded instruction.

FossilOrigin-Name: 28883e8f3e92a8015fb5f6c8ae8580833931543d
2016-12-07 21:35:55 +00:00
drh 861b1307cb The use P4_DYNAMIC in place of the P4_MPRINTF operand type.
FossilOrigin-Name: 3954f83798ed78527280c9db6360c62a5134b9ec
2016-12-07 20:22:31 +00:00
drh bdaa1ee2ee Performance optimization for sqlite3VdbeAddOp4().
FossilOrigin-Name: 04716c907bf9fc9b827e18fdc7b4e1069e201536
2016-12-07 20:09:51 +00:00
drh 4ed8c83cfd Put the SQLITE_UNTESTABLE compile-time option in the correct order for
PRAGMA compile_options.

FossilOrigin-Name: 24574a15a336ffcb961334f84b56e9ab98490a79
2016-12-07 17:06:12 +00:00
drh d12602a9c5 Rename the SQLITE_OMIT_BUILTIN_TEST compile-time option to SQLITE_UNTESTABLE.
FossilOrigin-Name: f360818737e73ee4f944685a547abc8f14f47819
2016-12-07 15:49:02 +00:00
dan 44c5604ced Prevent the flattening or where-term push-down optimizations from obscuring
misuses of SQL row values that can lead to crashes or assert() failures.

FossilOrigin-Name: 433d16ff3adfede3be53d5b0e0512f37e225591b
2016-12-07 15:38:37 +00:00
drh 9314bd5fe2 Always honor the sqlite3.dbOptFlags bitmask, regardless of compile-time
options.  Continuing fix for ticket [da78413751863].

FossilOrigin-Name: afab166313e0b8ad530df99887437a362398ed02
2016-12-07 13:49:11 +00:00
drh abfd35ea03 Performance improvement and size reduction in the Expr node allocator
function sqlite3PExpr().

FossilOrigin-Name: 2a81763e68cdf9b8c46389b1e1a87bc2084b53e7
2016-12-06 22:47:23 +00:00
dan 2b519ab015 Add missing nul-terminator to a Tcl_AppendResult() call in tclsqlite.c.
FossilOrigin-Name: 0820f8b3dedfc846d187844847dfa8617539fc9a
2016-12-06 19:33:42 +00:00
drh 634133183c In the LEMON parser-generator, fix the stack overflow processing so that it
correct invokes the destructor on the top-level of the parse stack.

FossilOrigin-Name: e8247065cf1d929f42d13864f8a1886ed4d329cd
2016-12-06 17:59:05 +00:00
drh e6ad1717da Fix a harmless redundant local variable declaration in the date/time function
logic.

FossilOrigin-Name: b4bc40d1836d8ed0803b81a734ce48be8e9d434a
2016-12-05 20:16:04 +00:00
drh 25ef7f55d7 Work around a bug in the definition of "ino_t" on some versions of Android.
FossilOrigin-Name: 8df492c1711bfea250264fdaa4892e0842705f83
2016-12-05 20:06:45 +00:00
drh 6d4e9c3d92 Simplify the date/time function logic for improved rebustness and also to
decrease the size of the binary.

FossilOrigin-Name: 6e144735ed0cd3d4461ae6a4d8034264563e3165
2016-12-02 19:07:03 +00:00
drh 861a56821b Extend the valid range of 'unixepoch' dates from JulianDay 0 through 9999-12-31.
FossilOrigin-Name: 768c9859b21a3c88be084d6dd87acab4211b3a87
2016-12-02 17:08:27 +00:00
drh 7a40707b1f Test cases for the improved LIKE/GLOB matcher.
FossilOrigin-Name: 0bdb7ae126d3909344640813489ee68ecad041c4
2016-12-02 02:19:24 +00:00
dan edaeba5e64 Avoid clearing the EP_FromJoin flag from terms in ON clauses when flattening
sub-selects. Possible fix for [2df0107b].

FossilOrigin-Name: a427c4052820d90c3c8c23abf9097f973e564010
2016-12-01 19:58:01 +00:00
dan 92ddb3bd02 Avoid clearing the EP_FromJoin flag from terms in ON clauses when flattening
sub-selects. Possible fix for [2df0107b].

FossilOrigin-Name: 8bed4cd549759a93c4a087d8d8c08c0068ba8d59
2016-12-01 19:38:05 +00:00
drh 807b90f679 Performance improvement for GLOB and LIKE matching for patterns with two
or more multi-character wildcards ("*" or "%").

FossilOrigin-Name: 2df0ebf95f6a25c77777c33685303e81550fd739
2016-12-01 18:57:58 +00:00
drh 698a01ca2f Faster version of patternCompare() that uses new return values rather than
an extra parameter to communicate wildcard information back up to parent
searches.

FossilOrigin-Name: a1e2b6ce3af690ae91bda3d056357205c4018da7
2016-12-01 18:49:40 +00:00
dan 1a4a73764c Modify the patternCompare() function (used for GLOB, LIKE) to better handle
patterns containing multiple wildcard characters ("*", "%").

FossilOrigin-Name: c5e5614d98a752738c081fecdd1e349a1a92b0e5
2016-12-01 17:34:59 +00:00
drh c9c81dc6d7 Add the remember(V,PTR) extension function which copies an SQL value into
an application variable.

FossilOrigin-Name: d2d30914d81022d7d4e1670caf9326524520deaf
2016-11-30 16:54:52 +00:00
drh 77320ea48d Fix then handling of the (oversized) integer literal -0x8000000000000000.
FossilOrigin-Name: 3816bb415ecfd4f36430d0fcbc878e382975de60
2016-11-30 14:47:37 +00:00
drh ab5be2e651 Change the OP_DecrJumpZero opcode back to its old behavior of always
decrementing, except top the decrementing when it reaches the largest negative
number.

FossilOrigin-Name: 9d0d8c2e7c529562889de02346733dcb532e9388
2016-11-30 05:08:59 +00:00
drh b5489b88b0 More improvements to boundary cases in the date/time functions, flowing out
of branch coverage testing.

FossilOrigin-Name: 1218005ab7b52ef45db1354d17fdd8a1a1af9854
2016-11-30 04:07:57 +00:00
drh 64777ba834 Prevent a warning about integer overflow when using a very large negative
LIMIT.

FossilOrigin-Name: 96106d5620eae51474234f4eec1d2c5bd570d486
2016-11-30 01:05:41 +00:00
drh d76a902c87 Further changes to the date/time functions to suppress harmless signed
integer overflow warnings that could have occurred when doing out-of-range
date calculations which, according to the docs, give undefined results.

FossilOrigin-Name: dc453b3403450b1d8cc53daf0721fed025b9053c
2016-11-30 00:48:28 +00:00
drh 3edb157e23 The documentation says that the built-in date-time functions give undefined
results for dates before 0000-01-01 and after 9999-12-31.  Change the
actually implementation so that the answer given is really NULL.  This also
avoids unnecessary hand-wringing over an signed integer overflow that might
otherwise occur when processing out-of-bound dates.

FossilOrigin-Name: d410a839752153c6d8be08f758abfbc16475745a
2016-11-29 20:39:48 +00:00
drh bc60368d6f Fix broken hyperlinks to the sqlite3_snapshot objection definition
in the documentation.  No changes to code.

FossilOrigin-Name: 9021f6875f897d8b609ebcc04162dc6e0b529a4a
2016-11-28 21:22:26 +00:00
dan 158e4e56d7 Simplify some code in fts5_expr.c. Add some extra test cases for the same.
FossilOrigin-Name: 7cc2d60dce90b8d4dca35708e33002ae6387806e
2016-11-28 14:52:23 +00:00
drh dd5fa17d3c Add the sqlite3_snapshot_recover() interface and related functionality.
FossilOrigin-Name: b70c85ce6d07b08e13f4ea99edb8f4855a6d7580
2016-11-26 19:44:40 +00:00
drh 6412a4c8a5 Clarification of the behavior of sqlite3_stmt_readonly() on BEGIN IMMEDIATE
statements.  The is comment changes only - no changes to code.

FossilOrigin-Name: a4205a83e4ed977a89ecae665604993711f7dd3f
2016-11-25 20:20:40 +00:00
drh 9057fc7c7f Remove the OP_RowKey opcode. Use OP_RowData in its place.
FossilOrigin-Name: 6ac7b07a4aff2e1a9031289e3dafdb9ac0071c24
2016-11-25 19:32:32 +00:00
drh cb3cabd01b Refactor the sqlite3BtreeKey() and sqlite3BtreeData() internal interfaces
into sqlite3BtreePayload() and sqlite3BtreePayloadChecked(), respectively.
This is a continuation of the optimization started by check-in
[2d831074cf].  The result is a slightly smaller and faster binary.

FossilOrigin-Name: 49ebc219faea30eaa61def4a3fba2817b9c58a86
2016-11-25 19:18:28 +00:00
drh 06a09a828a Small performance increase and size reduction in the OP_Column opcode.
FossilOrigin-Name: a9498407e646305e7b60115d63e85c642bbd1c3f
2016-11-25 17:03:03 +00:00
drh e9bb566096 Performance enhancement to sqlite3_snprintf().
FossilOrigin-Name: c53dca7fadd81ea340fef776373cbb122c9ccd46
2016-11-25 15:47:53 +00:00
drh 043e586e29 Performance improvement in sqlite3StrAccumFinish() for the common case where
no memory allocation is required.

FossilOrigin-Name: b6acf5d4ef016326a079463e70e71c2fc95a352d
2016-11-25 15:11:26 +00:00
drh 36fd41e52b Add a comment to help clarify the EP_FromJoin hack in exprCodeBetween().
FossilOrigin-Name: 6df7c5747e0247b14bf015ef4320ddcf6fccf694
2016-11-25 14:30:42 +00:00
drh 36f49d0565 Fix the error message for invalid ".mode" arguments in the command-line shell,
so that it mentions the new "quote" mode.

FossilOrigin-Name: 9a603a18ef626b7d7a24b82eb961d6d8b4926195
2016-11-23 23:18:45 +00:00
dan 4b72524072 Code constant vector components outside of any loops in CASE and BETWEEN
expressions. Fix for [1a684656].

FossilOrigin-Name: c08aff13ead3e6a8b92c0f031b08f7e556922e70
2016-11-23 19:31:18 +00:00
drh 30642cf4d2 Correctly display the names of SQL functions in the VDBE_PROFILE output.
FossilOrigin-Name: 161192f17273f32f1b3b82d41135aaca047e9a83
2016-11-23 14:19:11 +00:00
drh 4b4ffadb43 Merge bug fixes and enhancements from trunk.
FossilOrigin-Name: e2c4bdf54fc1b9605226c7d6c79ef4f8302d6213
2016-11-22 22:23:56 +00:00
drh bc88711d08 Enclose the sqlite3WalSnapshotRecover() routine within
FossilOrigin-Name: e7be3183eb25e0f9f04b9e251ff37fa5e50cc1a7
2016-11-22 21:11:59 +00:00
drh e74cc5c9bc Add a new requirement mark for CAST expressions.
FossilOrigin-Name: bee2859b953c935c413de2917588159d03c672d9
2016-11-22 20:29:05 +00:00
drh 50da663516 Update requirement marks to reflect changes in wording in the documentation.
No changes to code.

FossilOrigin-Name: f5ac98efb5d5f7751c5c560bed9c7885e60ac4bc
2016-11-22 19:15:05 +00:00
drh 65f38d960d Remove unnecessary OP_Close opcodes for a size reduction and performance
increase.

FossilOrigin-Name: 32be7aae92ee48bf2cd260ea41e79c2bc62738f9
2016-11-22 01:26:42 +00:00
drh 60ffc80756 Remove unnecessary OP_Close opcodes at the end of INSERT operations, resulting
in smaller and faster code.

FossilOrigin-Name: abeddb6d5a4040e1d0a87a4f32ad79794ba0842b
2016-11-21 21:33:46 +00:00
drh 89500dcd0b Enhance speedtest1.c so that is works on older versions of SQLite, before
the introduction of the group_concat() aggregate function.

FossilOrigin-Name: 9979ba80a649ee61d9d174dc9d9fcab7e9fc1332
2016-11-21 18:15:35 +00:00
drh c10b9dac84 Fix harmless compiler warnings.
FossilOrigin-Name: b3b7b42d9a4a0e7e2be8b2933328a7bec2f49a81
2016-11-20 17:59:59 +00:00
drh 0f85b2ff09 Prevent a possible use-after-free bug in the query optimizer.
FossilOrigin-Name: 0a98c8d76ac86412d5eb68de994658c250989349
2016-11-20 12:00:27 +00:00
dan 93f5113290 Remove the requirement to open the wal file before sqlite3_snapshot_recover()
is called. Also add some comments to new functions.

FossilOrigin-Name: 28393c413cc4505b94411730e728583c5d4baaae
2016-11-19 18:31:37 +00:00
dan 4d4757fcc8 Test some extra error conditions in sqlite3_recover_snapshot().
FossilOrigin-Name: db314213c08f27dd0ff5ede3c6a8eda36560809a
2016-11-19 17:30:57 +00:00
dan 20ba3d7fcb Add another fault-injection test for sqlite3_snapshot_recover().
FossilOrigin-Name: 7e040406138669bd67dd6ecae016b3e50dbfaaf8
2016-11-19 17:20:28 +00:00
dan 6a9e7f16eb Fix a problem causing sqlite3_snapshot_recover() to return
SQLITE_IOERR_SHORT_READ.

FossilOrigin-Name: 525f75fa9fd4a95acc3fb3b0a01dabe2be39b383
2016-11-19 16:35:53 +00:00
dan 5b4009f637 Fix a bug in sqlite3_snapshot_recover() that could cause subsequent read
transactions to use out-of-data cache entries.

FossilOrigin-Name: 9abeb7980a34cec11a3420e14ad98a4ec0d9c599
2016-11-19 14:53:22 +00:00
dan 1158498dce Add experimental sqlite3_snapshot_recover() API.
FossilOrigin-Name: 174a6076a8d7bebe5efebf55f3fdc5d87c589cc7
2016-11-18 20:49:43 +00:00
dan edace5d4f1 Require that the database handle be in autocommit mode for
sqlite3_snapshot_get() to succeed. This is because it may open a read
transaction on the database file.

FossilOrigin-Name: 83b658dad091211ade3594d1e8d00ce525882506
2016-11-18 18:43:39 +00:00
dan 93006cdd85 Add tests for snapshot interfaces.
FossilOrigin-Name: 1f7ee7af7b620262ae663d65889b6a87415d4a34
2016-11-18 18:22:05 +00:00
dan 25accbca72 Enhance existing snapshot tests to serialize/deserialize snapshots. No new
tests.

FossilOrigin-Name: 16b9bf92741e4c62874cffd7c6a61763c5054c7a
2016-11-18 14:38:41 +00:00
drh 65e1ba3fe7 Experimental changes for faster in-memory DB operation for large databases.
FossilOrigin-Name: 4fe94b0f1841180dfd8cac33838e335dc6a428bf
2016-11-17 21:52:08 +00:00
dan 9c8753c0a8 Fix a problem in rtreeD.test causing it to fail in OMIT_BUILTIN_TEST builds.
FossilOrigin-Name: d6b3779e6dad038d8bc35139cf314bf1e6e91977
2016-11-17 20:05:00 +00:00
drh 223b4bb3f7 Change the --enable-debug option on configure so that it enables the
".selecttrace" and ".wheretrace" commands in the command-line shell.

FossilOrigin-Name: 2331192b4ca6a169b6ac0daafb21ceb7c390de65
2016-11-17 13:54:21 +00:00
drh 54cda4edbe Disable the query flattener optimization for SELECT statements that are on
the RHS of vector IN operators.  This is a hack that fixes the bug
described in ticket [da7841375186386c]. A better solution that does not
disable the query flattener is needed, but this will server for the time
being.

FossilOrigin-Name: 005d5b870625d175fdf3c0e87d974006c569d9e1
2016-11-17 13:13:25 +00:00
drh d2d69cc1fa Add a needed #include to speedtest1.c.
FossilOrigin-Name: 77aeb705c37b1bf61a05b5e4a09f5b5cd67d07bc
2016-11-15 21:17:13 +00:00
drh ba6eb8769f Experimental changes toward making snapshots serializable.
FossilOrigin-Name: b6a81fa1fc1fb78a65894129851a4ec3986640de
2016-11-15 17:37:56 +00:00
drh d6ef5afe3f Change the OP_Last opcode so that it is a no-op if the cursor is already
pointing at the end of the b-tree.

FossilOrigin-Name: 663473850c4274270445b3771911fa773a8c405f
2016-11-15 04:00:24 +00:00
drh c9b9deaee2 Make the VACUUM command about 9% faster by avoiding unnecessary calls
to sqlite3BtreeMovetoUnpacked() while copying rowid tables.

FossilOrigin-Name: 5ed0bd387699a0f3b477d4f3cfcb460a6a44cb84
2016-11-15 02:46:39 +00:00
drh 5413ba4b17 Add 8794 new test cases received from the OSS-FUZZ project.
FossilOrigin-Name: 03f75a67c320f21192d721a8c34d49dea48ffdbb
2016-11-14 20:47:18 +00:00
drh 588429a87d Fix a potential use-after-free error during parsing of malformed
CREATE TABLE statement.

FossilOrigin-Name: c5dbc599b910c02a961675b12b273b8df6d29450
2016-11-14 20:08:00 +00:00
drh 362b66f051 Enhance fuzzcheck.c to accept database-specific configuration parameters in
the option CONFIG table.  Add the fuzzdata5.db fuzz database containing
test cases from OSS-FUZZ.

FossilOrigin-Name: a71fad4538311ede111815d221d9eb8d9018092b
2016-11-14 18:27:41 +00:00
drh 55377b4717 Fix the ossfuzz.c test module so that it does not segfault after a
"PRAGMA empty_result_callbacks=1;".  Add the ossshell.c program for
simple command-line testing of ossfuzz.c.

FossilOrigin-Name: 6f2d43eca68175ed28abae3afa792095af906af2
2016-11-14 17:25:57 +00:00
drh 2adb878b1f Avoid unnecessary calls to sqlite3ExprCacheAffinityChange() when generating
OP_MakeRecord opcodes that do not change any register affinities.

FossilOrigin-Name: e211c579b2f092e3283edd5fb9add7c5183bac35
2016-11-14 15:28:56 +00:00
dan b3e845ba33 Fix an fts5 problem causing a crash in phrase queries where the first token of
the phrase matches one or more rows but some other token within the phrase
matches zero.

FossilOrigin-Name: e78f6f3bbf4781850960fe6741f7cba480f2c27d
2016-11-14 08:19:37 +00:00
drh 48c286fc61 Fix harmless compiler warnings in test code for MSVC.
FossilOrigin-Name: 7b76be4117f4e57091b03fafcf42d17bce81160d
2016-11-11 20:37:27 +00:00
drh 66adb0a848 Avoid storing redundant fields in sorter records when the sort-key
and data have fields in common.

FossilOrigin-Name: b835cf3e507b910b6a3e0f802ce2c40a72d0c227
2016-11-11 19:08:00 +00:00
drh 4b727f17d6 Enhance the OP_IdxInsert opcode so that it can used unpacked key values if
they are available.  Update the code generator to take advantage of this
new capability.  The speedtest1.c test is about 2.6% faster as a result.

FossilOrigin-Name: 925840cfdb969a76640a1247cc4a7b2c0de5cb74
2016-11-11 19:01:11 +00:00
dan 04cd7aa373 Merge trunk with this branch.
FossilOrigin-Name: dd62d2de6eb12dc1902d6df050c395b1dcac01b4
2016-11-11 18:45:55 +00:00
drh d95ef5cb5a Remove obselete and unused logic in the update code generator.
Fix the sqlite3BtreeMovetoUnpacked() routine so that it remembers the
rowid of the row that it landed on.

FossilOrigin-Name: 1a587d72f981cb7064cfd8916a52a83ad9ba6074
2016-11-11 18:19:05 +00:00
dan 9af90b7231 Reenable the SQLITE_EXPR_REF optimization for "SELECT DISTINCT ... ORDER BY"
queries.

FossilOrigin-Name: 6e2e9d383f5fc4a0cbf05fe83ec7425812c0f556
2016-11-11 18:08:59 +00:00
drh 79297d1d59 Merge enhancements and bug-fixes from trunk.
FossilOrigin-Name: 5515b827dc1805a3010018cd6abf222b03525d24
2016-11-11 17:52:57 +00:00
dan 4a5bad572a Fix a problem with switching from wal to rollback mode when
SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE is configured.

FossilOrigin-Name: 46e0016207b8e7df2ae6c7491fd0f3c2926eed21
2016-11-11 17:08:51 +00:00
drh ea432ba2df Add the test/ossfuzz.c interface adaptor for OSS-FUZZ. Make previsions for
testing the adaptor using fuzzcheck.c.

FossilOrigin-Name: 119d6ef8478ea6ab07dfd0e974d2f5a8dcfce87e
2016-11-11 16:33:47 +00:00
dan 3bafdede8a Handle some obscure "row value misused" cases that could cause segfaults or
assertion failures.

FossilOrigin-Name: fba5fddb1c40af75634b01c1f06d2610df697e01
2016-11-11 15:49:01 +00:00
drh 4e8142c726 Back out the "--raw" option on ".read" in the command-line shell. Instead,
fix the command-line shell so that if EOF is reached without seeing a
final semicolon, it goes ahead and passes the accumulated SQL text to
SQLite.

FossilOrigin-Name: f98c8ac8c485098f163400d3a92d6afb4008adbe
2016-11-11 14:54:22 +00:00
dan b47ebe6128 Add extra tests for the xBestIndex() virtual table method.
FossilOrigin-Name: 642a8fba91d2bf61b494b845cb499714363209b1
2016-11-11 09:51:46 +00:00
mistachkin 2f9a613ced In the command line shell, avoid using utf8_printf() in a couple places where it is superfluous.
FossilOrigin-Name: 6311a8bdb1f2e1813516a32d171aae030bd73fd3
2016-11-11 05:19:45 +00:00
drh c5b86be7db Add the --raw option to the ".read" dot-command of the command-line shell,
to cause the named file to be read and sent directly into sqlite3_exec()
without any interpretation.

FossilOrigin-Name: 09233770b24d69a305556241a6beeb5e4d77c0d7
2016-11-11 04:37:00 +00:00
drh 4360fcea6d Take care not to try to generate code for the ATTACH and DETACH commands
if there were syntax errors during parsing.
Fix for ticket [2f1b168ab4d4844]

FossilOrigin-Name: b0ff183b8ffdbebece06cfea1c6781fc0e8e8547
2016-11-11 03:37:24 +00:00
drh 7a1c28defe Avoid a few unnecessary calls to sqlite3BtreeMovetoUnpacked().
FossilOrigin-Name: eac0e827a61cfec4dd9b6d407ff398e9fda3510b
2016-11-10 20:42:08 +00:00
dan 257c13fa00 Avoid storing redundant fields in sorter records when the sort-key and data have
fields in common (as in "SELECT a FROM t1 ORDER BY 1").

FossilOrigin-Name: 0af62fdbd8e2aab14718ff8bcb5934f05463c176
2016-11-10 20:14:06 +00:00
drh c6c9e158c5 When doing a REPLACE on a WITHOUT ROWID table with no secondary indexes,
bypass the OP_NoConflict/OP_Delete sequence and directly overwrite any
preexisting row, for a performance increase.

FossilOrigin-Name: f7041cbb63b912f9ecad538804b6f2383efbec4e
2016-11-10 17:01:36 +00:00
drh bf2f5739c9 Remove C++ style comments. No code changes.
FossilOrigin-Name: 42f8aa6231bf4ed74bebdc85aa79d23dc20b3c14
2016-11-10 16:07:43 +00:00
drh 2c4dfc3095 Add the unpacked key fields to OP_IdxInsert for INSERT and UPDATE statements.
FossilOrigin-Name: 67602e40f122cbb6354048a64c5d3a72b2855ec7
2016-11-10 14:24:04 +00:00
drh eaf6ae2992 Comment changes that attempt to better explain the behavior of the "seekResult"
field on VdbeCursor objects and the seekResult parameter to
sqlite3BtreeInsert() and the OPFLAG_USESEEKRESULT flag on insert opcodes.
No changes to code.

FossilOrigin-Name: 345b46be75bdf6f9fb7367a6164d89bae11995a6
2016-11-09 20:14:34 +00:00
drh 7405fa745e Fix a simple comment typo. No changes to code.
FossilOrigin-Name: 51d0aed8d63d0710e4aa8925ff18cf3c45dc9e42
2016-11-09 16:03:36 +00:00
mistachkin 58282f68d8 Fix typo in the CSV extension.
FossilOrigin-Name: b4889588246c33374ff3758e21ccc4ce246380b6
2016-11-09 01:46:13 +00:00
drh 4a8b013ef6 Make use of the unpacked key on the OP_IdxInsert on sorters with a LIMIT.
FossilOrigin-Name: 42db7cd2c0b367f7dfe733bdaf006538937b812a
2016-11-09 01:38:56 +00:00
drh fb8c56f21b Fix a typo on the OP_IdxInsert documentation. No code changes.
FossilOrigin-Name: e4acd98207bf12b28f6c0f77896ba8f0b0a155d5
2016-11-09 01:19:25 +00:00
drh 088c086b14 Add a DISTINCT query to speedtest1.c. Also change INSERT OR REPLACE into
just REPLACE.

FossilOrigin-Name: 754ee844958bdc3b96acfd1f5395da5796e54a82
2016-11-09 01:07:10 +00:00
drh 7723371eb7 Remove the "experimental" marking from the sqlite3_preupdate interfaces.
But be sure all the interface definitions are within 
documentation.

FossilOrigin-Name: d6dd2ad35ed17e980ed564688499c802e5850386
2016-11-09 00:57:27 +00:00
drh 9b4eaebc68 Enhance the OP_IdxInsert opcode to optionally accept unpacked key material.
FossilOrigin-Name: 89d958abbac45f2ca5954080cd9e74ec9a07ebb2
2016-11-09 00:10:33 +00:00
dan 3b908d41a0 Avoid superfluous cursor seeks in "INSERT OR REPLACE" statements.
FossilOrigin-Name: bec5b6d4d083556d111a89186b4f7b35b5e7cebf
2016-11-08 19:22:32 +00:00
drh 9d06ff2cb7 Avoid generating OP_TableLock unnecessary instructions on btrees that
are not sharable.

FossilOrigin-Name: 8cb8516d2009d52d35a22263e4c892f162b34b81
2016-11-08 17:19:22 +00:00
drh 0a22c865e4 Fix the speedtest1.c test program so that it gives closing "%" wildcards
on LIKE searches.

FossilOrigin-Name: c2f84f637f994c3b4522b48161185a4a2c5bca23
2016-11-08 16:27:59 +00:00
drh 662389b265 Tweaks to speedtest1.c to better reflect mobile usage based on findings in
the "Pocket Data" paper by Kennedy, Ajay, Challen, and Ziarek.

FossilOrigin-Name: b5733cae3c519482cf6bc642bd63814afb113d35
2016-11-08 00:30:11 +00:00
drh 6850a63393 Fix OOM error reporting in the json1_group_object() SQL function. Remove
an unreachable branch from the JSON1 logic.

FossilOrigin-Name: b54098491531cd26ed461275ef4aae3d3ec9065e
2016-11-07 18:18:08 +00:00
drh 27b2d1b88b Replace some unreachable branches from the JSON1 extension with assert().
FossilOrigin-Name: 145cd13e3c5a42a717807bcc13c0f7212f38bff8
2016-11-07 15:15:42 +00:00
drh ad875e7416 Fix the JSON1 extension so that the JSON validator correctly rejects malformed
backslash escapes within string literals.

FossilOrigin-Name: 7a63539169a384960e30a63e0c8e9b0f07fa431e
2016-11-07 13:37:28 +00:00
dan a2bfa046ea Avoid a crash that can occur after an obscure OOM in the built-in INSTR()
function.

FossilOrigin-Name: b86b79c442a58d10aa005ba4f34095375a88d242
2016-11-04 12:05:29 +00:00
drh b1c9633493 Mark the ICU extension functions as deterministic.
FossilOrigin-Name: afbbb6c66a85ff3f4c8dce677e0892a2a51d2b8e
2016-11-04 12:03:26 +00:00
drh 54fc5cc2ae Add an assert() to silence a coverity false-positive.
FossilOrigin-Name: 97354093bceff28714a605068851cfa026c8272a
2016-11-04 11:23:30 +00:00
dan 792557ac67 Fix a test case in vacuum5.test so that it works with the in-memory journal
permutation.

FossilOrigin-Name: 81c86401463df6be4ac21987b3b1703e38ab933b
2016-11-04 07:25:43 +00:00
mistachkin a622d90040 Replace a couple more references to Tcl 8.5 in the Windows build tools.
FossilOrigin-Name: 1d0e43c549c36d0919a18d61285e94cad29e7a07
2016-11-03 21:35:10 +00:00
dan af58068550 Fix a test case in vacuum5.test sot aht it works with
-DSQLITE_ENABLE_ATOMIC_WRITE.

FossilOrigin-Name: 3ca80010397676eca57c8a4c9b3a9c2c40629663
2016-11-03 19:24:14 +00:00
dan 7df9b8e6e4 Fix a test case in vacuum5.test so that it works with -DSQLITE_TEMP_STORE=2.
FossilOrigin-Name: f5dd95e25c703a825ad7af9a4b3886bd3ef8c2e8
2016-11-03 19:01:20 +00:00
drh 59ce2c434c In the command-line shell, fix the .imposter command so that it works
with indexes on expressions.  Fix the ".mode quote" mode so that it works
with ".headers ON".

FossilOrigin-Name: ba9873da94d21873ff76f16a5332fc0092d83f70
2016-11-03 13:12:28 +00:00
drh 16eb59484f Add the ".imposter" command to the command-line shell.
FossilOrigin-Name: be3ec8fdcf1541017ca9375df07645db2a9a3f5a
2016-11-03 13:01:38 +00:00
drh 6027561178 Fix an possible NULL pointer deference in the command-line shell that can
occur when using imposter mode.

FossilOrigin-Name: ad08753a8bbf073ec4af9c3a5783ed664244d954
2016-11-03 02:25:30 +00:00
drh 506a1400a3 Adjust the MSVC makefile to use Tcl8.6 by default.
FossilOrigin-Name: def8f598b8e33b5bab3a024cc57f4c5e300cd8cd
2016-11-02 19:49:22 +00:00
dan 75ba676790 Fix an issue that was causing the new database image to be assembled entirely
in heap memory when VACUUMing a database, even if it should use a temp file.
This could cause SQLITE_NOMEM errors when vacuuming very large databases on
32-bit systems.

FossilOrigin-Name: 3028845329c9b7acdec2ec8b01d00d782347454c
2016-11-02 14:50:19 +00:00
drh e77caa191b Fix a requirement mark. No changes to code.
FossilOrigin-Name: d18f61b78c8fafef742efbc890382537e8584180
2016-11-02 13:18:46 +00:00
drh 1ad93a003d Use NOT NULL partial indexes when the query is constrained by a single
LIKE or GLOB.

FossilOrigin-Name: 9b3a3b41b59a7ce7d3dd82c7402d6fdc6a5ca43c
2016-11-02 02:17:52 +00:00
dan d7265378fd Add the SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE sqlite3_dbconfig() option - for
disabling SQLite's default checkpoint-on-close behaviour.

FossilOrigin-Name: 6d142025c74f66f2d48155354b556cd5b2682cb2
2016-10-31 16:49:18 +00:00
dan 298af02308 Add the SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE sqlite3_dbconfig() option - for
disabling SQLite's default checkpoint-on-close behaviour.

FossilOrigin-Name: 093d2fc2288b75c15ccf877bfa0e622d3918a562
2016-10-31 16:16:49 +00:00
dan dadafa881f Remove the mutex from test_multiplex.c.
FossilOrigin-Name: 6374978e8f1ac091394a9f5a1896be92af658bcd
2016-10-27 14:51:02 +00:00
drh c52496f57f Make sure left-join markings are transferred to the virtual scalar
subexpressions when decomposing a vector comparison in the ON clause of
a LEFT JOIN.
Fix for ticket [fef4bb4bd9185ec8f].

FossilOrigin-Name: 619f5cc71774a37648e185c8502d7af14eb09b7f
2016-10-27 01:02:20 +00:00
drh 9904298bb3 Small size reduction and performance enhancement in whereScanInit().
FossilOrigin-Name: c23f5ef337533c1ec6e3ba78a2910352181cc9ee
2016-10-26 18:41:43 +00:00
drh 392ddeb12d Small size reduction and performance improvement in whereScanNext().
FossilOrigin-Name: d861ee17eb900a607de6ec3f4a5d5c24cfb834a0
2016-10-26 17:57:40 +00:00
dan d15f430111 If all branches of an OR optimize scan that is the rhs of a LEFT JOIN use the
same index, set the index cursor to return NULL values if there are no matches
for a row on the lhs.

FossilOrigin-Name: ec9dab8054c71d112c68f58a45821b38c2a45677
2016-10-26 16:05:10 +00:00
dan b40897ab5e If all branches of an OR optimize scan that is the rhs of a LEFT JOIN use the
same index, set the index cursor to return NULL values if there are no matches
for a row on the lhs.

FossilOrigin-Name: e7b9bc678ecb75c594d9d3ade12a99a8d551cdc9
2016-10-26 15:46:09 +00:00
drh d240f091c6 Merge the SQLITE_ENABLE_URI_00_ERROR compile-time option.
FossilOrigin-Name: 86675ae0abc78960a2faec55d115804acfc3be6d
2016-10-26 13:58:47 +00:00
dan 635f83c062 Add extra tests to check the result of including a %00 escape in a URI
when ENABLE_URI_00_ERROR is defined.

FossilOrigin-Name: 1aaa06e37f44309c62335d8eda59ca6890d4be9d
2016-10-26 13:44:07 +00:00
dan 5c35e90377 Add compile time option SQLITE_ENABLE_URI_00_ERROR. If defined, any "%00"
escape found in a URI is treated as an error.

FossilOrigin-Name: e8a9bfece27e2af178a206ad6bce3f24d64e7ee4
2016-10-26 12:15:41 +00:00
dan 01e697b4ec Add test case to demonstrate a "BEGIN EXCLUSIVE" command returning
SQLITE_BUSY_SNAPSHOT.

FossilOrigin-Name: b115856408b6aa5538be67beb619d7aff0630bea
2016-10-25 15:06:11 +00:00
drh 7ad3eb63cf Performance optimization in moveToRoot(). Avoid repeated validity checking of
the root page on each call. Once is enough.

FossilOrigin-Name: 98795c2dd9a6d8fa8d49a9f5c36cdf824cae7246
2016-10-24 01:01:09 +00:00
drh 2df45e02f4 In the sessions module, avoid recording a change if an UPDATE statement
overwrites a column with REAL affinity containing an integer value with 
the same value.

FossilOrigin-Name: 5f3e602831ba2ecaf8ba5411efb387afcde05a33
2016-10-22 01:22:30 +00:00
dan e43635aaa7 In the sessions module, avoid recording a change if an UPDATE statement
overwrites a column with REAL affinity containing an integer value with the same value.

FossilOrigin-Name: b861328ab9ceec6926d97658c3606e6ae9ad39bf
2016-10-21 21:21:45 +00:00
drh 41f5f6ec2c Add ".mode quote" to the command-line shell.
FossilOrigin-Name: c4f5fa78cd8207ce1e46e32e632b8f6ee86047e1
2016-10-21 17:39:30 +00:00
dan e24452edef Avoid using the "direct overflow read" optimization to read large blobs if the
pager layer has a wal file open - even if the database header indicates that
the db is not a wal database.

FossilOrigin-Name: b54c15f11796a75683eec4b502a22ccb87d621c6
2016-10-21 10:49:39 +00:00
dan ceb97c1107 If SQLITE_DIRECT_OVERFLOW_READ is defined at compile time, add "DIRECT_OVERFLOW_READ" to the list of symbols returned by "PRAGMA compile_options".
FossilOrigin-Name: b7d9727bff2e840af4b090872c991693e78e6076
2016-10-21 10:09:22 +00:00
dan 86873baa58 Add test case to incrblob4.test. No changes to code.
FossilOrigin-Name: fd9c6ff05f2052810549a1a6a384f4b40f4ba4ac
2016-10-20 11:48:48 +00:00
drh c3191d236a Minor simplification of the comparison opcodes.
FossilOrigin-Name: 56474ebca3fdddb8f3c5156f06dc42dc0a65256c
2016-10-18 16:36:15 +00:00
drh ba69061ebc Fix harmless uninitialized variable warnings in speedtest1.c.
FossilOrigin-Name: 2aa7a03b8632dbfd9741018b5b19c372dcfd3647
2016-10-18 15:29:57 +00:00
drh f8a89ca5dd Add the --repeat option to speedtest1.c and speed-check.sh.
FossilOrigin-Name: 6ca0e06b21b0d5f7ae5bcb7839a11a45da0d2cea
2016-10-18 14:35:55 +00:00
mistachkin 47d00872fc Escape non-ASCII character from an ICU extension comment.
FossilOrigin-Name: 5ec02ecf3d20ce7e3f5249e9a3684f9b67a7d703
2016-10-17 18:44:11 +00:00
mistachkin 5f0b8a0e30 Corrections to a couple recently added 'filectrl.test' results.
FossilOrigin-Name: 3d89dc4544bc51f8c9fa63a6ecf0458f6d10fc9f
2016-10-17 18:33:36 +00:00
dan 1480095ff5 Changes to support interrupting a checkpoint using sqlite3_interrupt().
FossilOrigin-Name: c88d36e251abec24aa7e37cf550e148904b9fd2d
2016-10-17 15:28:39 +00:00
drh cee11adaaa Small size reduction and performance increase in the string duplicator.
FossilOrigin-Name: cda998f080cb00779d8c0d1c83d8fe2b74462cd4
2016-10-17 00:48:06 +00:00
drh f013e20c66 Add documentation for the OP_SorterInsert opcode, formerly omitted by mistake.
No changes to code.

FossilOrigin-Name: 16d88a907730e3773a1320dbaf1f82c2bc71d71f
2016-10-15 18:37:05 +00:00
dan 1cb3c7c415 Add test case to hook.test. No changes to non-test code.
FossilOrigin-Name: 2674d779f5453ea6b709a39618d4b8017ab2e3fb
2016-10-15 08:56:18 +00:00
mistachkin 8705f868e0 Add the SQLITE_FCNTL_WIN32_GET_HANDLE file control.
FossilOrigin-Name: 16039be3739b8d3b34a1e6093eaebb09e07f984b
2016-10-14 21:27:50 +00:00
drh 9e31fe02ba Bump the version number in anticipation of the next development cycle.
FossilOrigin-Name: aa6de9c40ba2d906772b9032fd5d798661f6d4cc
2016-10-14 21:16:27 +00:00
drh 813646c182 Version 3.15.0
FossilOrigin-Name: 707875582fcba352b4906a595ad89198d84711d8
2016-10-14 10:20:30 +00:00
drh 989412a1cf Take care to avoid integer overflow when doing the initial page cache
allocation with an excessively large cache_size setting.

FossilOrigin-Name: 4d66ac98deaa85218be7ff0eb254f78b96d8e8d4
2016-10-13 12:56:18 +00:00
drh c436a03d02 Avoid reading the -1-th element of an array in the query planner. Fix to a
bug introduced by check-in [8e2b25f9b8a7] from earlier today.  Curiously,
the problem only appeared on 32-bit systems.

FossilOrigin-Name: 443913d582bcd953d85159047541592e2f68ade3
2016-10-12 18:55:53 +00:00
drh 432697467f Add to sqlite3_analyzer command-line options --version and --tclsh, and also
the undocumented --debug option.

FossilOrigin-Name: e87d02d289a2016ea3ee074e914b07a8ac22b21f
2016-10-12 18:26:26 +00:00
drh 013ae68b25 New testcase() macros to ensure coverage of the ORDER BY LIMIT optimization
code in where.c.

FossilOrigin-Name: 61f0526978af667781c57bcc87510e4524efd0d8
2016-10-12 15:15:30 +00:00
dan 83465a662f Fix a problem affecting queries that match the pattern (... WHERE ipk IN (....) ORDER BY ? LIMIT ?). Fix for [96c1454c].
FossilOrigin-Name: 8e2b25f9b8a7ed087d3cece74239814bee19429e
2016-10-12 14:48:00 +00:00
dan ef74652ceb Remove a stray line from session4.test causing a memory leak. No changes to SQLite code.
FossilOrigin-Name: 6624c4964b63e259d5ee006eaa7ec79ddadbd6a6
2016-10-10 14:48:36 +00:00
dan 90b2fe6b1e When handling ORDER BY expressions, do not assume all values of an indexed expressions are distinct. Fix for [4766f444].
FossilOrigin-Name: aebe429e52ffef026cb0803fb164339d61bd2e88
2016-10-10 14:34:00 +00:00
drh 48590fcb37 Make sure indexes on expressions skip over initial NULL values in the
index.  Fix for ticket [4baa464912129477f3c9]

FossilOrigin-Name: 71797ba431085f9ae381ed5ea6471967926f4043
2016-10-10 13:29:15 +00:00
dan ea5e5f0b89 Fix a case in which the rtree module was ignoring an OOM while generating an error message.
FossilOrigin-Name: 788f86bebe413b5a0ab41ba3d75ba8728827a964
2016-10-10 10:06:59 +00:00
dan e5ec01c481 Update test/trace3.test to account for the fact that casting a pointer to a 64-bit signed integer might produce a negative value.
FossilOrigin-Name: 010ec22541a4c37f2d3b01b6a531b4b4264102b7
2016-10-08 16:10:29 +00:00
drh dfe4e6bb33 Corrections to Lemon documentation. No SQLite changes.
FossilOrigin-Name: c568ae3eef31b49e846fad90e705914e2868a09c
2016-10-08 13:34:08 +00:00
dan 320d4c304d Add missing "static" to internal function whereRangeVectorLen().
FossilOrigin-Name: cbed3d75cf9a24037263d126727db7dd048a4f97
2016-10-08 11:55:12 +00:00
dan e288992e19 Updates to the tool/warnings.sh script to make it easier to use on OpenBSD.
FossilOrigin-Name: dbe2997f57f8d8f95e4b767bf73b8df3a5e4f783
2016-10-08 09:21:34 +00:00
dan 642f0146d7 Fix some compiler warnings in fts5.
FossilOrigin-Name: b066637bb75959267fe6104da323c5112ad78f82
2016-10-05 20:14:29 +00:00
drh e3c6b61cee Fix harmless compiler warnings.
FossilOrigin-Name: 2dde3375124198560c8ff15f87aadde2afd722c5
2016-10-05 20:10:32 +00:00
dan 4e59344a4c Add a test case for the fix in [a596b7c6cc].
FossilOrigin-Name: b2ef39b11f7c46e69e53439680c32adbb18903bd
2016-10-05 15:04:35 +00:00
drh da5c62400f Do not set MEM_Blob unless the appropriate fields of the Mem object have
been correctly initialized.

FossilOrigin-Name: a596b7c6cc780525120604090493f3f7d962b9fa
2016-10-05 15:02:00 +00:00
drh e0251d44fa Fix the backup_malloc.test script so that it works on Windows.
FossilOrigin-Name: d080012daaaa399663a0f767c792a2fff3e1037a
2016-10-05 01:33:57 +00:00
drh 4eda15e715 Fix a problem with the lempar.c parser template.
FossilOrigin-Name: 3a9d802fda10585654332b314d317250dc5d894e
2016-10-04 12:20:12 +00:00
drh 44728d7e01 Do not bother to initialize unused fields in the BtreePayload object.
FossilOrigin-Name: b10d0f939c82c4de3faa90b86de9ec4a89992856
2016-10-04 00:47:26 +00:00
drh a71c743aae Allow deterministic functions in the WHERE clause of a partial index.
FossilOrigin-Name: c6e9b9421805c904b20900b711fa0e51773aef3e
2016-10-03 18:13:23 +00:00
drh c9b39288ae Size and performance optimizations on the sqlite3ExprAssignVarNumber() routine.
FossilOrigin-Name: 109852e51e2cc2674940ba3e5097a92e66f88bb8
2016-10-03 16:33:14 +00:00
drh de25a88c50 Avoid unnecessary strlen() calls in sqlite3ExprAssignVarNumber() by passing in
the token length from the parser.

FossilOrigin-Name: d15ae2e530cffea60263f203ac5f89b6790f4bd5
2016-10-03 15:28:24 +00:00
drh 87c05f0c58 Avoid unnecessary memset() calls in the query optimizer.
FossilOrigin-Name: 5bb7cde0731d23411e9df02a957010f94203397b
2016-10-03 14:44:47 +00:00
drh cca8a4ad6f Fix an obsolete comment on a variable definition in expr.c. No code changes.
FossilOrigin-Name: 012ff6dd306328f7ea71a6600471c871e7ffe37b
2016-10-03 12:56:48 +00:00
drh 1dd518cfcd Make sure the sqlite_sequence table is updated when an optional xfer
optimization is used.  Fix for ticket [7b3328086a5c1].

FossilOrigin-Name: 81e4d4f897553f6fee540a38c3e83ceac5ba9b78
2016-10-03 02:59:33 +00:00
drh cb43a937e5 Allocate Parse objects off of the stack where appropriate for a substantial
performance increase and a size reduction.

FossilOrigin-Name: ea8affa9e453b201b479162f621b591e7a65a489
2016-10-03 01:21:51 +00:00
drh 1a7df58c1a Add SQLITE_USE_ALLOCA to the --lean configuration in speed-check.sh.
FossilOrigin-Name: fe07609efc31c4639c40fbda501c55f443756ad2
2016-10-01 23:55:23 +00:00
drh 445f3d564c Rearrange fields in the Parse object to reduce the amount of initialization
required.

FossilOrigin-Name: 361940b44dd17bf2b39fc0e0716c0de6b2b7f4f7
2016-10-01 21:43:37 +00:00
drh 216b70ff82 Reduce the width of a memset() to avoid double-initializing some variables.
FossilOrigin-Name: 34edbfd12d6cfa6bbfa30eef9276a4865eadc869
2016-10-01 20:43:41 +00:00
drh 230368c30d Remove an unnecessary memset() call.
FossilOrigin-Name: a76bff74ce47c9c98106566bde5d781992657e22
2016-10-01 19:32:54 +00:00
drh d8e4b13256 Use sqlite3DbMallocRawNN() where appropriate, instead of
sqlite3DbMallocRaw().

FossilOrigin-Name: 54a449a41d8d32da2f8b73689227ced866974a18
2016-10-01 19:21:56 +00:00
drh 8dfef1175e Make sure deleting an unused prepared statement does not reference
uninitialized fields in the structure.

FossilOrigin-Name: 7983eef0422439bfc85950554b000d46a9767ee3
2016-10-01 16:53:45 +00:00
drh 76336d5b9d Avoid accessing Vdbe.pc if it is uninitialized. Check Vdbe.magic first.
FossilOrigin-Name: 6ac6e4462a08cb2f3d28e4a23218fc1b110a2148
2016-10-01 11:39:53 +00:00
drh ab3182f7c4 Avoid unnecessary zeroing of fields in the Vdbe object when it is allocated.
FossilOrigin-Name: 1e21bbe836539e64d24857f4faa3d12cd607dc7e
2016-10-01 00:37:50 +00:00
drh cd9af608e1 Avoid initializing the column-cache section of the Parse object, since entries
in the cache will be initialized as they are used, and avoiding the initial
memset() saves many CPU cycles.

FossilOrigin-Name: 63cf7eafae5c3c1379edf416c5157010c7c120b5
2016-09-30 22:24:29 +00:00
drh 94881d732b Fix an always-true conditional left over from the previous commit.
FossilOrigin-Name: ab12fce3318db447995e1465f34a1e43cd623d6a
2016-09-30 21:20:37 +00:00
drh 9b40d13f43 Fix the Parse.aColCache column cache so that all of the valid entries are
in the first Parse.nColCache slots.

FossilOrigin-Name: 6028502059ccbd3699637b7a70a6d8ce1b7c3dad
2016-09-30 20:22:27 +00:00
drh e05950d878 Another simplification to the Parse object.
FossilOrigin-Name: c1419727f5e4cb3ef63b5853b6ef3b1e53af0651
2016-09-30 19:14:32 +00:00
drh 1d96cc60d0 Remove unnecessary fields from the Parse object.
FossilOrigin-Name: 814e41da3563eecf5514811bc8ab2df4f5cc0d4b
2016-09-30 18:35:36 +00:00
drh 2a1df937ab Avoid unnecessary Mem initializations when generating a new sqlite3_stmt
object.

FossilOrigin-Name: 47ae1cda8dc255d100aeb8cb90ea4c9e449509be
2016-09-30 17:46:44 +00:00
drh dd3bfe8648 Small size and performance optimization to sqlite3VdbeChangeP5().
FossilOrigin-Name: 3c93c8f5bbf54ed2a331079b28fdd94eb0e59e69
2016-09-29 20:28:34 +00:00
drh 2831c4d123 Remove the peep-hole optimization of removing OP_Close opcodes that come
before OP_Halt, as the extra work of removing those opcodes uses more cycles
than just running them.

FossilOrigin-Name: 984a96d79656c1b095aba1f88aca4bb787ba0bd8
2016-09-29 19:50:02 +00:00
drh 42735c7d30 Size and performance optimization to sqlite3ValueFromExpr()
FossilOrigin-Name: 945f82bc44c5a431c0fef0d36cf016671d7ade1e
2016-09-29 19:27:16 +00:00
drh 22fa36dc04 Clarification and typo-fixes in comments. No changes to code.
FossilOrigin-Name: e2cd79aa3104c51035bf29c548c322564731b75f
2016-09-29 15:53:28 +00:00
drh 5f33eaa6a4 Use Knuth multiplicative hashing for the symbol table.
FossilOrigin-Name: cc29ddd6be60bdbf107f285c9eb57d5896ebca2d
2016-09-28 20:42:31 +00:00
drh 5e769a50ad Two more typo fixes in comments.
FossilOrigin-Name: 40c0fb0af678797c39a99853f9f4102464c16f4b
2016-09-28 16:05:53 +00:00
drh ed204d1f44 Fix typos in comments. No code changes.
FossilOrigin-Name: 5bbd071d57a8048e2ca17bf97761e4f27fc5a6bf
2016-09-28 16:04:22 +00:00
drh 96fdcb40af Update requirements marks due to improvements in the wording of documentation.
No changes to code.

FossilOrigin-Name: bf903b2ecac5d7b25c9cc899cae41f1d69aafe4e
2016-09-27 00:09:33 +00:00
drh 2e34326555 Fix FTS3 test cases due to the flattener change of the previous check-in.
FossilOrigin-Name: 0c8b9b211f4285e2ab77cf5e0820088ef10e05c4
2016-09-27 00:03:25 +00:00
dan 4c5ebee0b5 When flattening a query of the form "SELECT * FROM (SELECT * FROM tbl WHERE x=?) WHERE y=?", ensure that the final WHERE clause is "x=? AND y=?" instead of "y=? AND x=?". Although it is still not guaranteed, this makes the order in which WHERE clause terms are processed comport more closely to users expectations.
FossilOrigin-Name: cf7f9e6d5abff273dd2f8a8dce27d52e1449b3be
2016-09-26 14:39:05 +00:00
drh 0cd874bd57 Inline the relevent parts of sqlite3ExprAlloc() into spanExpr(), for a
performance improvement.

FossilOrigin-Name: fe89225eab777c2c9cb1cbc31092b9e39f516842
2016-09-26 12:38:22 +00:00
drh 410c301fea Omit the LikeOp object from the parser. Change more sqlite3PExpr() calls into
sqlite3ExprAlloc() calls.

FossilOrigin-Name: 795454a3fa5f9ccc486593b5e16e8fad38c934fb
2016-09-24 17:42:43 +00:00
drh 87f0e9863d Add -DSQLITE_MAX_EXPR_DEPTH=0 to the --lean option on speed-check.sh.
FossilOrigin-Name: a8cb1390fc1234b2e925090c4d770cca5d587bea
2016-09-24 01:41:59 +00:00
drh 209bc522b0 Add the EP_Leaf flag bit to the Expr.flags field to indicate Expr
nodes that do not have substructure.  Use that bit to avoid unnecessary
recursion.

FossilOrigin-Name: 8a6ea455cd1bf42ae0a7f1f1789baf88d782db13
2016-09-23 21:36:24 +00:00
drh e1c03b6233 Use sqlite3ExprAlloc() instead of sqlite3PExpr() for leaf nodes in the
expression tree, where appropriate.  This is both smaller and faster.

FossilOrigin-Name: afac0709cec577a7851e3711730712cf12eeb6af
2016-09-23 20:59:31 +00:00
drh 8dd099bbaa New test case for the ORDER BY LIMIT optimization.
FossilOrigin-Name: 9a5a489d0d344274d0fc9fb9303503a454f42844
2016-09-23 18:13:01 +00:00
drh 28f17017ee Fix a potential null-pointer dereference and crash in the case where one
thread is calling sqlite3_column_text() and another thread is calling
sqlite3_step() on the same prepared statement at the same instant.

FossilOrigin-Name: ee1382a36303eff8d94275ac3b12e5ce398ee620
2016-09-22 21:37:18 +00:00
drh 511f9e8d29 Remove the internal sqlite3CodeOnce() interface, replacing it with a
direct call to sqlite3VdbeAddOp0(v,OP_Once).  Slightly smaller and faster.

FossilOrigin-Name: c3774c6a5fe48af91fda28e9e18c6ed9053ea992
2016-09-22 18:53:13 +00:00
mistachkin 5a0da94302 Makefile changes to support building winsqlite3.dll using STDCALL rather than CDECL.
FossilOrigin-Name: 5e892d60935e5c82234d1bfaef4c5026061acceb
2016-09-22 18:46:38 +00:00
drh 98ef26b0d4 Fix speedtest1.c so that it works with SQLITE_OMIT_DEPRECATED.
Add the --lean and --cachesize options to speed-check.sh.

FossilOrigin-Name: 7785b3a25778cc19861c01f4148f72e0f724f55d
2016-09-21 23:58:49 +00:00
dan 49377a8fb7 Fix a problem with the fts5 auxiliary function API causing a crash when a query contained a phrase of zero terms.
FossilOrigin-Name: 0741812d7fcd558479e4849fbb3ba8d03738d018
2016-09-21 19:43:34 +00:00
dan 30f8c23657 Do not run vacuummem.test if ENABLE_MEMORY_MANAGEMENT is defined.
FossilOrigin-Name: 4a613d856433ac48e8ee0cd7f0e774e484e8acf6
2016-09-21 19:00:37 +00:00
drh fb04a36c20 Fix obsolete requirements marks. Add new tests for VACUUM of attached
databases.

FossilOrigin-Name: 2b44f9aa7d4e2089dacd6bfcf526dae9309b7af3
2016-09-21 18:18:57 +00:00
dan b6ea12cc05 Avoid running vacuum5.test in auto-vacuum mode.
FossilOrigin-Name: be184befa09ef0a670a2a6d9c037b9a27bcf16d8
2016-09-21 17:53:47 +00:00
dan b390681622 Do not run test "delete_db.test" with either the journaltest or inmemoryjournal permutations. Ensure that the multiplexor tests in delete_db.test are performed in non-autovacuum mode.
FossilOrigin-Name: 46b7d19e0282ecd7622344aafad8c2feb83c9658
2016-09-21 17:47:59 +00:00
dan 48a72ebfa3 Update the fts5vocab table to handle "ORDER BY term" efficiently.
FossilOrigin-Name: d4928fb5cd63a72808f01778fa5a11395385dedf
2016-09-21 14:41:09 +00:00
drh 09952c6490 Improved implementation of 64-bit signed integer multiply that correctly
detects overflow (and promotes to floating-point) in some corner cases.
Fix for ticket [1ec41379c9c1e400]

FossilOrigin-Name: db3ebd7c52cfc5fcc7be00f52e9d7c84719f7b93
2016-09-20 22:04:05 +00:00
mistachkin d8992cef36 Fix harmless compiler warning.
FossilOrigin-Name: 72429063956614975d90cae2a829cfa4296694da
2016-09-20 17:49:01 +00:00
mistachkin e0736da15a Fix typo in comment.
FossilOrigin-Name: bd3ecbb5c1977744321f4bbac79fd7e2e7c1b5ba
2016-09-20 17:38:27 +00:00
drh ff535a2499 Further performance enhancements in zeroblob() handling.
FossilOrigin-Name: 21b0e3b75c531a5ce33a1503f9bf647d56f56a5b
2016-09-20 01:46:15 +00:00
drh 8aaf7bcc8d Avoid unnecessary calls to ExpandBlob() for smaller and faster code.
FossilOrigin-Name: 5e196fd18169e84806cd45dd1a8190339323e772
2016-09-20 01:19:18 +00:00
drh fadd2b1972 Very small optimization in the bytecode engine.
FossilOrigin-Name: 46002511e52518bae14f210157f231c814c77c9e
2016-09-19 23:39:34 +00:00
drh 9a2e5169a4 Fix a segfault introduced by the row-value enhancement that comes up on
a skip-scan where the first term of the index is unconstrained and the
second term is of the form "columm IN (SELECT...)".

FossilOrigin-Name: 2401ea5acfeee8042489d1db38036ff86e8a6916
2016-09-19 11:00:42 +00:00
drh c332cc30d9 Improved performance in sqlite3ExprCodeTarget().
FossilOrigin-Name: 75146165dcc1ae1faab46b1a7333ef795d5eeac5
2016-09-19 10:24:19 +00:00
drh d43075bcaf Small performance optimization in the expression walker.
FossilOrigin-Name: c6e6afb9391704d9119335f2ce17df3968acb514
2016-09-19 02:19:00 +00:00
drh 9e5eb9c8cc Revise the implementation of OP_Once so that it is smaller, faster, and uses
less memory.  This also fixes an obscure bug introduced 3 days ago by check-in
[5990a1bdb4a073].

FossilOrigin-Name: 6bf5ba10d28f1b0a32aa9a560ae3143a1235eadb
2016-09-18 16:08:10 +00:00
mistachkin 598f7c59e1 Minor enhancement to the TclKit batch tool: it should download the TclKit EXE alone when the TCLKIT_NOENV environment variable is set.
FossilOrigin-Name: baceb988c6f4e93134e6a63173e846af2b73531a
2016-09-17 22:46:13 +00:00
drh 85f071b850 Small performance optimization in the freeSpace() routine of btree.c.
FossilOrigin-Name: 63962e2a927963575be74c3ce11f39f722c07c72
2016-09-17 19:34:32 +00:00
drh fd7459e0aa Improved description of the ElseNotEq opcode in comments. No changes to code.
FossilOrigin-Name: e011435e2f57ddfe315d5da48e93185d6789fc80
2016-09-17 17:39:01 +00:00
mistachkin 8145fc6eda Fix typo in the name of a Win32 string conversion routine. Replace several uses of raw_printf() with utf8_printf() in the shell.
FossilOrigin-Name: 6fc95dd7a0b44212f30e657a850892a85a12715c
2016-09-16 20:39:21 +00:00
drh 7152cc0641 If no KEY is specified on ATTACH, copy the main schema key if the key size
is non-zero.  In other words, allow for -1 as a valid key size in support
of the --textkey to SEE.

FossilOrigin-Name: 03573887dbf357f8aa54e4a1cd03b82b0ded8139
2016-09-16 19:42:47 +00:00
drh d145915a59 Fix problems with the fileRead() function in the command-line shell. Fix
a harmless memory leak in the command-line shell, to make validation testing
easier.

FossilOrigin-Name: e660402e5e654b7f37ad2ce201df5cbb2b9eb9a6
2016-09-16 19:11:03 +00:00
drh 0882da8001 Remove the #ifdef SQLITE_DEBUG from around the testcase_glob() routine
in the command-line shell.

FossilOrigin-Name: 9885dac4b98693c4d2ed643022127f1452f19dc6
2016-09-16 18:53:42 +00:00
dan edc3537c61 Fix a problem causing incorrect code to be generated for IN constraints like "a IN (1, 2, 3)" where column "a" is a rowid column with an extra UNIQUE index created on it. Ticket [0eab1ac759].
FossilOrigin-Name: a92aee5520cfaf85ae896365a7e42bdd981f828d
2016-09-16 16:30:57 +00:00
drh 72d5003ed8 Replace a faulty assert() with a testcase() to assure the condition is
tested.

FossilOrigin-Name: a49bc0a8244feb08b83e716d81c2a9512c184539
2016-09-16 15:42:17 +00:00
drh 4313f045c2 Add WHERETRACE macros showing every entry and exit from
whereLoopAddBtreeIndex().

FossilOrigin-Name: e7653decdcee161d379ced40aa1b27246337b000
2016-09-16 14:50:38 +00:00
drh a0daa751f8 Fix SQLITE_OMIT_AUTHORIZATION so that it compiles cleanly.
FossilOrigin-Name: a3e3b3e1c57178ccd38fc7375ec1de8e8ae45372
2016-09-16 11:53:10 +00:00
drh 760c8162ff In the shell, make ".testcase" and ".check" available in all configurations,
not just SQLITE_DEBUG.  All testcases to be named.  Show the result of each
testcase on stdout.

FossilOrigin-Name: 792afefa9c750910082fd102f1ccd10309759dfc
2016-09-16 02:52:22 +00:00
drh cd0509e256 In the command-line shell, add the --new option to the ".open" command.
Also, report the current database filename as part of the ".show" command.

FossilOrigin-Name: 8e5c92039128a430e0509f4f06ea80ba39c35bda
2016-09-16 00:26:08 +00:00
drh 2db8211526 Add the ".testcase" and ".check" dot-commands in the shell, when compiled
using SQLITE_DEBUG.

FossilOrigin-Name: 62289f27ee276090a855982bd8216a465e7d0a27
2016-09-15 21:35:24 +00:00
drh 98365be030 Omit the sqlite3Apis constant object when compiling with
SQLITE_OMIT_LOAD_EXTENSION, since it is not used.

FossilOrigin-Name: 7b10461370828b9c57acaaaea518031d53986fa3
2016-09-15 19:15:19 +00:00
drh 21e19b44f0 Remove no-op code (adding an assert() to prove that the code was no-op)
in the text affinity logic of the bytecode engine comparison operators.

FossilOrigin-Name: b9f5bdbf40ac6382e48f09ebcd53cc908e065527
2016-09-15 14:54:51 +00:00
dan 95489c58f7 Fix a typo in a comment in sqlite.h.in. No changes to code.
FossilOrigin-Name: 12df7152109ffce4b3e0ee233c5ea8103edb902a
2016-09-15 05:47:00 +00:00
drh 72ceae01e5 Slight size reduction and performance increase in sqlite3VdbeHalt().
FossilOrigin-Name: 5990a1bdb4a0734ff23015ada71cf02d0cb1381f
2016-09-15 00:32:42 +00:00
drh 5f6eb1a0dc Optimization to vdbeRecordCompareInt() makes it slightly smaller and faster.
FossilOrigin-Name: 5a2a7712cb8e0b686942dfab4e9e67b5ea7b2be3
2016-09-15 00:04:46 +00:00
drh 481fd50cb4 Update comments used to generate API documentation to include the new
"&#91;dateof:3.X.Y&#93;" notation for dates of release where appropriate.
No changes to code.

FossilOrigin-Name: 55f7f8ee5b1c13aa219198b7ae66f59b3730f4c3
2016-09-14 18:56:20 +00:00
dan 12c56aa452 Fix a bug in sqldiff causing it to confuse blobs zero bytes in size with NULL values.
FossilOrigin-Name: 264e9c75875796cad773d39b775d4604546bc57a
2016-09-12 14:23:51 +00:00
dan ff02e200c0 Add missing "finish_test" command to vacuum5.test.
FossilOrigin-Name: 02f40c3b934ba79f2d45eae3781f2bea0c69c95f
2016-09-12 13:32:37 +00:00
dan d562ec277c Have releasetest.tcl delete all test files except for "testfixture", "testfixture.exe", "sqlite3", "sqlite3.exe", "test.log" and "test-out.txt" after each test run is finished. Passing the "--keep" option restores the old behaviour.
FossilOrigin-Name: e0e042dca98f29c060f76db079afecb3200ffae5
2016-09-12 09:28:21 +00:00
drh 2eb22af03d Changes to give a warning-free build with SQLITE_OMIT_INCRBLOB and
SQLITE_OMIT_SHARED_CACHE.

FossilOrigin-Name: 711c59171b22df04224183a713e6c36e0bb3bba8
2016-09-10 19:51:40 +00:00
dan 9871664ed6 Add test code to delete an SQLite database and its auxiliary files.
FossilOrigin-Name: 8a9d128119fde36c175735be56876d30e5c8586f
2016-09-10 14:43:07 +00:00
mistachkin 35cd8b1eb5 Make the new file test_delete.c portable to MSVC on Windows.
FossilOrigin-Name: 0e3ace39f234c204649ec69c6a69fb0e062c58f7
2016-09-09 20:26:27 +00:00
drh 27fe1c3fcc Remove an unnecessary call to sqlite3VdbeMemExpandBlob() when casting to
text.

FossilOrigin-Name: 19e2e5950541f1a93eed994cc2b1eaf64b68e858
2016-09-09 20:23:59 +00:00
dan 000f95b1ba Add new file test_delete.c, containing test code for deleting an sqlite database.
FossilOrigin-Name: fb0b95e9405a3180d13c6318409af361e9df7632
2016-09-09 20:00:40 +00:00
drh 64caee4086 Performance improvements to the comparison operators in the bytecode engine.
FossilOrigin-Name: 37803b19d219f4107f29b240d5d314600e4bd236
2016-09-09 19:33:00 +00:00
drh b80dbdc2f7 Fix a out-of-order variable declaration for some compile-time configurations.
FossilOrigin-Name: 6ac932c92a61cd68cc5b1816216e4748a5c7b3cd
2016-09-09 15:12:41 +00:00
drh fe3765828a In releasetest.tcl, the --srcdir option is automatic, so no need to mention
it in the --help output.

FossilOrigin-Name: 2bdd838e2c434f1d26b1836ef39fa938ef93131d
2016-09-09 13:23:36 +00:00
drh 2c33183d11 Fix an obsolete comment in the releasetest.tcl source code.
FossilOrigin-Name: afaaa276b256f56adf63cb568e486cb3315c3ec2
2016-09-09 13:17:26 +00:00
drh eedeb92caa In releasetest.tcl:
Improved testing for uncommitted changes.  If uncommitted changes are seen,
exit immediately unless the --force option is used.

FossilOrigin-Name: 9a14e6c46cdda9f10151ee96a0540798573edcf2
2016-09-09 12:29:57 +00:00
mistachkin 0e4125a311 Remove an extra space before function names in the amalgamation.
FossilOrigin-Name: 20f3c7436f6a8a7bab3968adc010c7c8325e4618
2016-09-08 23:16:02 +00:00
drh 1fbd008cf4 Issue a warning and prompt the user to continue if the releasetest.tcl script
is run in a checkout with uncommitted changes.

FossilOrigin-Name: 30e917fff05b02ce2cb1f1c871d638200fbe5716
2016-09-08 23:12:08 +00:00
drh f78dcd1b96 Add support for row-value comparisons, including IN operators, and
row-value updates in the UPDATE statement.

FossilOrigin-Name: ddb5f0558c44569913d22781ab78f3e9b58d7aea
2016-09-07 19:54:24 +00:00
dan 26c8d0ca21 Fix a problem handling expressions like "(a, b) IN (SELECT ... ORDER BY 1, 2)" when there is an index on "a" but not "b".
FossilOrigin-Name: 7f2c5c9ee3628c968306a5ab2e5a9a761f1b8055
2016-09-07 19:37:20 +00:00
drh d609bdb9d3 Add the ext/misc/memvfs.c extension that implements a VFS for read-only
database files contained in memory.

FossilOrigin-Name: 12b7782a9af91eab913e159149cb28b3f5a6557c
2016-09-07 18:11:11 +00:00
drh c097e122b9 Simplify the affinity handling logic in codeAllEqualityTerms(). Logically
the same, just a little easier to read and understand.

FossilOrigin-Name: bbab9621f512b04684163b98b6fc669c68038044
2016-09-07 13:30:40 +00:00
drh af6f65fb26 Merge fixes from trunk.
FossilOrigin-Name: 193f036c87857bd77577ceb462af5034c7cc77da
2016-09-07 13:12:13 +00:00
drh fc8b40f2f6 Fix the ".read" command in the command-line shell so that it understands
that the input is not interactive.

FossilOrigin-Name: d8451fe84d09db6ec7e1bd5f0708ea1b5e85f3d6
2016-09-07 10:10:18 +00:00
drh 57a8c61501 The ORDER BY LIMIT optimization is not valid unless the inner-most IN operator
loop is actually used by the query plan.
Fix for ticket [0c4df46116e90f92].

FossilOrigin-Name: 820644b886f81e991fceb5f1c3290b8959b34528
2016-09-07 01:51:46 +00:00
drh 63cecc4173 Remove obsolete vector-IN test cases. Fix a bad testcase() macro.
FossilOrigin-Name: ab3f8f193a7ec36018bf26c9231a1a6a58b6a523
2016-09-06 19:08:21 +00:00
drh 1431807a0b Fix corer cases of vector IN operators where the RHS is a compound SELECT
that includes an ORDER BY clause.

FossilOrigin-Name: 8329ac6f8d1edcc19c3e0559abe9a8011dbe1497
2016-09-06 18:51:25 +00:00
dan 773d3afaa3 Remove an unnecessary branch from expr.c.
FossilOrigin-Name: 7cc9746c5414e02012efb8180f9eca2646800e74
2016-09-06 17:21:17 +00:00
drh c7a77ae1c6 Avoid unnecessary memory allocations for aiMap in codeEqualityConstraints.
FossilOrigin-Name: 70319c3d76abd1e403fcf2a62668736b92a5f3d5
2016-09-06 17:13:40 +00:00
drh aaf8a0643e Avoid a NULL pointer deref in codeAllEqualityConstraints() following an OOM.
FossilOrigin-Name: c6e528c1c0f17c69c7745b018afa36694118258f
2016-09-06 16:53:53 +00:00
dan 1c12657f9a Simplify the fix in commit [7d9bd22c].
FossilOrigin-Name: bd5a342008575bf66f63881a0bebf43741f2a67b
2016-09-06 16:33:24 +00:00
drh 099a0f5f54 Fix the header comment on codeEqualityTerm().
FossilOrigin-Name: b7e710e406ed22bcc316099b5e200b6bb2d9c872
2016-09-06 15:25:53 +00:00
dan 83c434e68d Fix a problem handling (a, b) IN (SELECT ...) expressions when there is an index on just one of "a" or "b".
FossilOrigin-Name: 231c72d9f651f3a70d5c8af080f3ff181b89d939
2016-09-06 14:58:15 +00:00
drh ed24da4b16 Enhance the sqlite3GetTempRange() and sqlite3ReleaseTempRange() internal
routines so that they use sqlite3GetTempReg() and sqlite3ReleaseTempReg()
when nReg==1.

FossilOrigin-Name: 4071da2f87a2f24a279ac3bced8c794ad374b47c
2016-09-06 14:37:05 +00:00
dan fad0e70c63 Fix a typo in a comment in expr.c.
FossilOrigin-Name: 288e934f356ff6276b3e7581ac0f998ca6e93610
2016-09-06 12:04:50 +00:00
drh 9f24b53dcc Simplified logic to extract a column from a row value.
FossilOrigin-Name: e8f105c3009e9b667db2afc0088b020a2b94d370
2016-09-05 22:50:48 +00:00
mistachkin cc0164b5df Sync up the MSVC makefiles.
FossilOrigin-Name: f66d0d8cf6976c62f7bc0e9390b09fb9976178c1
2016-09-05 20:46:02 +00:00
mistachkin c55c8dbf7f Merge updates from trunk.
FossilOrigin-Name: ea635bf97edb35b95b34adcb63f726f3573b1c4d
2016-09-05 20:40:38 +00:00
drh c1bcd9cc3e Fix an assert() so that it does C-compiler does not combine an assert()
conditional with a production code conditional and thereby confuse the mutation
testing script.

FossilOrigin-Name: 2fa5288a7ef43f1fb26037c1b5e84b7b90400623
2016-09-05 19:57:46 +00:00
drh 3fffbf9327 Simplifications to the SQLITE_KEEPNULL flag on VDBE comparison operators.
FossilOrigin-Name: 96269f0179a7d8fa44ee278cef362962368c59ef
2016-09-05 15:02:41 +00:00
drh 083aefc732 Do vector comparison size checking early - at name resolution time - to
forestall future problems.

FossilOrigin-Name: ae127bcc0a5827786853f47b229021435d6098d7
2016-09-05 12:12:56 +00:00
drh b29e60c448 Catch vector size mismatch problems during name resolution to avoid later
problems.

FossilOrigin-Name: 56562a0346170cf7b72445976864b058437a8ac3
2016-09-05 12:02:34 +00:00
dan 5c3340bd47 Fix a crash that could occur under certain circumstances if the vectors on either side of a comparison operator were of a different size.
FossilOrigin-Name: 42670935aba152ba774c2a8bdcbe72b943309d68
2016-09-05 09:44:45 +00:00
dan 80aa545337 Fix a problem causing the affinity of sub-select row-value elements to be ignored in some contextes.
FossilOrigin-Name: 7d9bd22c0715ede2592ee1fa7ebc215aded1ca1b
2016-09-03 19:52:12 +00:00
drh 8f9d1ad8d5 Merge the fuzzershell enhancement from trunk.
FossilOrigin-Name: ed206048484667e4fe6aaeadd65882537d74bd35
2016-09-03 16:24:43 +00:00
drh 9f6dd025ba Build the generate_series(START,END,STEP) table-valued function into
fuzzershell, to make it easier to construct compact test cases that contain
actual data.

FossilOrigin-Name: 672c21bcf09c5bfb67e061456a56be45409c4f34
2016-09-03 16:23:42 +00:00
dan 2718960316 Consider the affinity of "b" when using an "a IN (SELECT b ...)" expression with an index on "a". Fix for [199df416].
FossilOrigin-Name: f5e49855412e389a8a410db5d7ffb2e3634c5fa3
2016-09-03 15:31:20 +00:00
drh 4910a76d45 Performance optimizations.
FossilOrigin-Name: f1d06c49ba0d814dc7ffb538aac3f4e6251fd8f0
2016-09-03 01:46:15 +00:00
drh 55a6f6dc72 Merge recent changes from trunk.
FossilOrigin-Name: c7271fbde1aebb15daaedb7f1fa75fe410fd46f6
2016-09-02 23:56:32 +00:00
dan c6952addf7 Add a test case for the OOM handled by the previous commit.
FossilOrigin-Name: 9bdf7ca1b317fe0ba7efea38fb395bf6130ac89a
2016-09-02 21:34:17 +00:00
drh 76729ed4be Correctly detect an OOM occurring in the setDestPgsz() subroutine of
backup.

FossilOrigin-Name: d9d8a048d4b621435870b4f8dd13b2938ac2f8fd
2016-09-02 21:17:51 +00:00
dan 033564cca9 Within a backup operation, ensure that a read-transaction is opened on the source database before its page size is read. This ensures the page-size used to write to the backup database is the same as its actual page-size, which is important for ZipVFS databases.
FossilOrigin-Name: 7908fc604991d81140c182b97981fd724ad126ae
2016-09-02 17:18:20 +00:00
dan e5a0cfa161 Have "sqldiff --rbu" ignore rows with NULL values in primary key fields. RBU can't handle such rows and the documentation already says sqldiff ignores them. Because the code now uses "=" instead of "IS" to filter on primary key columns, diffs on virtual tables are faster now too.
FossilOrigin-Name: f4ba894a86aa195bcbe2fa69e91cd870ec3fb577
2016-09-01 14:03:28 +00:00
dan d0d49b9ca3 If SQLITE_ENABLE_ZIPVFS is defined, journal_mode=off is configured and a savepoint or statement rollback is attempted, move the pager into the error state to prevent the transaction from being committed. This makes it safe to use journal_mode=off with zipvfs under some conditions.
FossilOrigin-Name: 38d31e189e7c7899e14455f2c083aa676ce4d4c0
2016-09-01 09:35:20 +00:00
dan a87070a271 Use some of the example code from the sessions documenatation in the sessions test cases.
FossilOrigin-Name: 6602974d17536bcb904a794bddedffd58926794b
2016-08-29 14:18:18 +00:00
drh 2e5c5052fd Fix typos in comments. No changes to running code.
FossilOrigin-Name: a07269f2a0f87e0b736127f528f6caf3b63f9052
2016-08-27 20:21:51 +00:00
dan 6650190891 Fix some comments in sqlite3session.h. No changes to code.
FossilOrigin-Name: 78cd64e202fcbe9ce69070b0f48ccd0c6b48538d
2016-08-27 18:35:55 +00:00
dan 57b60432ba Fixes to fts5 snippet() function.
FossilOrigin-Name: d464a7b18d212720a4f4e2fa4e204f1aca99c837
2016-08-27 18:34:06 +00:00
drh 888e1faf95 Merge updates from trunk.
FossilOrigin-Name: 082fd5f8ac227dbb983da0a772485268af40a484
2016-08-27 14:13:58 +00:00
drh 1ad78c5791 Fix the extra comments (added with -DSQLITE_ENABLE_EXPLAIN_COMMENTS) so that
the sense of &lt;, &lt;=, &gt;, and &gt;= tests is correct and so that the
SQLITE_STOREP2 version is shown correctly.  These changes are already in the
rowvalue branch but are added here since they are technically unrelated to
rowvalue.

FossilOrigin-Name: 4d43c4698eef4e3db7556813f0274b4018c7c2b9
2016-08-27 14:05:12 +00:00
drh 88e665fd0b Fix the "Synopsis" on the OP_Lt, OP_Le, OP_Gt, and OP_Ge opcodes, which
has been backwards for time out of mind.

FossilOrigin-Name: f51248dcfa22e989dacde41021e96a65f12c5ca8
2016-08-27 01:41:53 +00:00
drh 106526e1bc Fix a minor problem in sqlite3FindInIndex() related to rowids being used
as part of the index.

FossilOrigin-Name: 829f802be7d4647dd815b739bbc9e1d1ac6a224d
2016-08-26 22:09:01 +00:00
drh a84a283d18 Fix the sqlite3FindInIndex() to ensure that it always uses a prefix of
the index and uses no repeated columns.  Enhanced comments.

FossilOrigin-Name: b9fc89e432fbe4e5b41959a42797641907e075e3
2016-08-26 21:15:35 +00:00
drh 363fb95bc3 Add an EXPLAIN QUERY PLAN line for when a index is used to implement
an IN operator.

FossilOrigin-Name: 171aa833a2e1650c3d9cf9bd6438ae46f6c35871
2016-08-26 19:54:12 +00:00
dan 4b4f51148a Add test cases to rowvalue2.test.
FossilOrigin-Name: 078bb69e99891ba3b76a39ac974990714c43908f
2016-08-26 19:47:30 +00:00
drh 6fc8f36490 Enhance sqlite3FindInIndex() so that it is able to make use of the
primary keys at the end of an index.

FossilOrigin-Name: 4b589fbfcc4265902de0f552961d2df497a184da
2016-08-26 19:31:29 +00:00
drh 0c36fca004 Fix a post-OOM crash in updateRangeAffinityStr(). Add several ALWAYS()
macros on unreachable branches.

FossilOrigin-Name: 87d40195ae5cc2abd9bae45073a615db81263285
2016-08-26 18:17:08 +00:00
dan b7ca2177d7 Fix a problem with affinity changes and vector range comparisons.
FossilOrigin-Name: b34413ac7e34369b4420e57b0132249dca68a7b0
2016-08-26 17:54:46 +00:00
drh 0dfa4f6fcc Allow ROWID values in indexed vector comparisons.
FossilOrigin-Name: b0cc6be4eb81f21b11796e1f14d4412bf21dea6e
2016-08-26 13:19:49 +00:00
dan 61441c3493 Fix a problem in internal function sqlite3OpenTableAndIndices causing an operand of an unrelated VM instruction to be overwritten. Fix for [ef360601].
FossilOrigin-Name: 7090147903337864d54ecfb2cd84a3f823973167
2016-08-26 12:00:50 +00:00
mistachkin 8e16b2d3e6 Rename a test procedure in 'speed3.test' to avoid a name collision.
FossilOrigin-Name: 84de17bc688f1df2be1a34420470d1b16f8f4e56
2016-08-26 04:32:59 +00:00
drh 64bcb8cfbb Comment improvements. Put ALWAYS and NEVER macros on three unreachable
branches.

FossilOrigin-Name: 397617009e07004596476d6f5644fdf84c376f54
2016-08-26 03:42:57 +00:00
mistachkin 975c800dd8 Adapt the special case of '$' in item names for test 'vtabH-3.1' as well.
FossilOrigin-Name: e4aeaa2bc73b57f1ef134cc4f54e2a652a20b5c9
2016-08-26 02:10:50 +00:00
mistachkin 0a9428d0a7 Make the test 'vtabH-3.1' work when there are less than 5 top-level items.
FossilOrigin-Name: 328f79bb5713abbecaeb0ef3fb37f56a0946b915
2016-08-26 01:47:22 +00:00
mistachkin 7dd7d98bbf Support running the fstree tests in 'vtabH.test' on Windows when not using the system drive.
FossilOrigin-Name: 3680f95ff34fdcf6a18a99268678a56e4be5a023
2016-08-26 01:17:12 +00:00
drh a28f85b076 Remove an unreachable branch from sqlite3ExprAffinity()
FossilOrigin-Name: 9d96f61481704e5ec399ee425f0ebb246902ecc5
2016-08-26 01:02:09 +00:00
mistachkin f10122d535 Fix typos in 'vtabF.test' file. No changes to code.
FossilOrigin-Name: a8546feec9388d96934b16e516a165cd37d32ce9
2016-08-25 23:24:09 +00:00
drh 3cc19132da Merge recent changes from trunk.
FossilOrigin-Name: 5789aab8ef59ae1cdfdae123b078ee03da6e08ed
2016-08-25 22:31:44 +00:00
drh fb82820a38 Fix the sqlite3_trace_v2() interface so that it goes disabled if either the
callback or mask arguments are zero, in accordance with the documentation.

FossilOrigin-Name: 37e6c54b1afc634844026b3fe874dd2d550c6558
2016-08-25 22:06:37 +00:00
drh e347d3e813 Refactor the sqlite3ExprCodeIN() routine for improved maintainability.
FossilOrigin-Name: b56705ae6374db9db82613ef89faa1a1e6b00a18
2016-08-25 21:14:34 +00:00
drh 0a1082aec2 Another fix in the IN-operator algorithm description.
FossilOrigin-Name: f474aeac4fa62d87e73189868d7c7a295ffb7265
2016-08-25 17:47:36 +00:00
drh 1373c3a8c5 Further refinement of the in-operator.md documentation.
FossilOrigin-Name: df0648373a50006ca18d692e12552d1d53d549e3
2016-08-25 17:40:32 +00:00
drh ecb87ac88d Improvements to IN operator code generator comments. Avoid unnecessary
Copy operations on the LHS of the IN operator.

FossilOrigin-Name: b6344298783a1207cba3f635939ddc9ba922ab67
2016-08-25 15:46:25 +00:00
drh ee0f22fd3b Corrections to the IN-operator notes.
FossilOrigin-Name: 25033ee94538289ba7e0147da30a18300047123f
2016-08-25 14:23:59 +00:00
drh 539f2fef03 Add notes on the implementation of the IN operator.
FossilOrigin-Name: d256b2caeb9e3eb5dd88bb569ec71f91e9991c81
2016-08-25 14:00:15 +00:00
drh 18016ad2bb Simplified VDBE code for the vector NOT IN null-scanning loop.
FossilOrigin-Name: 7ae504e62e9bbbbd85a676f3c3922b7fd0cc73d2
2016-08-24 21:54:47 +00:00
drh 72e26dec86 Improved extended comments of comparison operators when the SQLITE_STOREP2
flags is set on P5.  No changes to non-debug code.

FossilOrigin-Name: bbc1b016164ed0793e07302614384d52119463e0
2016-08-24 21:24:04 +00:00
mistachkin 4ef916e233 Modularize all use of the calling convention macros based on the USE_STDCALL nmake macro.
FossilOrigin-Name: e4a56197b08546601bd6a623f667b43f50d603be
2016-08-24 19:58:46 +00:00
drh 62659b2a80 In sqlite3FindInIndex(), improve internal comments and avoid an
unreachable branch.

FossilOrigin-Name: 55945fc12f8157e32e6850e41575c0c6422d29e7
2016-08-24 18:51:23 +00:00
dan 37ff4d4c77 Fix a bug in the fts5 snippet function causing it to return text containing zero phrase instances.
FossilOrigin-Name: b174ed2bde43a1872374ce18b85ac9f067e86fbb
2016-08-24 18:50:47 +00:00
mistachkin 2a1d1e452e Merge updates from trunk.
FossilOrigin-Name: 428fc38d95dd88b90655a97133d0ad1214c9f176
2016-08-24 18:49:20 +00:00
mistachkin 24b6b81cb0 Sync up the MSVC autoconf makefile.
FossilOrigin-Name: 77f7c31a3aa44798cfa5f557242caffb593ce7af
2016-08-24 18:21:58 +00:00
drh 321e828d03 Fix more unreachable branches.
FossilOrigin-Name: 6099c180db55396d6307538a5428ae5ef1b82d10
2016-08-24 17:49:07 +00:00
drh d0b67a8654 Add a NEVER() on an unreachable branch in comparisonAffinity().
FossilOrigin-Name: 505a2f20eac62d4e170f003255c8984e4f3b0918
2016-08-24 15:37:31 +00:00
dan 7887d7f24d Fix a buffer overrun in the code for handling IN(...) operators when the LHS of the operator contains indexed columns or expressions.
FossilOrigin-Name: f41a0391b732a8c4ad188163f34a0f4a22237bb5
2016-08-24 12:22:17 +00:00
drh ac6b47d164 The previous OOM fix was bad. Back it out and replace it with a better one.
FossilOrigin-Name: 1e3bc3698a4b779e6af8e3c727929c4dbddf3edb
2016-08-24 00:51:48 +00:00
drh 894241c847 Avoid a potential null-pointer dereference following an OOM.
FossilOrigin-Name: 25f6ed8de4df9c9890d4a352a6d11084433e82ea
2016-08-24 00:25:27 +00:00
drh e835bc1285 Simplify the row value misuse error message.
FossilOrigin-Name: 838c50a5bf46fd0340839d577fa28ba02b4f2034
2016-08-23 19:02:55 +00:00
drh 66860af3dd Fix a problem with rowvalue UPDATE when the rowvalue is not the left-most and
the RHS is a multi-column subquery.

FossilOrigin-Name: e149e6b93a9afb3d574309c0db60e221e24078f7
2016-08-23 18:30:10 +00:00
drh abb9d5f189 Fix an uninitialized variable in CASE expression code generation.
FossilOrigin-Name: c8ffae05e13033ec7425bf0f002df31f550bb7f1
2016-08-23 17:30:55 +00:00
drh 6ae3ab0036 Fix the SQLITE_USER_AUTHENTICATION login check so that the SQLITE_AUTH_USER
error code correctly propagates and is not overwritten by SQLITE_ERROR.

FossilOrigin-Name: c640489db2037f1a284d7b85fa753ccdac1b8f79
2016-08-23 14:42:15 +00:00
drh cbfe1101b3 Add support for the SQLITE_DBCONFIG_MAINDBNAME configuration option.
FossilOrigin-Name: 7839519349c7371cdb4e16a215eacd27004cbc62
2016-08-22 20:10:01 +00:00
drh 12abf408ff Fix the vector BETWEEN operator so that it only evaluates the left-most
vector expression once.  Add support for vector comparisons in the CASE
operator.

FossilOrigin-Name: 07e69f43a294d35b5145a2b0242ee42d50adab14
2016-08-22 14:30:05 +00:00
drh db45bd5e82 Reinstate the mechanism in BETWEEN that avoids evaluating the first expression
more than once, but fix the affinity extractor so that it works with this
mechanism.  The de-duplication of the first expression still does not work
for vector expressions, though.

FossilOrigin-Name: 2f39987f21bd6dae8d2be610a1fd5f06f8878e9e
2016-08-22 00:48:58 +00:00
drh 84b19a3da1 The docs promise the in "x BETWEEN y AND z" the x expression is only evaluated
once.  That is no longer true, and so some tests are failing.  This needs to
be fixed before merging to trunk.

FossilOrigin-Name: e50d264fdc2f08d19202c68f73f18df301cb233d
2016-08-20 22:49:28 +00:00
drh d832da7f40 Further comment enhancements. No changes to code.
FossilOrigin-Name: d4562a9e7b1eaff41466210e3a0caaf374ec5a92
2016-08-20 21:11:25 +00:00
drh 76dbe7a8d0 Clarification of code comments in expr.c. Clean up the implementations
of sqlite3ExprIsVector() and sqlite3ExprVectorSize() slightly.

FossilOrigin-Name: 4fb66d6592b141a4a71359250dbd1ac454569cb9
2016-08-20 21:02:38 +00:00
drh 8bd0d58e1c Fixes for problems following OOM errors.
FossilOrigin-Name: 9041ee4a6f0e8389297f887f1431ab5cfe783390
2016-08-20 18:06:14 +00:00
dan 783e778f38 Fix other minor problems with the fts5 snippet() function.
FossilOrigin-Name: b56b2a85cf377686727f3929208ede43f797cf76
2016-08-20 17:23:45 +00:00
drh 9854260bca Do not duplicate the Expr.pLeft subtree of a TK_SELECT_COLUMN node.
FossilOrigin-Name: 8384c77ebb3f65fbc54c199885926f2066f0b140
2016-08-20 17:00:16 +00:00
dan f358009a93 Fix a segfault that could occur if a query that used a vector comparison contained certain types of syntax errors.
FossilOrigin-Name: 203f07c5e140e74cf91d0c1e20135c21236f0fc1
2016-08-20 15:01:24 +00:00
drh 9e730f0bb8 Improvements to the vector comparison splitter in exprAnalyze().
FossilOrigin-Name: a3ffd283bc931b04170ef737e56bced33d27f06d
2016-08-20 12:00:05 +00:00
drh 8762ec1935 Improvements to comments. No code changes.
FossilOrigin-Name: 4165d20f64d778a4e48f511a37cfced8579d4dbe
2016-08-20 01:06:22 +00:00
drh a1251bc40d Add support for vector assignments in the SET clause of an UPDATE statement.
FossilOrigin-Name: f320d47d6b7b08d9552c8444004bc256348bda90
2016-08-20 00:51:37 +00:00
drh fc7f27b9d2 Change the way TK_SELECT_COLUMN is handled so that the subquery is only
generated once even if part of the vector comparison is used for indexing
and the other part is now.  This change also is a pathway to vector assignment
in UPDATE statements.

FossilOrigin-Name: d8feea7dcde83179bff303072426561cfe825e58
2016-08-20 00:07:01 +00:00
drh 8d25cb90cd Replace the magic number (-2) with its symbol XN_EXPR in the
exprMightBeIndexed() routine.  No logic changes.

FossilOrigin-Name: d4a5af69cc3bde6f8c02075c07b4d47a0252392d
2016-08-19 19:58:06 +00:00
drh 39a11819f3 Improved comments on sqlite3CodeSubquery(). No changes to code.
FossilOrigin-Name: acea4ee136def4815d22eec240c5903a72bde9bd
2016-08-19 19:12:58 +00:00
drh a15a8bc822 Show the WhereTerm.iField value on debugging output, when it is non-zero.
FossilOrigin-Name: 931c95358d8bc02f3e3d8ee4e545a07b2d2c97e8
2016-08-19 18:40:17 +00:00
dan c9e75fb23a Register any built-in fts5 module before loading automatic extensions. This allows automatic extensions to register fts5 tokenizers and auxiliary functions.
FossilOrigin-Name: b10e31dce8e590e1ba30f512374a8c16656bcc72
2016-08-19 18:37:35 +00:00
drh 4602b8e89d Fix an obsolete comment on codeEqualityTerm(). No changes to code.
FossilOrigin-Name: d07be5afb0a915769382dfd815403f8832cb3eec
2016-08-19 18:28:00 +00:00
drh b684fd5c4a Merge recent enhancements from trunk.
FossilOrigin-Name: b17872363b60edab05a5d382a44038aad91e4d9f
2016-08-19 15:41:24 +00:00
drh 05a41ee9ec Merge the VACUUM attached database enhancement from trunk.
FossilOrigin-Name: 12d5e38d269ede27cd38a031a395915301fffe56
2016-08-19 15:17:51 +00:00
drh fcc31545bc Enhance the VACUUM command so that it can operate on an attached database.
FossilOrigin-Name: 083f9e6270fa4faa402b91231271da4f3915c79f
2016-08-19 15:15:55 +00:00
drh 6a754dc767 Disable row counting on queries run while doing a VACUUM.
FossilOrigin-Name: ad35ef116296e5d6aaeb9ef260bf35bee3bd6d20
2016-08-19 15:12:38 +00:00
dan 7ca1ea16ff Have the fts5 snippet() function avoid favouring snippets that begin with sentences that do not contain search terms. Add an extra bias in favour of the first sentence in the document.
FossilOrigin-Name: d8180af2adfc101dfce95a0498b5cd7b30643b30
2016-08-19 14:25:38 +00:00
drh 9ef5e7708a Add the capability to VACUUM an attached database by specifying the schema
name as an argument to the VACUUM command.  Since version 2.0, VACUUM has
accepted an argument which was silently ignored.  Now it has meaning.

FossilOrigin-Name: 29d63059b4d2bb612523ac55ebfef040d054a64f
2016-08-19 14:20:56 +00:00
drh da84dcae54 Add the SQLITE_DBCONFIG_MAINDBNAME interface.
FossilOrigin-Name: d6e3d5796c9991ca0af45ed92ce36f55efc02348
2016-08-18 22:44:22 +00:00
drh 61ea610cd0 Change the name of Db.zName to Db.zDbSName for improved long-term code
maintainability.

FossilOrigin-Name: cb9865e14db1c0076618f13400151112f84960cb
2016-08-18 22:19:03 +00:00
drh e59be01072 Fix a zName to zDbSName conversion missed in the previous check-in.
FossilOrigin-Name: d7cf423cdccada2b0a4b7cc79ccf5f35d6f43212
2016-08-18 20:56:39 +00:00
drh 03181c8c27 Fix a SQL NULL handling bug in the vector IN operator code generation.
FossilOrigin-Name: 936146b12e27784f15a68fe65732c6d92c3a12f3
2016-08-18 19:04:57 +00:00
drh 48cb3a7600 Display SELECT_COLUMN expressions in the .wheretrace debugging output.
FossilOrigin-Name: 3b27a5da100037f75a4efc15e0354a6aa94194f8
2016-08-18 18:09:10 +00:00
drh db97e56217 Display VECTOR expressions in .wheretrace and .selecttrace debugging output.
FossilOrigin-Name: 157347e2580e5078c4081d602e9d1a82d194e719
2016-08-18 17:55:57 +00:00
drh c8d0b0b9d4 Since the TK_VECTOR token is not actually used by the parser, make it an
extra token code added by the tool/addopcodes.tcl script during parser build.

FossilOrigin-Name: b40b202c1f82808d2240e87b22f1e78b2208cb26
2016-08-18 15:36:03 +00:00
drh 5ea494425f Merge recent enhancements from trunk.
FossilOrigin-Name: 4768a1066cb9c7627064d7efec44188d6755cb03
2016-08-18 15:21:16 +00:00
drh a79e10b665 Simplify the vector comparison code generator logic, and the resulting
VDBE code.

FossilOrigin-Name: e2ad0b5d8e1e83118c12889150aca2f2a6b2bdde
2016-08-18 15:15:29 +00:00
dan b39a5ac229 Adjust some tests to account for recent changes to the fts5 snippet function.
FossilOrigin-Name: 184ecbe9c0c3280a22cdeda5c7836a7b280c3e1f
2016-08-18 14:47:48 +00:00
drh 69c338263a Rename the Db.zName field to Db.zDbSName to make it more descriptive and to
distinguish it from all of the other "zName" variables scattered throughout
the code.

FossilOrigin-Name: 92a22f01343a898455fd61c3b8e7d7c954f5b569
2016-08-18 14:33:11 +00:00
dan e7036202bc Bias the fts5 snippet() function to return snippets that look like they start at the start of sentences.
FossilOrigin-Name: 60de159476edbd48dc363f7f77f09c32ea68422f
2016-08-17 19:05:12 +00:00
dan 8c2b1fde58 Fix a problem in the fts5 snippet() auxiliary function.
FossilOrigin-Name: a861713cc6a3868a1c89240e8340bc7b2b9559da
2016-08-17 11:14:39 +00:00
drh 0f832ddc06 Fix a bug in destructor processing of Lemon. That has no impact on the
SQLite grammar.  The bug was introduced by prior work to optimize the
Lemon-generated parser used by SQLite.

FossilOrigin-Name: f9035b8e2ea331801402bcb62b203ab092949770
2016-08-16 16:46:40 +00:00
dan 0f5a186c4c Questionable changes to support interruptible checkpoint in ZipVFS.
FossilOrigin-Name: c7a9f26d118c7a453d45fa73efa4d1ab79301659
2016-08-13 14:30:23 +00:00
drh 0f825a7e26 Remove an unnecessary stack variable from sqlite3VdbeExec().
FossilOrigin-Name: c54bd9c82dd34951dc87848c0b19fcccaef928db
2016-08-13 14:17:02 +00:00
drh af69eda63e Improvements to commits. No code changes.
FossilOrigin-Name: 18f5a3bee4f870be4644a6042a20081c46edb7d0
2016-08-13 13:03:46 +00:00
drh a2f629251f Fix to the vector less-than operator. All legacy tests passing now.
FossilOrigin-Name: ec70a67ebc997f457be4d52d8affc37e142dc3ff
2016-08-13 12:37:47 +00:00
dan 460d38f15e Fix an fts5 problem with corrupt database handling found by address-sanitizer.
FossilOrigin-Name: e22252e1da4cd9e41b970970a1c4f466aa6cc133
2016-08-13 10:34:12 +00:00
drh 79752b6e63 Attempt to simplify the logic and generated code for vector comparisons.
Basic comparison operators are working, but there are many indexing test
failures still to be worked through.

FossilOrigin-Name: dfc028cfbe7657d20727a2670ecadb1575eb8cbb
2016-08-13 10:02:17 +00:00
dan 3b96d1e2e4 Fix a buffer overread in fts5.
FossilOrigin-Name: fcfbee6c7d33a9ae7feb46044a0c2fe680460d39
2016-08-13 06:38:31 +00:00
dan 7fb8990688 Have wal file checkpoints exit early if the sqlite3_interrupt() API function is called.
FossilOrigin-Name: 8a5f41c7b1718507524adef1a2730e99cf53270a
2016-08-12 16:21:15 +00:00
drh 471b4b92bd Add VdbeCoverage() macros on newly added VDBE branch operations.
FossilOrigin-Name: 381aa73141db8ec59adbcb09e71af660ee4ae5ce
2016-08-12 11:25:49 +00:00
drh a48d7e7749 Fix a post-OOM memory leak.
FossilOrigin-Name: 14009b32b955b42cfd5f0c2ce7d4b3ce19ce201e
2016-08-12 11:01:20 +00:00
dan 1bf4ca7c42 Add the "modeof=<filename>" URI parameter to os_unix.c - used to specify a file to copy permissions from when a new database is created. Also allow passing NULL as the second parameter to sqlite3rbu_vacuum().
FossilOrigin-Name: ed406d31ff54ee3de8db91690a966e5c561f8f94
2016-08-11 18:05:47 +00:00
drh 088645b090 Merge recent changes from trunk.
FossilOrigin-Name: 959677b97ba15f786936c762e2e68df1151d7ed0
2016-08-11 12:31:21 +00:00
dan 17994e3bca Fix some problems with handling "no such collation sequence" errors.
FossilOrigin-Name: 8278be06fa69e3266866220bdaf5be45a5fcfa23
2016-08-11 12:01:52 +00:00
dan 6ff4627d5d Fix a 1 byte buffer overwrite in the "sqldiff --rbu" command.
FossilOrigin-Name: ab83d7077da80ddbcf399d0797d79e964dc64f0e
2016-08-11 09:55:55 +00:00
drh c73bd0a5cc Fix a harmless compiler warning in FTS5.
FossilOrigin-Name: 2ea0c8b46eefd4874f021f8dfd344be751f2034f
2016-08-11 01:24:56 +00:00
drh 93ca3933d1 Optimization to sqlite3WhereExprUsage().
FossilOrigin-Name: 95493058fcf40306727a281f21c5a2a0011b7d02
2016-08-10 20:02:21 +00:00
drh e104dd3cc3 List of MATCH operator names in isMatchOfColumn() should be constant.
FossilOrigin-Name: 7319d676aaf95ba7391379f4cdf193b6aa898893
2016-08-10 19:43:29 +00:00
drh 922802c44e Performance enhancement in the expression walker.
FossilOrigin-Name: ebccbd96094ac64de39dbd0d220d3a7afd8cd40e
2016-08-10 18:56:32 +00:00
drh f5dbe7f8d8 Tweaks to pcache1TruncateUnsafe() to make it slightly smaller and faster and
easier to test.

FossilOrigin-Name: 059f4e2efefb7b9deaf539110c19bceaeb10c6ce
2016-08-10 15:02:49 +00:00
drh 167fbbe195 Rearrange the code inside sqlite3RunParser() routine so that sqlite3Parser()
is only called from a single place.  This allows sqlite3Parser() to be
in-lined, which results in a 0.25% overall performance gain.

FossilOrigin-Name: 25d1d02b3ea126ade22b2a72649ae55509aa1777
2016-08-10 14:40:00 +00:00
drh 765fecf010 Increment the version number to 3.15.
FossilOrigin-Name: 8c2701e70ab2553d7a586ff5fe7afa02d8c63199
2016-08-10 13:34:16 +00:00
drh 701b68879c Improved comments on the lempar.c parser template. Adjust the
YY_SHIFT_USE_DFLT constant in the Lemon-generated parser tables so as
to guarantee that it is always out of range of the yy_lookahead[] table.

FossilOrigin-Name: 83622f3f50030e4d6abafb99d99742928aaf157c
2016-08-10 13:30:43 +00:00
drh d9fabbcc5b Fix pcache1TruncateUnsafe() run faster for the case where iLimit is
very close to iMaxKey.

FossilOrigin-Name: b07a26df06a2ffb946ff8a1cc7f43eaf701a94b5
2016-08-10 11:50:12 +00:00
drh c83db9e4e1 Performance optimization in the yy_find_shift_action() routine of the
Lemon-generated parser.

FossilOrigin-Name: ba6663beefcc8060e6f3be6ab37c13fdbb08b7de
2016-08-10 01:43:30 +00:00
drh 6bada27205 Prototype for the remember(V,PTR) extension function.
FossilOrigin-Name: f0942c362f45ca1e986e142dbdd3ad957626dfb1
2016-08-09 21:08:42 +00:00
drh 8d57d7af23 Fix harmless compiler warning.
FossilOrigin-Name: 9a5a4f6e3bc265fecf79a7f63d14abbf239da636
2016-08-09 21:01:52 +00:00
dan ccf03677a3 Minor update to the way fts5 column filters are parsed.
FossilOrigin-Name: 14864f2b8470fe98dbd17f59963bf1be8d4962f9
2016-08-09 19:48:37 +00:00
dan 882ef0b8c0 Have fts5 interpret column lists that begin with a "-" character as "match any column except" lists.
FossilOrigin-Name: e517545650631d1e8a7ee63c6646a8b183a0a894
2016-08-09 19:26:57 +00:00
dan 9cd4933ec1 Add rowvalue5.test, which should have been part of the previous commit on this branch.
FossilOrigin-Name: ea03e219ced87777f0c3c6bbb0274078dbb829e2
2016-08-09 05:48:40 +00:00
dan 6256c1c242 Fix some cases involving row values and virtual tables.
FossilOrigin-Name: 156a41f30a0afd9a70e6c26470dcc468a11bd402
2016-08-08 20:15:41 +00:00
dan 1d9bc9b7a0 Fix the EXPLAIN QUERY PLAN output for row value range constaints that use an index.
FossilOrigin-Name: bb60651163553c5e46bf7b2805490570cea647b8
2016-08-08 18:42:08 +00:00
dan adeb970da2 Merge trunk changes with this branch.
FossilOrigin-Name: 0e927a7e0250a65fd8e97b322cd69e93fadd13f0
2016-08-08 16:52:11 +00:00
drh e22c375659 Version 3.14
FossilOrigin-Name: d5e98057028abcf7217d0d2b2e29bbbcdf09d6de
2016-08-08 13:40:27 +00:00
drh 6da466e4f4 Fix documentation typos. No changes to code.
FossilOrigin-Name: ebc396a19fa79bea208ecda277ffff5d02166d0b
2016-08-07 18:52:11 +00:00
dan e099b67c20 Have the TEA package build without SQLITE_OMIT_DEPRECATED. As it uses recently deprecated interfaces sqlite3_profile() and sqlite3_trace().
FossilOrigin-Name: 95578898835b933901603bd4d5e063f1219a016f
2016-08-05 20:54:45 +00:00
dan 43c1ce390f Undo commit [f250166bb]. It is required to handle IO and other errors that occur within a VACUUM of a Zipvfs database.
FossilOrigin-Name: ae72513af37cd806a6d94aaa7c47a740e119d3b1
2016-08-05 16:16:26 +00:00
drh 5360b55c6c Remove an incorrect ALWAYS() statement and add a test case to show when
the condition is sometimes false.

FossilOrigin-Name: 0f57effa3642e66a863f32cc7fba86d167084af3
2016-08-05 15:34:42 +00:00
drh 0aafa9c89c Fix a very obscure problem following OOM in sqlite3_declare_vtab().
FossilOrigin-Name: 68eac74874d0646369bef3650c6cb271cca62ab4
2016-08-05 14:35:47 +00:00
drh 70ae0e93ec Revert the SQLITE_APICALL changes for now. That changes needs further
research before it is released.  Deferred until 3.15.

FossilOrigin-Name: 9adda385267d1a0ecff259b42a284913668441a2
2016-08-04 13:23:28 +00:00
drh cc15313cc9 Add the experimental SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION compile-time option.
When enabled, the "unknown function" error is suppressed for EXPLAIN and
a no-op function named "unknown()" is substituted.  This facilitiates using
the command-line shell to analyze queries from applications that contain
many application-defined functions that are not normally available to the
shell.

FossilOrigin-Name: b7f30a9ff20d580fdaecdcf2b644d09ad6c2575e
2016-08-04 12:35:17 +00:00
drh dd545d3bf2 Make sure the ORDER BY LIMIT optimization is not applied if the inner-most
loop can only have a single iteration and is hence not really a loop.

FossilOrigin-Name: 13e3bd3de6b434b6182ef36be108d7ee0be8ca53
2016-08-04 09:09:44 +00:00
dan 3d1fb1dd75 Fix a problem with estimating the number of rows visited by a query that uses a multi-column IN(SELECT...) constraint.
FossilOrigin-Name: 3c2f908f5b7312570cfa74afcf4252a857cb5237
2016-08-03 18:00:49 +00:00
dan 2c628ea9d9 Fix another problem involving vector range constraints and mixed ASC/DESC indexes.
FossilOrigin-Name: 1559f4c43473e107f7196eea3ee91c53ede22999
2016-08-03 16:39:04 +00:00
dan d66e5794d1 Fix stat4-based cost estimates for vector range constraints.
FossilOrigin-Name: 18af74abc8ceae47ab9fbee3e3e5bb37db8fcba5
2016-08-03 16:14:33 +00:00
drh c0d269e96c Fix a typo in a comment in btree.c. No changes to code.
FossilOrigin-Name: 722c12816347ee9fce7a090cfebef2c5841e7445
2016-08-03 14:51:16 +00:00
drh a36e01a772 Fix the --help output on fuzzcheck so that it fix in an 80-character window.
FossilOrigin-Name: b91444b5db8465f09d112455e722c888b3f94329
2016-08-03 13:40:54 +00:00
dan 78f9bb6c71 Add new test file rowvaluefault.test.
FossilOrigin-Name: e496b2d63984311e6ae117677e6c2417ae24b6bc
2016-08-02 20:45:56 +00:00
drh c330887291 Fix a unused variable that comes up with -DSQLITE_OMIT_DATETIME_FUNCS.
FossilOrigin-Name: e2f9919e34c70761e4e275eeffca8ccf9159223c
2016-08-02 20:42:24 +00:00
mistachkin 3dffcf911f The 'replace.tcl' tool should use Unix line-endings.
FossilOrigin-Name: 50de96314f75494dc1f5b14d62c595a70c4e0638
2016-08-02 19:29:56 +00:00
dan 51d82d1d24 Add tests and fixes for vector operations that use sub-queries with different combinations of LIMIT, OFFSET and ORDER BY clauses.
FossilOrigin-Name: 092b1c5ff53c9f3cfed079c46e3353d93f99303e
2016-08-02 18:50:15 +00:00
dan f9b2e05c75 Fix SQLITE_OMIT_SUBQUERY builds.
FossilOrigin-Name: 339f85f414a484e44d2502d1ff7281caf9b7c838
2016-08-02 17:45:00 +00:00
dan d05a7144cd Fix a problem with vector range constraints and mixed ASC/DESC indexes.
FossilOrigin-Name: e2ad30c8b5366fd8e50f36c62345ed03ec613c47
2016-08-02 17:07:51 +00:00
dan 080508a186 Merge latest trunk changes into this branch.
FossilOrigin-Name: d468101b421e073e9debd7381bde1d36af31369e
2016-08-02 16:24:10 +00:00
dan 95a08c065a Add missing comments and make some code on this branch clearer.
FossilOrigin-Name: 6937677cc2c2db6b21f997559f88a339466cd15b
2016-08-02 16:18:35 +00:00
drh b7203cde29 Updates to requirements marks. No changes to code.
FossilOrigin-Name: b23c10ac8f65bc88a6c7d88e140217222eb4cbe5
2016-08-02 13:26:34 +00:00
dan 914b7e4238 Fix a problem introduced by [77948b5eceab92a7] causing duplicate calls to be made to the xSavepoint() method of virtual tables under some circumstances.
FossilOrigin-Name: e64a4173d2899acf13b73e6e28f2e164fd638a75
2016-08-02 11:29:16 +00:00
drh 38b802dfd7 Fix harmless compiler warnings in sqlite3_status().
FossilOrigin-Name: 7c38a79cdd42aaa45715aea330d10ca859098837
2016-08-02 08:45:26 +00:00
drh 19eb77bbe0 Update the wordcount.c test program and add a new script "time-wordcount.sh"
for additional performance testing.

FossilOrigin-Name: d8ef9f58643f13dd3d16dcde0d829ae08324f04b
2016-08-01 21:17:53 +00:00
dan 553168c706 Fix a problem with vector range constraints involving the rowid column. And other issues.
FossilOrigin-Name: 3ef75d45ebcd8ede91596d69e55fe7d685008a60
2016-08-01 20:14:31 +00:00
drh b0df540d7a Fix other harmless compiler warnings.
FossilOrigin-Name: 90d2c490fc2ed4e073711b84f989ca4d496dcfb5
2016-08-01 17:06:44 +00:00
dan 4df049faec Remove a duplicate typedef from loadext.c (remaining copy is in sqlite3ext.h).
FossilOrigin-Name: fd184e5a8f4577aa9a817eb55e771d8d1021b946
2016-08-01 16:57:30 +00:00
dan d7d19b7137 Add an extra compiler switch to loadext.test to ensure that it picks up the correct version of sqlite3.h when building a test extension.
FossilOrigin-Name: e57fa6af32a1d1bf7be64b26850730f7e714b6c6
2016-08-01 16:50:50 +00:00
dan 870a0705fe Fix a problem with IN(...) constraints where the LHS is a sub-select that is an aggregate query.
FossilOrigin-Name: 1f4dba87da4a44ad26223ad965731164c0d9bad9
2016-08-01 16:37:43 +00:00
drh 8ef24b8deb Update releasetest.tcl to automatically do one round of tests with
USE_STDCALL=1 when running on Windows with MSVC.

FossilOrigin-Name: a6a112de485eb9d15f6fa75568dcb876f00abb64
2016-08-01 15:00:00 +00:00
drh 32c83c8b9e Avoid making unnecessary changes to the signatures of the
sqlite3_auto_extension() and sqlite3_cancel_auto_extension() interfaces.

FossilOrigin-Name: b6ea2f21f602031ef4dbd47462ac11b0bb0d5de6
2016-08-01 14:35:48 +00:00
dan 5c288b929a Fix problems with vector == comparisons and NULL values.
FossilOrigin-Name: 059d0d05354e6efab7892c97b339ffa0b5303587
2016-07-30 21:02:33 +00:00
mistachkin 19e76b2a7c Fix harmless compiler warning seen with MSVC.
FossilOrigin-Name: 390a38a142d36d2c57b3f21aab72edcde450125d
2016-07-30 18:54:54 +00:00
dan cb17ce9300 Merge latest trunk with this branch.
FossilOrigin-Name: 63ae02d084a332250ff6fd8d8c80e53bf5422a68
2016-07-30 17:59:39 +00:00
dan 625015e0c9 Remove the EP_Vector expression flag.
FossilOrigin-Name: e9d9c6d46b46160fad6aa6e3441a65a09157515f
2016-07-30 16:39:28 +00:00
dan 19ff12dd76 Fix some issues with vector range constraints and the column cache. Also vector range constraints and rowid columns.
FossilOrigin-Name: 42607366bfc2dceb1013797a973b3b8df75dcb4d
2016-07-29 20:58:19 +00:00
dan 145b4ea519 Change the way "(a, b) = (SELECT *)" expressions are handled in where.c if there is an index on one of the columns only.
FossilOrigin-Name: 4dfebff2924f46284d5b9cda69175f79b29d6028
2016-07-29 18:12:12 +00:00
mistachkin 11f69b879c Using the header file 'intrin.h' requires MSVC 2005 or later.
FossilOrigin-Name: 9fae75c08b7d3b3e13734193ad8398ef6971cbac
2016-07-29 17:36:27 +00:00
mistachkin be56ad31b7 For test 'shell1-5.0', disable round-trip testing for characters in the range 0xE0 to 0xEF on Linux, due to intermittent shell portability issues.
FossilOrigin-Name: 544c990afd3b64064cc4d970ec5d7eb23eeb9914
2016-07-29 04:12:18 +00:00
mistachkin d62c07d42e Fix typo in a test file interactive output string.
FossilOrigin-Name: 4fedd7902371935e1374ca7df3ffd4c4cf93959b
2016-07-29 02:04:36 +00:00
drh 50972b71e1 Merge additional linkage macro changes from the branch.
FossilOrigin-Name: 8b0eb22ee12b23421dcb8dbeb46909d813788a0b
2016-07-29 01:55:42 +00:00
drh e363d50db8 Further refinement to the calling convention macros.
FossilOrigin-Name: 45588de385d2a721b3e9f04beb6c7b789dd27d42
2016-07-29 01:49:36 +00:00
mistachkin df27352e37 Merge updates from trunk.
FossilOrigin-Name: 71ffa195f5a48280ee522d80ab82e8cdea636961
2016-07-29 01:47:18 +00:00
mistachkin fefe82876c Update the autoconf makefile for MSVC.
FossilOrigin-Name: 2daf20980d4cb9ed36372778ae1f3e595e503549
2016-07-29 01:46:57 +00:00
drh 99bbcc8287 Undo some unhelpful changes to skip-scan scoring that were added
by the check-in [9e2b2681] that improved scoring of index scan.

FossilOrigin-Name: c7d51934a4f30d096bb79fc509fc9dd0df5d89a4
2016-07-29 01:32:36 +00:00
mistachkin c08556844e Add macro necessary for building several extensions when the __stdcall calling convention is not in use.
FossilOrigin-Name: bc8c9b55ddf5227dc6b2116486f4a19bf54fce2b
2016-07-29 01:31:49 +00:00
mistachkin 2d45d7bfab Missed a couple Tcl command deletion callbacks.
FossilOrigin-Name: fc5c187602acceedf7152b6927616d134f779a8f
2016-07-28 23:58:25 +00:00
mistachkin afe18262b4 Use the SQLITE_TCLAPI macro in several extensions that were missed in the previous check-in.
FossilOrigin-Name: df2543652b835353c03956dfbd3e35e5b191372e
2016-07-28 23:54:45 +00:00
mistachkin 85bd982ba0 More compiler warning fixes for GCC related to the auto-extension mechanism.
FossilOrigin-Name: b8218129bc848c61fa6910feae4141dac6ad86fc
2016-07-28 22:53:10 +00:00
mistachkin 78d5e02f99 The return type used by the auto-extension entry points is 'int', not 'void'.
FossilOrigin-Name: bf9c86c74f30136a106f37603a6c7dcc76caf41d
2016-07-28 22:46:53 +00:00
mistachkin 177d0f0b47 Make sure all the auto-extension mechanism function signatures match up precisely.
FossilOrigin-Name: 87ba69b5ca4a8e4ef2bbaaf07a0ff13fc5cd4721
2016-07-28 22:38:31 +00:00
mistachkin 44e95d4f02 Make the extension auto-loading mechanism work with the __stdcall calling convention. Also, fix a couple Tcl command calling conventions missed in the previous check-in.
FossilOrigin-Name: 3ea567c4b07b2a7a027b9b5cb8250ab687803698
2016-07-28 22:23:26 +00:00
dan 7b35a77b1a Fix further issues with multi-column IN(...) operators. Also some error handling cases surrounding row values.
FossilOrigin-Name: cc3f6542bec99b00d2698889bcea2aa0b587efa0
2016-07-28 19:47:15 +00:00
mistachkin e37f7397c9 The 'sqlite3ext.h' content should be processed before being included in the amalgamation.
FossilOrigin-Name: cbe1de4799df4d512bc175f51ed99c6ec6d5a4d1
2016-07-28 19:28:35 +00:00
drh 3a22fdab9a Decorate all interfaces with calling convention macros.
FossilOrigin-Name: fd784887e125bf95f4799ad09cbcba6795173487
2016-07-28 18:55:57 +00:00
mistachkin c0bebc1dcf All SQLite API functions and callbacks in the 'sqlite3ext.h' header file must be decorated with the calling convention.
FossilOrigin-Name: 97fc6e4328fe72cdd10f11a4b4bc9ce14bdc537f
2016-07-28 18:49:20 +00:00
drh a8914faaaa Disable the authorizer callback when reparsing the schema. This avoids
undesirable authorization failures following an ALTER TABLE.

FossilOrigin-Name: 805d01cdabb48a69eb986a7f084e53eb25d76b7f
2016-07-28 18:38:13 +00:00
mistachkin 7c60b26691 Fixup reserved function pointers in the Tcl stubs table and several macros containing Tcl function pointers.
FossilOrigin-Name: 959cd0131a5c717679b6e250229794679efe7f69
2016-07-28 18:18:53 +00:00
mistachkin a121cc7c60 Adjustments to get 'testfixture.exe' compiling with Tcl 8.6 when __stdcall is enabled.
FossilOrigin-Name: 90e89ec9c8efff057a9e43c612427fc5c97ab52d
2016-07-28 18:06:52 +00:00
drh aa0325872f Improvements to the way the COMPILER compile-time option is set when compiling
with Clang.

FossilOrigin-Name: 81f9cf86c48f3cd43755ded4dc97388ec650f8af
2016-07-28 17:24:16 +00:00
mistachkin 7617e4a8a4 Make sure the SQLITE_TCLAPI macro is always defined.
FossilOrigin-Name: f2f1323cc4d2ad2d6794dbfae8d50b747213e85d
2016-07-28 17:11:20 +00:00
mistachkin f27a80cf18 More work on getting the 'testfixture.exe' target to work correctly.
FossilOrigin-Name: 36b72fd609cf151f3db0e65b450d7cd515f2ac49
2016-07-28 16:09:52 +00:00
mistachkin fe0c0d2088 Modify the mksqlite3h.tcl tool to handle the syscall typedef specially.
FossilOrigin-Name: 478a84efa6ea13629227ba8970c8ef8545d31074
2016-07-28 15:38:34 +00:00
drh 4194ff6598 Change mksqlite3h.tcl to automatically insert the SQLITE_CALLBACK calling
convention macros.

FossilOrigin-Name: 11ab9c9ab562df98c20abf126a8bac178aef77a8
2016-07-28 15:09:02 +00:00
mistachkin 52b1dbb5fc Allow the 'testfixture.exe' target to be compiled with the __stdcall calling convention.
FossilOrigin-Name: e8be3dfeabaa31b3490793cf8230faae1204be15
2016-07-28 14:37:04 +00:00
dan 34c125747d Merge latest trunk changes into this branch.
FossilOrigin-Name: 9685880f7baeb670739fdcf2d9df08e22abaa699
2016-07-28 13:59:21 +00:00
drh 4aff119f3a New test case to insure legacy CREATE TABLE syntax is supported.
FossilOrigin-Name: 6feff15cae8f0427be790355841d49c479c1c586
2016-07-28 12:52:30 +00:00
mistachkin 69def7ff2f Work in progress on setting a calling convention for all callback functions.
FossilOrigin-Name: 02b8040e1add02734d2dbc6c59737ab74ff8fb18
2016-07-28 04:14:37 +00:00
dan d49fd4e89a Fix some problems with multi-column IN(SELECT...) processing.
FossilOrigin-Name: 719a3b2035a335ca8b9704646b1d641011e3ea0e
2016-07-27 19:33:04 +00:00
drh 5f26e00761 Enhance the query planner cost estimation for index scans to take into account
WHERE clause terms that can be computed using only the index and that do not
require looking up rows in the original table.  This fixes an obscure
performance regression that arose when the ORDER BY LIMIT optimization was
added by check-in [bf46179d44843].

FossilOrigin-Name: 9e2b26811452a5011d0a97a689636fa4409da856
2016-07-27 19:30:53 +00:00
drh e604ec0be0 Add test cases and fix a comment.
FossilOrigin-Name: 50f8ea37fb9647c4a9da2c269a4d6f54b10ce96b
2016-07-27 19:20:58 +00:00
drh 2409f8a112 When estimating the cost of an index scan, factor in the cost savings of
being able to use the index to evaluate some WHERE clause terms without
having to do a table lookup.

FossilOrigin-Name: a59b5622f7cc6e502d71aabc12c053582cd03609
2016-07-27 18:27:02 +00:00
dan d93ba6271b Initialize a variable in where.c to avoid a valgrind warning.
FossilOrigin-Name: 4d59df02d3713b3e3804e1a88e676749b2794286
2016-07-27 16:03:54 +00:00
dan d9ed09d47b Merge latest trunk changes into this branch.
FossilOrigin-Name: d4f3d52c5a11fc7ad7e8cad76361edbcef13a12f
2016-07-26 18:15:35 +00:00
dan 8da209b169 Fix where.c handling of "IN (SELECT ...)" expressions when the SELECT returns more than one result column. Also error handling for other row value constructor cases.
FossilOrigin-Name: 061b8006034f06a0311b4304c8b14d2c8b0153df
2016-07-26 18:06:08 +00:00
dan 2900a6222f Ensure that the sqlite3_scrub_backup() extension creates a backup database at least as large as indicated by the database header, even if the last page of the input database is a free-list leaf.
FossilOrigin-Name: 483994a54dee3c7a3801e0e9d3c96fa9dbd8d2fd
2016-07-26 10:46:21 +00:00
drh 9d60875901 Copy the cache_spill setting from the main database over to the
vacuum_db transient database when running a VACUUM.

FossilOrigin-Name: c0e7d98ef2a13ede5ae865083ede1aaffdf43310
2016-07-26 04:49:43 +00:00
drh 426f4ab009 Make sure affinity is applied correctly on lower-bound range constraints
in the min() optimization.  Fix for ticket [a0bac8b3c3d1bb].

FossilOrigin-Name: b819bace9c2a0b0159122b26db96a8f50a6f0eac
2016-07-26 04:31:14 +00:00
drh 2b62b5def8 In the VACUUM command, set the cache_size of the transient vacuum_db database
to be the same as the database being vacuumed.

FossilOrigin-Name: b78d99548ac53ac10dcc38368cc4b29c8cbcb09b
2016-07-25 22:40:12 +00:00
drh 07d9a03187 Fix a test case in FTS5 to make it compatible with Tcl 8.5.
FossilOrigin-Name: a495f8e77e14241150f79e746c7303284f04621a
2016-07-25 21:11:53 +00:00
drh 422dded5a9 Minor test infrastructure changes to better support SEE testing.
FossilOrigin-Name: 8dcb9d506b5eef3a21d97877217e0df69966a915
2016-07-25 16:10:43 +00:00
drh a522473c65 Add a new %ifdef to parse.y so that the build works with SQLITE_OMIT_SUBQUERY.
FossilOrigin-Name: 38a48cfb9a8212970c4a4f8458643c22ed067e8b
2016-07-25 14:40:43 +00:00
drh 017256802b Changes to test scripts to get them all running on OpenBSD.
FossilOrigin-Name: 9e7bedeee444cbf0b1a9165e88928c5d85088de1
2016-07-25 14:20:01 +00:00
drh 2aed979592 Disable the DBSTATUS_CACHE_USED_SHARED tests on mac when memsys3/5 is disabled
due to differences in the allocation sizes for the Darwin memory allocator.

FossilOrigin-Name: d6f6c87c9c0acf609a9d5bea818bb7a5437109a1
2016-07-25 12:10:25 +00:00
drh 26fe413be6 Update the vacuummem.test script so that it works on mac as well as on linux.
FossilOrigin-Name: ea7fb98b96f13f7dc5ed83ec5e8ad8857e20e06e
2016-07-25 12:01:18 +00:00
drh 5d513ba08c If both MEMSYS3 and MEMSYS5 are enabled, than automatically disable MEMSYS3.
FossilOrigin-Name: ccc22e14dc5d910d632807f49484be54dc2fde83
2016-07-25 11:57:21 +00:00
drh 6fe4c184fb Another attempt at getting --enable-memsysN working.
FossilOrigin-Name: 5f40e6ad599eea59a5adc3a11d6f7998872736b4
2016-07-25 11:39:24 +00:00
drh 26197d1b62 Fix the --enable-memsysN options in configure so that they actually work.
FossilOrigin-Name: 679552550e085497b98478bbe28056d99fe4aab4
2016-07-25 11:32:09 +00:00
drh c530b9c65b Add --enable-memsys3 and --enable-memsys5 options to the configure script.
FossilOrigin-Name: 67e1dc9842dc8a6ae5edef21bdb2ef6d3f4a17b7
2016-07-25 11:27:22 +00:00
drh 5fe63bfb93 Evidence marks and code reformatting for SQLITE_TRACE_STMT operation.
FossilOrigin-Name: e1e022383114525241454f63ea8b9768fb7ec657
2016-07-25 02:42:22 +00:00
drh bd441f7700 Change SQLITE_TRACE_STMT to return unexpanded SQL text in the X argument.
Add documentation on how and when to use sqlite3_expanded_sql(P) to compute
the expanded text for legacy sqlite3_trace() compatibility.

FossilOrigin-Name: 163e15229d837a5471007cffb8d41faafd081737
2016-07-25 02:31:48 +00:00
drh 087ec072ef Fix code so that the deprecated sqlite3_trace() and sqlite3_profile()
interfaces are not called when SQLITE_OMIT_DEPRECATED is used.

FossilOrigin-Name: 1c5baae3c545096a29a093f7d4387771f1db507c
2016-07-25 00:05:56 +00:00
drh 4b363a5130 Use sqlite3_trace_v2() instead of sqlite3_trace() in the shell.
FossilOrigin-Name: c8e0539b970585cbb3619461a53abb0c3b308a17
2016-07-23 20:27:41 +00:00
dan ba00e30a3a Allow vector IN(SELECT ...) expressions to use an index if either all the indexed columns are declared NOT NULL or if there is no difference between the expression evaluating to 0 and NULL (as in a WHERE clause).
FossilOrigin-Name: e2fd6f49b1b145bec09c581cc982b89429643ae9
2016-07-23 20:24:06 +00:00
drh 2ce26ff10a Add the json_quote() function to the JSON1 extension.
FossilOrigin-Name: 269892abf6e59c417729669cc764d1f237e093fd
2016-07-23 19:34:53 +00:00
drh eb09f6d788 Small tweak to the btree balancer for improved tree balance.
FossilOrigin-Name: 8817dedb75430e6c78ff527f7ded4abb35776cef
2016-07-23 19:18:55 +00:00
drh 49dcd79e7d Fix recently added tests so that they work in all configurations.
FossilOrigin-Name: d0bcaf0cd92ae5bbea7ad68537ba89437d5c39e8
2016-07-23 14:50:26 +00:00
drh 194c21de34 Add the sqlite3_expanded_sql() and sqlite3_trace_v2() interfaces.
FossilOrigin-Name: 99a6c51887d9d78409944c5a028d5a3ac2e066a7
2016-07-23 05:22:02 +00:00
drh 8afffe7244 Improvements to sqlite3_trace_v2() documentation. Fix the
sqlite3VdbeExpandSql() routine to respond better to OOM conditions.

FossilOrigin-Name: 0400f642d542e62bb428e0bf263964c65691368e
2016-07-23 04:58:57 +00:00
drh 557341e8fa Add requirements marks to the sqlite3_trace_v2() interface documentation.
FossilOrigin-Name: ebd388e94da4a2b29c2a546f832d359619803ec5
2016-07-23 02:07:26 +00:00
drh cf1e395acb Fix sqlite3VdbeExpandSql() so that it handles OOMs by always returning NULL.
FossilOrigin-Name: 5a027fe4127d498e0dc0d9439131c6a29085cf0a
2016-07-23 00:43:14 +00:00
mistachkin a4c07346b7 Revise a warning fix from the previous check-in to improve clarity. Also, fix an incorrect test prefix (typo).
FossilOrigin-Name: f50a3fd6606c14b82c9b938bfca284d54b6c650f
2016-07-22 21:35:38 +00:00
mistachkin 80f2b33a12 Fix harmless compiler warnings seen with MSVC.
FossilOrigin-Name: 8bb6e6fcedf7d0ae796b8848593106c921ebf21a
2016-07-22 21:26:56 +00:00
drh 9a8b9ec51c Be sure to hold the database connection mutex while calling sqlite3VdbeExpand()
from within sqlite3_expanded_sql().

FossilOrigin-Name: 527b5ba68c0b0185958b945b197f9022951d9379
2016-07-22 20:45:03 +00:00
drh dec8bc0eb4 Add requirements marks to the sqlite3_expanded_sql() documentation.
FossilOrigin-Name: 409535e6dfc307f26ea3d9f51be51c439b6d7b22
2016-07-22 20:20:53 +00:00
dan 4097d0ca79 Merge latest trunk changes with this branch.
FossilOrigin-Name: 60fed5cdd4a44aefa1b4d505adeb7936f2f0b952
2016-07-22 17:58:05 +00:00
dan 12ca5ac3d2 Fix a problem with upper case module names in the "sqldiff --vtab" command.
FossilOrigin-Name: 87e25fc472604b3978811be53991104c665a95e7
2016-07-22 10:09:26 +00:00
dan 033ac6af7e Add extra test cases to verify the fix in [64ca1a835].
FossilOrigin-Name: bf98a2de7ed41a8acca89d7369b353f12182cfb4
2016-07-21 18:02:20 +00:00
dan 89441bf185 Add new test file vacuummem.test. To test that any temporary memory used by VACUUM is freed as soon as the VACUUM has finished (not, for example, when sqlite3_close() is finally called).
FossilOrigin-Name: 1b1ad0b28c392ade4321734e9b022a545b845b04
2016-07-21 16:43:54 +00:00
dan 8414e81359 Add the largely untested SQLITE_FTS5_NO_WITHOUT_ROWID compile time option to fts5. For building a dynamically loadable extension that does not use WITHOUT ROWID.
FossilOrigin-Name: d0a1cf1c56c237617fb73cb31f4950365b1f3e9b
2016-07-15 19:17:19 +00:00
drh 8d85364261 The sqlite3_expanded_sql() function compiles, but always returns NULL, when
the SQLITE_OMIT_TRACE compile-time option is used.

FossilOrigin-Name: 53c25ebe34e6776a12260078852973b1d581d20f
2016-07-15 10:01:06 +00:00
drh 0e15d921d9 Merge fixes from trunk. Fix the tclsqlite.test script.
FossilOrigin-Name: d2b1fa55e8809ffc25a25f256349b8d08beadab5
2016-07-15 02:55:51 +00:00
drh eb5a549ecf Disable the CSV extension when virtual tables are disabled.
FossilOrigin-Name: ec7180892ac737f0731cf61f2d095a5c1d18ad93
2016-07-15 02:50:18 +00:00
mistachkin de6fde6af6 Modify the Tcl test command 'sqlite3_bind_blob' to make use of the Tcl_GetByteArrayFromObj() API.
FossilOrigin-Name: e03c81895e52096ab055d8231841e9070602ca84
2016-07-15 01:49:25 +00:00
mistachkin 283a85ca21 Fix typo in sqlite3_trace_v2().
FossilOrigin-Name: 97ccf15fb7e5103c8317d06a1985ba9c88544a60
2016-07-15 00:39:47 +00:00
mistachkin 170e998236 Corrections and enhancements for the new tests.
FossilOrigin-Name: 20e74c638537aa207de41a4f3c932cc05024ea9a
2016-07-15 00:23:01 +00:00
mistachkin a8f286a38a Modify one test result to be case-insensitive.
FossilOrigin-Name: 5ccbeeea7d7933402f7ccb0b1c9b3038989ca746
2016-07-15 00:09:53 +00:00
mistachkin e2f84b403c Add tests, including some for the sqlite3_expanded_sql() API.
FossilOrigin-Name: 8b8c0b749a9a1daca49e7ea9351e253443bb1fc2
2016-07-15 00:07:47 +00:00
mistachkin b52dcd8989 More work on the Tcl interface and tests for the sqlite3_trace_v2() API.
FossilOrigin-Name: f3c4aa97d8c10fdb69efc6405b5fa45781f45a61
2016-07-14 23:17:03 +00:00
mistachkin b56660f5a4 Initial work on the Tcl API interface to the new sqlite3_trace_v2() function.
FossilOrigin-Name: 7b59fa40a01c89cc98414d90a798169c26e04256
2016-07-14 21:26:09 +00:00
drh 0b4c042b86 Minor tweak the the b-tree balancer.
FossilOrigin-Name: d2a0af7a37e390439c3001fedb5834f47fb24a1f
2016-07-14 19:48:08 +00:00
drh 86396219a3 Fix ALTER TABLE so that it does not promote the schema version past 3, as
that will cause DESC indexes to go corrupt.
Ticket [f68bf68513a1c].

FossilOrigin-Name: a7db6e45ad45be9b3003f61d4163f543498a7c9d
2016-07-14 19:13:11 +00:00
mistachkin 0129a54a16 Fix copy/paste typo in the new sqlite3_expanded_sql() function.
FossilOrigin-Name: e7d18c70d2b8f09c9f5b978fe3d69d1088e42322
2016-07-14 09:22:16 +00:00
drh c0e2203adb Fix a parameter misordering on sqlite3_trace_v2() in the loadable extension
interface.

FossilOrigin-Name: 989de2d5b5e7155654d3eebadb9651b23f422c58
2016-07-14 01:13:36 +00:00
drh fca760c841 Add the sqlite3_expanded_sql() interface. Refinements to the
sqlite3_trace_v2() interface to make it more useful.

FossilOrigin-Name: 99ee7ee58d45b29a0000492306ddc0b90563ff51
2016-07-14 01:09:08 +00:00
drh 1637a5171f Legacy tests now passing.
FossilOrigin-Name: f33526a341132435cb4185149a784eef6b3a1a2d
2016-07-13 23:18:27 +00:00
drh 3d2a529df6 First cut at implementing the new sqlite3_trace_v2() interface.
FossilOrigin-Name: cb0062feb018f52689938a58cb76886d431c33f0
2016-07-13 22:55:01 +00:00
drh ed916ba025 Interface design for a new sqlite3_trace_v2() method that supersedes
sqlite3_trace() and sqlite3_profile().

FossilOrigin-Name: 0c569f759f6c4701321d7fea5e7ccb371743bb6b
2016-07-13 21:30:03 +00:00
dan cfbb5e82db Modifications towards better vector IN(...) support on this branch. Not activated yet.
FossilOrigin-Name: 34e35c71b25b0aa2d8931040feb260a78cc48c49
2016-07-13 19:48:13 +00:00
drh a0620acc4a Fix harmless compiler warnings in shell.c for NetBSD.
FossilOrigin-Name: 824b39e54fb9ba562be4d92cc9a54aee1cdf84cb
2016-07-13 13:05:13 +00:00
drh ce0442edf3 Fix header comments and remove an unnecessary version restriction from the
carray() table-valued function implementation.

FossilOrigin-Name: 021d0fb8d85e44839d2b4fdb90b15f0e1f2442e6
2016-07-13 00:55:28 +00:00
drh dd703e22a5 Fix the error counter reset in Lemon generated parsers. This has no effect
on SQLite.

FossilOrigin-Name: 3ef93950d30b34d852d6bbc101d433a04112868a
2016-07-12 19:54:49 +00:00
mistachkin 709947a315 Merge comment typo fixes from trunk.
FossilOrigin-Name: 728c5aa436a5f55c86b019c415a2b71d1b0a8fd6
2016-07-10 19:35:45 +00:00
mistachkin e234cfd11f Fix typos in comments. No changes to code.
FossilOrigin-Name: 77c692a6704cd877ba35d0afb774ab9b46364d59
2016-07-10 19:35:10 +00:00
dan 71c57db099 Add some support for using row value constructors in certain parts of SQL expressions. There are many bugs on this branch.
FossilOrigin-Name: b2204215b231202aef7a218411cc2ddaecf28f35
2016-07-09 20:23:55 +00:00
drh e39cd91aea Add the "#/value-list/" style of results for approximate value matching
in the do_test command of the test infrastructure.  Use this new result style
to make the SQLITE_DBSTATUS_CACHE_SIZE_SHARED tests cross-platform.

FossilOrigin-Name: c869bf34a8ee42ac6542862e59c7a4b89b042f79
2016-07-09 17:47:01 +00:00
drh a912348a19 Fix a compiler warning in test code - in the int64array_addr TCL command.
FossilOrigin-Name: 29fb988f1afc3fe623097acee1a5d08bf8386626
2016-07-09 17:15:05 +00:00
drh 11499f0ab4 Fix compiler warnings on windows.
FossilOrigin-Name: 8b22f777a11438ab0baadc7d9e471f415b734d1f
2016-07-09 16:38:25 +00:00
drh 43f58d6a17 Fix various internal #defines to conform to new C-language naming restrictions,
specifically that private-use macros names must not begin with "_".

FossilOrigin-Name: 5471aca0158851d3fb0a2517306917536deb38bb
2016-07-09 16:14:45 +00:00
drh c2024c4ef2 Add support for the win32-none VFS.
FossilOrigin-Name: b5f32a896d0e4010ec67fcf1d635bb9aa797d3c2
2016-07-09 00:06:21 +00:00
mistachkin 1e75483cf0 Initial work on a Win32 VFS with NOP locking.
FossilOrigin-Name: 549abe3f89b55b05a05f267865a5dd84b8cd335d
2016-07-08 21:14:37 +00:00
drh d3d4b3c698 Another attempt to fix error handling in Lemon. This change is a no-op for
SQLite's usage.

FossilOrigin-Name: e1d8ef311cabcb96495a88404991b1416655e4a8
2016-07-08 19:54:38 +00:00
drh 5225449e5b In the sqldiff program, make sure the first argument to the db_prepare()
utility function is always a valid format string.

FossilOrigin-Name: 8bb8d886ffa948cd7bc66c8c62da76bce233be2e
2016-07-08 02:14:24 +00:00
dan c8dcdff37e Add the SQLITE_DBSTATUS_CACHE_USED_SHARED sqlite3_db_status() parameter. This option is similar to DBSTATUS_CACHE_USED, except that it divides memory used by shared caches evenly between all connections.
FossilOrigin-Name: 06cf2680588c8dc4f0cbde275a09cfdcb5943268
2016-07-06 18:42:34 +00:00
dan 9c10608a26 Change the name of the SQLITE_DBSTATUS_PROPORTIONAL_CACHE_USED to SQLITE_DBSTATUS_CACHE_USED_SHARED.
FossilOrigin-Name: d58401ab26c7c5417eb7d540f47d11c4e49edcb2
2016-07-06 18:12:54 +00:00
dan dc7b7385c9 Fix a test script problem causing a test to fail if the ICU extension is enabled.
FossilOrigin-Name: 0c228f5d3db1be598ebf5d9170428c19d18e01ad
2016-07-06 10:17:43 +00:00
dan 272989b44d Add the SQLITE_DBSTATUS_PROPORTIONAL_CACHE_USED sqlite3_db_status() parameter.
FossilOrigin-Name: 118321c8b9d88b8f439c952436f42838c3fc80cb
2016-07-06 10:12:02 +00:00
dan 50687436f7 Fix a memory leak in recently added test code.
FossilOrigin-Name: 724e4cdc25fc80b8face57b3398cd338994fb23c
2016-07-06 09:19:14 +00:00
drh e0a6e0fda0 More fixes to Fossil so that it automatically resets its error counter at the
end of a parse.

FossilOrigin-Name: 2683b375ad1291172fdb47d94e16fcf869c78c8a
2016-07-05 16:11:26 +00:00
drh 240c7faf8b Attempt to reset the error count in the Lemon-generated parser after
a parse failure.

FossilOrigin-Name: 91889fa30e84760e0d4b3d429c4abdef5a3f7931
2016-07-05 12:47:28 +00:00
dan 2e993288e6 Add the sqlite3rbu_state() API. Used to determine the current state (creating OAL, ready to move OAL, incremental-checkpoint, finished or error) of an RBU operation.
FossilOrigin-Name: 0357875fbb1bb462feef5121287b2f84da88e497
2016-07-04 11:47:48 +00:00
drh 9697308f44 Add the carray() virtual table as a loadable extension.
FossilOrigin-Name: d8bc6feb99938a2aa06142b217045e4b54c66bf1
2016-07-04 11:34:56 +00:00
drh 2e3f87ae84 Change the name of the intarray() extension to carray() and give it an
optional third parameter that specifies the datatype as one of 'int32',
'int64', 'double', or 'char*'.  'int32' is the default.

FossilOrigin-Name: a204ba99db34b356acb259189158a32d2df25da0
2016-07-03 02:35:47 +00:00
drh ba637157ca Fix an off-by-one comparison in the intarray() virtual table. Get the
intarray() virtual table tests working using the legacy makefile.

FossilOrigin-Name: 7c3d441f2a9f642f3d91dcee854a4d16d298bc34
2016-07-02 20:57:06 +00:00
drh 2519b2a3e5 Merge the alternative table-valued function RHS of IN operator implementation
from trunk.

FossilOrigin-Name: 507fdbfb54ce377f0d870260b07d71b797843fcf
2016-07-02 20:51:31 +00:00
drh 9de4757c9c Fix a problem in table-valued functions on the RHS of an IN operator that
occurs following an OOM error.

FossilOrigin-Name: bead151e72215e6ca2a90eb049cfca414dccea04
2016-07-02 12:33:21 +00:00
drh 5fbab882c0 Add support for table-valued functions on the RHS of an IN operator.
FossilOrigin-Name: ac6000f050ff4efcf8a87f0825077dbf4144f073
2016-07-02 12:08:14 +00:00
drh 7c95696e5c Fix the transitive constraint logic error that can result in a null pointer
dereference.  Fix for ticket [e8d439c77685eca6].

FossilOrigin-Name: 228a7879870f8689e2f9b74fbef2ff93fab7b3c2
2016-07-01 20:12:39 +00:00
drh 883486bada Add test cases to the transitive constraint fix.
FossilOrigin-Name: c952af89c22ddc31491f142b9511608a4c8f9737
2016-07-01 19:48:43 +00:00
dan e336b8914c Add the sqlite3rbu_state() API. Used to determine the current state (creating OAL, ready to move OAL, incremental-checkpoint, finished or error) of an RBU operation.
FossilOrigin-Name: 92e7df0ff5c4c118c63d92a767dc82700438a310
2016-07-01 12:39:58 +00:00
drh 2d05331444 Add the ability to have a table-valued function on the RHS of an IN operator.
FossilOrigin-Name: ba1b441b6003808810667d749635fe6b2e8c6165
2016-06-29 06:19:19 +00:00
drh 64131c15ab Another test case for the intarray($PTR,$N) virtual table.
FossilOrigin-Name: 06e1fab7527c6b4330a58f8d8873afaf2d67ae86
2016-06-29 05:08:01 +00:00
drh 4841624ab9 Add a prototype intarray($PTR,$N) table valued function.
FossilOrigin-Name: 233b33382dc70de45f90b6dfdb5785f20b21489e
2016-06-29 05:00:30 +00:00
drh a2fbe3bec6 Proposed fix for a problem in the query planner.
FossilOrigin-Name: a33d23560959a127e37d8213dc00210cd4b05352
2016-06-28 22:27:56 +00:00
drh 05d1bad674 Prevent the WhereLoop.rSetup cost estimate from going negative on complex
queries.

FossilOrigin-Name: f81050859170c8708a1b296da8dd3ef0dd314a11
2016-06-26 04:06:28 +00:00
drh 4b37cd49a6 Fix the handling of OP_Eq opcodes that compare a register against itself
and that require an affinity change.

FossilOrigin-Name: 507014e4c7a70cd09410c89c8ed466c8edab39d2
2016-06-25 11:43:47 +00:00
drh f5fe00399f Fix the ctime.test script so that it works with clang.
FossilOrigin-Name: 77e4f7a36e6e0ebe842bcb36b2557a5bfba90d3f
2016-06-24 06:23:13 +00:00
drh be11ade7cf Fix the Makefile.in to avoid unnecessary recompiles of sqlite3.c.
FossilOrigin-Name: 67c39e16442d9359b24d60d5f97bd66c19eff16a
2016-06-24 02:50:44 +00:00
dan b10ab53f3a Update the sqldiff utility so that if the --vtab switch is specified "rtree", "fts3", "fts4" and "fts5" tables are diff'd directly and the underlying real database tables ignored. Without this switch, all virtual tables are ignored and the diff is performed on the underlying real tables.
FossilOrigin-Name: b8671e9434180878cfe15d70b793fdee69aabccf
2016-06-23 16:48:35 +00:00
drh ec5935924d Fix the build for -DSQLITE_OMIT_VIRTUALTABLE
FossilOrigin-Name: 911131424857430d46784b167399ecf192584ca2
2016-06-23 12:35:04 +00:00
dan 9c987a833c Update the sqldiff utility so that if the --vtab switch is specified "rtree", "fts3", "fts4" and "fts5" tables are diff'd directly and the underlying real database tables ignored. Without this switch, all virtual tables are ignored and the diff is performed on the underlying real tables.
FossilOrigin-Name: 5d0a9d4c45730e47576bc77373fa7075a74051a5
2016-06-21 10:34:41 +00:00
dan ee84b0f690 For a table on the rhs of a LEFT JOIN operator, do not include terms like "IS NULL" from the WHERE clause in the cursor-hint. These may be false for rows that the cursor would otherwise visit, but true for a row of all NULL values generated by the LEFT JOIN.
FossilOrigin-Name: 913e595615e2ef40fb431f6e7678f6fc8439782e
2016-06-20 17:25:50 +00:00
dan 2b693d63e4 Allow LIKE operators that appear in a WHERE clause to be included in the cursor-hint for a cursor on the rhs of a LEFT JOIN.
FossilOrigin-Name: 7455d932f5079ffe40462a8c119fc22b8a9bcbcc
2016-06-20 17:22:06 +00:00
dan e6912fd819 Include WHERE terms in the cursor-hint passed to a cursor opened for the rhs of a LEFT JOIN iff we can be sure that those terms will not evaluate to true if the LEFT JOIN generates a row of NULLs.
FossilOrigin-Name: 998095aba01b75f685ed981b377e1dfe650d9bbf
2016-06-17 19:27:13 +00:00
dan c497441406 Fix a duplicate test name in cursorhint2.test.
FossilOrigin-Name: fcd12b69cee1335224a65aa6d22c4e302b889398
2016-06-17 14:59:40 +00:00
dan 419b03c1bb Fix a typo in the cursorhint2.test script.
FossilOrigin-Name: c1a5a57cf10dca91082963dcbd3e3ffebc3707ef
2016-06-17 14:47:37 +00:00
dan b324cf756e If a table is on the rhs of a LEFT JOIN, include only terms from the joins ON(...) clause in the cursor-hint passed via OP_CursorHint.
FossilOrigin-Name: 2a2346b04235c6d0b7a8e64c92ee31018285c29f
2016-06-17 14:33:32 +00:00
drh 2ad96f5880 Add the json_quote() function to the JSON1 extension.
FossilOrigin-Name: 2c3714aebf5e40e3728877a235b3c1f93defa33e
2016-06-17 13:01:51 +00:00
dan 3480bfdae9 Add a missing OP_ColumnsUsed opcode to code for expressions like "? IN (SELECT ...)" in cases where expression can use an index that may contain NULL values.
FossilOrigin-Name: 0b1579caf06a2c42433b8bc9dc28c9ad381aa07c
2016-06-16 17:14:02 +00:00
drh 6b92288119 Fix a typo in a comment on the SrcList object.
FossilOrigin-Name: 48b555c42de1cbc031fb6c2c93ef170e491c7d76
2016-06-16 11:16:53 +00:00
drh c14566aff3 Fix RBU so that it builds with -DSQLITE_ENABLE_8_3_NAMES.
Fix "PRAGMA compile_options" for SQLITE_ENABLE_8_3_NAMES such that it reports
the numeric setting: "1" or "2".

FossilOrigin-Name: 0230ca17ba20ecd3d213788ad6891973d52a7b72
2016-06-13 19:58:46 +00:00
drh 6c0e41b951 Fix the declaration of the table implemented by DBSTAT so that it uses
correct datatypes.

FossilOrigin-Name: a1e1cdc51d1c68502f43ac72c28ba87cb1916a0d
2016-06-13 15:59:37 +00:00
drh debaa86c1c Fix an incorrect assert() in the btree logic.
FossilOrigin-Name: fcf6114be94b260641e7c78a58db16a31ac5ab35
2016-06-13 12:51:20 +00:00
drh edc4024b9d Fix the "onecolumn" and "exists" methods of the TCL interface so that they
work in combination with the "profile" callback.

FossilOrigin-Name: d362ba157f993fc74a590cf15a9a2fa589278dd7
2016-06-13 12:34:38 +00:00
drh 4d249e6128 Enhance "PRAGMA table_info" to that it provides information about eponymous
virtual tables.

FossilOrigin-Name: 53a1e5d51304cb3de700c1807a2c945a40240576
2016-06-10 22:49:01 +00:00
drh 8dc570b6af Prefer to use partial indexes for full table scans when that is possible.
FossilOrigin-Name: fe1874321ba31cec9ae65387920c33d8d0178ed8
2016-06-08 18:07:21 +00:00
drh b9f3f6b672 Add the "dbhash.exe" utility program that computes a SHA1 hash over the
invariant content of an SQLite database file.  Free space in the file, the
page size, auto_vacuum status, text encoding, and so forth do not change the
hash.  Only the content matters.

FossilOrigin-Name: f48a4ad33ecd4a86f5529596ff11829ba38b0875
2016-06-08 14:04:50 +00:00
drh 1d5721a777 Fix an undersized buffer in the SHA1 implementation.
FossilOrigin-Name: fb2768154c513881886e89801e906bea959197b3
2016-06-08 13:59:35 +00:00
drh 7c4942cb1a Fix the dbhash utility so that it ignores the root page number when hashing
the sqlite_master table.  Add new command-line options.  Add the ability to
hash multiple databases with a single command.

FossilOrigin-Name: 44f157e0f0d5a76ef9002b2592164c4fdae89e34
2016-06-08 13:49:28 +00:00
drh 290fcaa2d1 An initial attempt at a "dbhash" command-line utility.
FossilOrigin-Name: 2247649ca215c06205b33b2250eb809baf39263a
2016-06-08 01:03:05 +00:00
drh a83a5c3fbc Fix the walcrash4.test test module so that it works on windows.
FossilOrigin-Name: 2091a4c9231c7871f27661adc27dd7df26500f6c
2016-06-07 20:25:19 +00:00
mistachkin 4a58d5fdf5 In winFullPathname, translate '/X:' to 'X:' before doing anything else.
FossilOrigin-Name: e404ad705d0e2d96025d05cc88348ffcd0703533
2016-06-06 20:36:26 +00:00
drh 8a5fd26116 Translate filenames of the form "/c:/*" into just "c:/*" on WinRT and Cygwin.
(SQLite has long done this for Win32/WinNT.)

FossilOrigin-Name: f8470ffc49918099820cc0008b9089e5fe8a7dff
2016-06-06 20:27:15 +00:00
drh 0efd37f28b Fix lempar.c so that the shift-reduce optimization works for error processing.
This is a Lemon issue only and has no impact on SQLite.

FossilOrigin-Name: 3665a2f554e5b8d2717d952dbaf325a39c637c31
2016-06-06 18:17:36 +00:00
drh 4335ad05b8 Initialize the yyerrcnt variable in the lemon parser template. This has no
effect on SQLite itself.

FossilOrigin-Name: 45531654f7f5be3a08e9ee8598f14efe028245d8
2016-06-06 13:24:57 +00:00
drh 05a360913d Small performance boost and size decrease in sqlite3BtreeMovetoUnpacked().
FossilOrigin-Name: e106a77d85c20ae23ebe49a5acceeaffecb40fc2
2016-06-06 01:54:20 +00:00
drh c80937a5f5 Small performance improvement in the LIKE function.
FossilOrigin-Name: 5fb0c35459cf7a8662bf8cd84ac345f6fafda6cc
2016-06-06 01:48:14 +00:00
drh 5cd22006ef Btree interface refactoring:
(1) The sqlite3BtreeKeySize() interface is renamed to sqlite3BtreeIntegerKey()
and modified to work only for table btrees with a rowid.
(2) The sqlite3BtreeDataSize() interface is renamed to sqlite3BtreePayloadSize()
and modified to work with any btree.
(3) The sqlite3BtreeDataFetch() and sqlite3BtreeKeyFetch() routines are
combined into a single sqlite3BtreePayloadFetch() routine.
The result of these changes is a smaller binary and fewer CPU cycles needed
to run queries.

FossilOrigin-Name: 2d831074cf730dce47de5880d7b4570d04d15fee
2016-06-06 01:14:08 +00:00
drh 5e08d0fcb6 Improved comment on cursorOwnsBtShared(). No changes to code.
FossilOrigin-Name: 5e269c2d2667df65592a32d6bc2fa388fd7eb181
2016-06-04 21:05:54 +00:00
drh d66c4f809d Fix a C99-ism and a compiler warning for MSVC.
FossilOrigin-Name: aa53a36ea2eb90cc4939e37e6ad320b4211692fd
2016-06-04 20:58:35 +00:00
drh a7c90c42ea Change the sqlite3BtreeKeySize() interface into sqlite3BtreeIntegerKey() and
make it only work for table btrees.  Change sqlite3BtreeDataSize() into
sqlite3BtreePayloadSize() and make it work for all btrees.  Combine
sqlite3BtreeDataFetch() and sqlite3BtreeKeyFetch() into a single
sqlite3BtreePayloadFetch() routine.  These changes seem to make the
b-tree interface more rational and they reduce both binary size and
CPU usage.

FossilOrigin-Name: bef35e18dd19732f7859287b097feeb593e5900f
2016-06-04 20:37:10 +00:00
drh f94fdd832c Allocate KeyInfo objects from lookaside if possible.
FossilOrigin-Name: b411107a3609d53af4e147f01e311b858b78420b
2016-06-04 17:12:26 +00:00
drh 30e3fdf0ee Fix up speedtest1.c so that it will compile and run on SQLite versions prior
to 3.6.18 (circa 2009-09-11).

FossilOrigin-Name: 9583c0fb39f357a76e0c99ea03b034aea3e03c75
2016-06-04 16:33:48 +00:00
drh cc97173810 Remove an unreachable branch in the UNIQUE constraint parsing.
FossilOrigin-Name: 313e990c741d7db082f1d9b9f3f4c65fdd91b812
2016-06-04 13:57:41 +00:00
drh f0755fc85e The OR optimization is usable on virtual tables with LIKE, REGEXP and/or GLOB
terms in the WHERE clause.

FossilOrigin-Name: fa3a89fc0b88d5ad7f5c232198847b3483eef611
2016-06-03 18:59:37 +00:00
drh a4680a8b19 Add support for virtual tables using a WITHOUT ROWID schema. This merge also
includes enhancements to the CSV extension, which is used for testing of
the new WITHOUT ROWID virtual table mechanism.

FossilOrigin-Name: aa7e9d0cc15c050205b09d5a50f985e4ade571d0
2016-06-03 18:44:43 +00:00
drh 0b2c140a4d Fix a memory leak when a WITHOUT ROWID eponymous virtual table is used.
FossilOrigin-Name: 31b83a7d7e553163eb186fc966a885f237554ec2
2016-06-03 18:21:04 +00:00
drh 7edcf627af Disallow access to the rowid column on WITHOUT ROWID virtual tables.
FossilOrigin-Name: d31c25972bfb6d04caad05534505698776e7e6d5
2016-06-03 17:27:14 +00:00
drh c576b27580 Enhance the sqlite3_load_extension() interface to permit extensions to
return SQLITE_OK_LOAD_PERMANENTLY which will prevents unloading when
the database connection closes.

FossilOrigin-Name: 5908aa4dc59925c414b236b6fd3d3ecd7f3da435
2016-06-03 13:35:55 +00:00
drh ac9c3d2c18 Performance optimizations on the CSV virtual table. Disallow WITHOUT ROWID
virtual tables that have an xUpdate method, for now.

FossilOrigin-Name: 3134b3266c36c9d018e8d365ef46ef638c0792f4
2016-06-03 01:01:57 +00:00
drh 35db31b24b Add the CSV extension to the test fixture. Fix a memory leak in the CSV
extension.  Add test cases for the CSV extension, including one that uses
a WITHOUT ROWID virtual table participating in the OR optimization.

FossilOrigin-Name: 95f483e86e30ae68108904400e18ed41d389446b
2016-06-02 23:13:21 +00:00
drh adcba64df4 Add the data= parameter to the CSV virtual table extension.
FossilOrigin-Name: 769191042aa14e6eccdfe2391fc1011171d5c9ad
2016-06-02 17:44:24 +00:00
drh 273bfe9f20 Fix corner cases in the WITHOUT ROWID virtual table logic.
FossilOrigin-Name: a393bbb972660c1ffcdda923d0f3564ecfcd2f0a
2016-06-02 16:22:53 +00:00
dan 82a1c0e5bb Fix an issue preventing RBU vacuum from working with virtual tables.
FossilOrigin-Name: 3bd85fa5a9a489fd505c973e37c33a76c1b0e957
2016-06-01 10:37:50 +00:00
mistachkin 9f6e686f59 Fix compilation issues with the VFS stat extension.
FossilOrigin-Name: f6e956525b03fa07190e5521edac4758c386cc80
2016-06-01 05:02:05 +00:00
drh 62340f8498 An experimental branch with code that allows virtual tables to be declared
as WITHOUT ROWID tables. This might be useful for virtual tables that model
external data sources that do not have a convenient way of computing a unique
rowid.  The current check-in almost works, but there are still serious issues.

FossilOrigin-Name: 49638f180e26477974cacc69b79e0be0a5e18b29
2016-05-31 21:18:15 +00:00
drh 1fc1a0f280 Add the columns=N parameter to the CSV extension.
FossilOrigin-Name: 28ebeadd6a4c9ff2ce9fc86a0f0fe2f6cf94d3ac
2016-05-31 18:44:33 +00:00
drh abfd272b59 Add the testflags parameter to the csv extension.
FossilOrigin-Name: b93fb2fe0df1b3bea2bc2a4e1528da74ab290593
2016-05-31 18:08:35 +00:00
drh 724b18966d Add the "csv" virtual table for reading CSV files, as an extension in
the ext/misc/ subfolder.

FossilOrigin-Name: 00d3570c8bb96469c984903e20de589e998d4636
2016-05-31 16:22:48 +00:00
dan 0df5024e83 Fix an FTS5 problem (segfault or incorrect query results) with "... MATCH 'x OR y' ORDER BY rank" queries when either token 'x' or 'y' is completely absent from the dataset.
FossilOrigin-Name: 64ca1a835a89fd211078d2cd8f9b649e89be528d
2016-05-30 08:28:21 +00:00
dan dbd2dcbd5e Experimental change to allow virtual tables to take advantage of LIKE, REGEXP and GLOB terms that are part of OR expressions within WHERE clauses.
FossilOrigin-Name: 242507b4ff96bc4c7c7844dbe1c2b8508dbf1d01
2016-05-28 18:53:55 +00:00
drh 66bf810467 Remove an unnecessary malloc from the vfsstat extension.
FossilOrigin-Name: 24f258c2392290168cf34622b89a4a406a3dd853
2016-05-28 17:45:15 +00:00
drh c1502e2f4f Enhance the sqlite3_load_extension() interface to permit extensions to
return SQLITE_OK_LOAD_PERMANENTLY which will prevent the extensions from
unloading when the database connection closes.

FossilOrigin-Name: d3f99a5e8d0486d0917dfe96987c179a6f63b850
2016-05-28 17:23:08 +00:00
drh 444c445ff8 Enhance "PRAGMA compile_options" so that it shows the version of the compiler
used to generate the executable, for common compilers.

FossilOrigin-Name: 6a0f200957ea294a2ae06c0b039a10ac838925f2
2016-05-28 15:22:33 +00:00
dan 00dae0a3ca Update the amalgamation-tarball configure script so that it can use header file "readline/readline.h" with library file "libedit".
FossilOrigin-Name: cbf72b04bb0650b62336d86b22ef59315ccdc183
2016-05-28 15:09:35 +00:00
drh 3c40ae7d3a Add the vfsstat.c loadable extension - a VFS shim that measures the amount
of I/O, and an eponymous virtual table that is used to extract and view
the measurements.

FossilOrigin-Name: 0987487dd4ebfcf66ddeec8ceca47775216a0887
2016-05-28 14:53:48 +00:00
mistachkin f35b8f8369 Clang can define _MSC_VER in some circumstances; therefore, check for Clang first.
FossilOrigin-Name: 3f710bc3617691fa7432a24f1410d4651ca181b6
2016-05-28 00:13:21 +00:00
mistachkin 7ce6cdd515 Check for Clang before GCC.
FossilOrigin-Name: 7c2cd4b05f88a759bdf72d3a249db5984fd7105d
2016-05-27 21:13:43 +00:00
mistachkin 756e09c338 Remove surplus quotation marks from the COMPILER= compile_options setting for Clang.
FossilOrigin-Name: 5c966f200018043f5258eb03e043bb25c7766131
2016-05-27 20:30:02 +00:00
drh 2b9672e998 Remove surplus quotation marks from the COMPILER= compile_options setting
for GCC.

FossilOrigin-Name: 664c132dabe4a871d5c39c11b339f871ca3a5d31
2016-05-27 19:34:29 +00:00
mistachkin 15e2ddeab3 Add basic compiler information to the results of 'PRAGMA compile_options'.
FossilOrigin-Name: d734e2df40d95da74ce0c8dd2da1c14033cad8bb
2016-05-27 18:09:45 +00:00
drh c84a4020ef Improvements to WHERE-clause debug tracing. Show TK_MATCH expressions and
show more details on WhereTerm traces.

FossilOrigin-Name: 71087c12bc75a82f5d1051600a442ef6efc5e899
2016-05-27 12:30:20 +00:00
drh 8dc8247eab Fix Lemon so that it actually works with -DYYSTACKDEPTH=0.
FossilOrigin-Name: a9be4c2d56d08fea2cd1aab20b19092a45ef7620
2016-05-27 04:10:47 +00:00
drh baf254aef9 Fix the Lemon-generated parser so that it compiles with -DYYSTACKDEPTH=0.
It does compile now, but there are subtle issues still.

FossilOrigin-Name: 28d439f816d2fa5263e1c4ddecf3bf1ac2dd6549
2016-05-27 01:07:18 +00:00
drh eeb9565a3e Add a new OP_SeekRowid opcode, that combines the functions of OP_MustBeInt
and OP_NotExists.  This makes the code slightly smaller and faster.

FossilOrigin-Name: ffe80a1bfa014943a614fc6993c1749b9bfec4c1
2016-05-26 20:56:38 +00:00
drh ce3c5011d9 Add the libvers.c tool in the tool/ subdirectory.
FossilOrigin-Name: 2a41f098b2f0523b3d7e6eba6ae91cc0d30752df
2016-05-25 18:53:39 +00:00
drh 756b41ebd4 Enhance Lemon and the parser template so that it can once again build parsers
that have no unreachable branches.

FossilOrigin-Name: 41fd46e2962ba9a1e1f6867567499d1f6f5b8372
2016-05-24 18:55:08 +00:00
drh f34a25a23b Minor change to the walcrash4.test module so that it works when
SQLITE_DEFAULT_WAL_SYNCHRONOUS is set to something other than 2.

FossilOrigin-Name: 61e239bc4310eff172e1e50d51522ecc75dd997e
2016-05-24 18:50:41 +00:00
dan fe912510ea Fix an obscure problem with transactions written in "PRAGMA synchronous=full" mode on systems that do not support POWERSAFE_OVERWRITE causing an xSync() call to be omitted if the last frame written by a transaction is aligned to a sector boundary. This means that if a power failure or OS crash occurs very soon after such a transaction is committed, it may be lost following system recovery.
FossilOrigin-Name: 37de3eab67f12ae1ce5bc8d5e541c64fc6b1fd80
2016-05-24 16:20:51 +00:00
drh abecc0b883 Improvements to the initialization of the push-down automoton for the
Lemon-generated parser.  Smaller and faster.

FossilOrigin-Name: 3b28b68e232060f8b2fe2fe6fa478280da2006ff
2016-05-24 00:40:54 +00:00
drh 118ab65859 Use a pointer to the top of the stack rather than an index into the stack
in the Lemon-generated parser template, for about 6.6% parser performance gain.

FossilOrigin-Name: 3c2a770549d5bb65fcd6cc684e0a0ae6d641ac68
2016-05-23 21:56:24 +00:00
drh 605123a277 Avoid a minor error message when running RTREE without an sqlite_stat1 table.
FossilOrigin-Name: 276e92f5b4c1ee49eabb738b24d73d7af90fb13c
2016-05-23 19:02:58 +00:00
drh f1e2c8e1ff Fix the rtreeG.test test case.
FossilOrigin-Name: 9589e9377118efc356c73ea1aab2d7e6c2f7fc36
2016-05-23 18:27:07 +00:00
drh e62c2fe179 Fix RTREE so that it does not run queries against the sqlite_stat1 if that
table does not exist.

FossilOrigin-Name: 48526a2fe5373e3d19e8b813cc8a342d6b7c9c3d
2016-05-23 18:12:04 +00:00
drh daa14559d2 Remove an extra "finish_test" from the end of rtreeC.test.
FossilOrigin-Name: bfbb6dd84b5e1335e1eae857a03fa33a71fd67a5
2016-05-23 18:06:51 +00:00
dan 5782bc27fa Improve the error messages generated by the rtree module when a constraint fails.
FossilOrigin-Name: 3ad2531efb64b7c53b777ddf3681203217052b32
2016-05-23 16:16:13 +00:00
drh c173ad8011 Lemon enhancement: avoid unnecessary reduce actions that convert one
non-terminal into another but have no side effects.

FossilOrigin-Name: a86e782ad1aa6f5a8b2c54f9dcf0fa61960843f3
2016-05-23 16:15:02 +00:00
drh 711c9810dc Fix comment typos and improve clarity of presention in Lemon. The output
should be identical.

FossilOrigin-Name: b91a5b8297756289d45c8fce0d3399c253517eb0
2016-05-23 14:24:31 +00:00
drh 6831474341 Update the configure script with additional hints on the location of
tclConfig.sh, hints needed by the latest versions of Xcode.

FossilOrigin-Name: 90411a28168f6dacf08242a25bed7d6269041417
2016-05-23 00:10:58 +00:00
drh dfc2daa7c3 More tweaks to improve the performance of the insert logic, slightly.
FossilOrigin-Name: dec1307581216e01ad508ffe4455b957e3356654
2016-05-21 23:25:29 +00:00
drh 8eeb4463d9 Simplify the sqlite3BtreeInsert() interface by gathering the five arguments
describing the content to be inserted into the new BtreePayload structure, and
thus reducing the number of parameters from eight to four.

FossilOrigin-Name: 55f348cdd24c7812ea4b63345514764b69f64dc8
2016-05-21 20:03:42 +00:00
drh 16e2b9694a Remove some unused legacy code from the btree insert logic.
FossilOrigin-Name: 2ce1166717ac3c0cec37b2f6d70d8359fbaefc71
2016-05-21 19:10:21 +00:00
drh 09a4e92c6d Yet another minor size reduction and performance increase in the b-tree
insert logic.

FossilOrigin-Name: 1dbaf7a119edc5150a5d4be1b72f652a574e5bc5
2016-05-21 12:29:04 +00:00
drh cb89f4aba8 Small size reduction and performance increase in the sqlite3BtreeInsert()
logic.

FossilOrigin-Name: 656aa1ecf5129ae43c56a990e95038b5d8cbdcee
2016-05-21 11:23:26 +00:00
drh ed90a4676e Add the shell-script used for routine performance testing.
FossilOrigin-Name: 8e366f18f5bbd594390e7b091083e99639de324e
2016-05-21 00:45:54 +00:00
drh 860a95fd01 Add a simple TCL script for summing cachegrind information for each VDBE
opcdoe.

FossilOrigin-Name: 96cf821b6a69e2e8df33271b7bb674bd12a1ef7b
2016-05-20 23:51:14 +00:00
drh 170c276623 Another optimization on the OP_Column opcode.
FossilOrigin-Name: 1765672c2599eb03d39c52cd2dc32ea1e5ee069e
2016-05-20 21:40:11 +00:00
mistachkin 2380f3f1d0 Fix typo in comment.
FossilOrigin-Name: 9db8f2147339ba519c4ec32e34068e9f4a25e099
2016-05-20 20:58:30 +00:00
drh a1851efc5d Slight performance improvement in the OP_Column opcode.
FossilOrigin-Name: 5c157474391f90f24e8867c77fbc6564c7955ecc
2016-05-20 19:51:28 +00:00
drh d20b2a4109 Remove the sqlite3PagerClearCache() routine, which does not accomplish anything
useful.

FossilOrigin-Name: f250166bb3c1b0c58e703b334825cf6210758fda
2016-05-20 18:09:01 +00:00
drh f431a87c7c Performance optimization and size reduction on the freeP4() routine.
FossilOrigin-Name: 4dc56e8684e0c74fb311c7f0ef1c367da8c7bf70
2016-05-20 15:53:47 +00:00
drh c0a195b885 Increase the version number to 3.14.0 since we are already making significant
code changes.

FossilOrigin-Name: 1a0d05765fa2e69ccd4c98782cf9f5c5b2897719
2016-05-20 15:24:14 +00:00
drh 01c736db40 Use sqlite3VdbeAddOp0() to code OP_Expire, to save a few bytes.
FossilOrigin-Name: 3d55d24dcb27f07d1e645738ee4707e4df923036
2016-05-20 15:15:07 +00:00
drh b982bfea37 Optimizations to link list merge sort code in vdbesort.c, pcache.c, and
rowset.c.  Resulting binaries are 10 bytes smaller and use 0.03% fewer CPU
cycles.

FossilOrigin-Name: 9033afbb31b28a8ad6856ac1f773d8e83bc9ec1c
2016-05-20 14:54:54 +00:00
drh 1524c672e9 For queries with both ORDER BY and LIMIT, if the rows of the inner loop are
emitted in ORDER BY order and the LIMIT has been reached, then optimize by
exiting the inner loop and continuing with the next cycle of the first outer
loop.

FossilOrigin-Name: 559733b09e9630fac9d9318a7ecbaba9134e9160
2016-05-20 14:11:37 +00:00
drh 6326d9f6f1 Set the NULLEQ flag on the sequence counter comparison in the ORDER BY LIMIT
optimization, to avoid coverage complaints about not testing the NULL case.

FossilOrigin-Name: ed1b30dc932a7c03e173b130c5f55f9989c7e0b4
2016-05-20 13:44:58 +00:00
drh 17e0c47368 Autoconf configure.ac adjustment to try to get it to look for both editline
and readline automatically.

FossilOrigin-Name: 645bd696dfd86d8c93080f6ebfddbc9639ec088b
2016-05-20 12:22:16 +00:00
drh 73fa4737ce A few simple test cases for the ORDER BY LIMIT optimization.
FossilOrigin-Name: 08849eab0f6ef29eaf6d2ce9c692de9b953dbd27
2016-05-20 00:21:42 +00:00
drh d711e52229 Appears to work now. Needs test cases, more comments, and code optimization.
FossilOrigin-Name: 990fe50c9182f74c9b54a12602c4c30d891273e6
2016-05-19 22:40:04 +00:00
drh a536df4e7f In a query with both ORDER BY and LIMIT, if the inner loop satisfies the
ORDER BY then try to cut short each invocation of the inner loop once the
LIMIT has been satisfied.  This check-in is a partial implementation only.

FossilOrigin-Name: 852d1eda6ecca1171f6ed800b06f5b4854672002
2016-05-19 22:13:37 +00:00
drh bc5eac00c2 Fixup comments on wctrlFlags value definitions.
FossilOrigin-Name: 58b516e8c0b00a41bc0364eab267bc2ecb9efeff
2016-05-19 19:31:30 +00:00
drh ce943bc834 Clean up the WHERE_* macros used for the wctrlFlags parameter on the
sqlite3WhereBegin() interface, freeing up some bits to be used for other things.

FossilOrigin-Name: d01305841da94b2d47e32744802f69525bf590df
2016-05-19 18:56:33 +00:00
drh a43a02e42e Optimization marks in vdbe.c. No logic changes.
FossilOrigin-Name: cf2737415aff7de7e133da174b645324c99d5758
2016-05-19 17:51:19 +00:00
drh 0eda6cd80d Performance improvement in the OP_Column opcode.
FossilOrigin-Name: 4737cadc414c5f6d256fcceacb19d80d66a8c8e7
2016-05-19 16:58:42 +00:00
dan 21690ff7fc Add test cases to test some fts3/4 edge case behaviour surrounding the '*' character.
FossilOrigin-Name: 1f577e1f08159aeaaf19a7020d9004dd6103d57b
2016-05-19 16:21:30 +00:00
drh 4ca239fd55 Small size reduction and performance improvement in the OP_Column opcode.
FossilOrigin-Name: 0d7730611be974162d9a064a041957d04d55b6d3
2016-05-19 11:12:43 +00:00
drh 3847636701 Add the "scrub" utility program that simultaneously backs-up a live database
and erases all deleted content.

FossilOrigin-Name: c981ab2a4771f8c5e95e2e85e37a02a4bd0e36ee
2016-05-18 21:03:27 +00:00
drh 15efecef6c Omit the unnecessary WHERE_REOPEN_IDX flag in the WHERE interface.
FossilOrigin-Name: 915416d15f43c4e1d3afa8121bb6fa09f9f67e30
2016-05-18 21:01:27 +00:00
drh 55bcaf6829 Version 3.13.0
FossilOrigin-Name: fc49f556e48970561d7ab6a2f24fdd7d9eb81ff2
2016-05-18 10:57:30 +00:00
drh 0d2c3a0e11 Enhance the scrub utility program so that it does a FULL checkpoint prior to
starting the backup, to ensure that the database file content matches what needs
to be backed up without having to look at the WAL file.

FossilOrigin-Name: ab1c5ce50f139070d7a322f43132a93c8af2ed68
2016-05-17 21:17:51 +00:00
drh 8884d99926 Merge the latest changes from trunk.
FossilOrigin-Name: 5021dfe1f3f723a5938d547a0308f1d63103702d
2016-05-17 17:11:21 +00:00
dan ee7de914d4 Do not run snapshot_fault.test as part of the inmemory_journal permutation.
FossilOrigin-Name: 995c084bde44e678facc5f5d95a2335ce61e57b0
2016-05-16 14:35:15 +00:00
drh 697c9eaa90 Disable shell.exe test cases for UTF8 filenames as they do not work on MinGW.
FossilOrigin-Name: 386bcbba8ed733ee84958e6bd6e9d33c150e6c18
2016-05-16 11:55:09 +00:00
drh 3b02a07e7d Improvements to a comment in the pcache.c file. No changes to code.
FossilOrigin-Name: b369980f0c4550a9034833caa2c7c85d6030f5ff
2016-05-13 17:22:33 +00:00
drh a0f6b124ad Remove the unused PGHDR_NEED_READ flag. Add invariant checking (during
SQLITE_DEBUG builds only) for the PgHdr object.

FossilOrigin-Name: 771c5411e9ebcad00fb4b97556b519488284b87b
2016-05-13 15:22:06 +00:00
drh 4bf7d21f56 Clarification of the pagerFlushOnCommit() logic.
FossilOrigin-Name: 3401d9dcdbec390564574e8d2972c944c204e025
2016-05-13 12:12:38 +00:00
drh 935c4d8484 Fix pager_end_transaction() to ensure that a ROLLBACK does not clobber
unwritten pages in a TEMP file pcache.

FossilOrigin-Name: 9495d33879221c1821331dc72c61a6a3d182f526
2016-05-13 11:50:00 +00:00
drh 7aeb216a19 Additional debugging and tracing logic for pcache.c, turned off by default
using an "#if 0".

FossilOrigin-Name: 32a62e3bd46cf58586617d3f8b1a971c91df205e
2016-05-13 04:24:25 +00:00
drh 5f65ff277d Disable ALWAYS and NEVER when compiled with SQLITE_MUTATION_TEST.
FossilOrigin-Name: 24d9fbc1d0f99b90577ecd6edcd3bc1abc76633f
2016-05-12 19:17:09 +00:00
drh a7a45973e9 Simplification of the sqlite3FaultSim() call inside of
sqlite3PagerCommitPhaseOne().

FossilOrigin-Name: 1b0f4cc362cda1dc175aa363ae4e612b7d1164c3
2016-05-12 19:05:35 +00:00
drh d22f5099b5 Add an assert in pager.c to confirm that pPager->tempFile is always true
for in-memory databases.

FossilOrigin-Name: 3fd71092063bf1d30e03cf2497ea9c57b3ec82eb
2016-05-12 18:38:45 +00:00
dan 82c0447701 Add extra OPTIMIZATION-IF-FALSE comments where required to pcache.c.
FossilOrigin-Name: 9d55b8f541de43deb82d460d32005fd62f5430b2
2016-05-12 17:06:04 +00:00
drh 91ef8ad42c For in-memory databases, it does not matter if pcache entries are marked
"clean" or "writable".

FossilOrigin-Name: 06c1e27ca868f247f8c27b03eb19aac004f28650
2016-05-12 12:08:48 +00:00
drh 42bee5f4d6 Remove an unnecessary call to sqlite3PcacheMakeClean() inside of the ROLLBACK
logic.

FossilOrigin-Name: 0dc50d9915cd88916229ca5c3834de82fa16f017
2016-05-12 12:01:20 +00:00
dan 613723d9fd Add a missing OPTIMIZATION-IF-FALSE comment to pcache.c.
FossilOrigin-Name: bc202e5b418d5a57bfc766883c4417c94829d96e
2016-05-12 09:48:23 +00:00
drh 72e6a39907 For in-memory databases, it does not matter if pcache entries are marked
"clean" or "writable".

FossilOrigin-Name: ad601c7962a60a11699cf31f1faee09b95d5c710
2016-05-11 23:54:14 +00:00
dan 401907e3ff Remove a redundant condition from pcache.c. Add an OPTIMIZATION-IF-TRUE comment to another condition that requires it.
FossilOrigin-Name: 3bfd2621d13b4f842f3af6d35519653f4eb8cad7
2016-05-11 20:03:23 +00:00
dan b2ef900ade Remove some a small amount of redundant code related to PCache.pSynced from pcache.c.
FossilOrigin-Name: 9cc8cad78fdfe044ad6726ebfe6909c1e242fa55
2016-05-11 15:41:15 +00:00
drh a37e0cfb22 Do not reset the page cache when a rollback journal truncate fails, as doing
so can cause loss of information for an in-memory TEMP file.

FossilOrigin-Name: 345ce1c9f64f2a424663b4dfcbe4586d9df7bff6
2016-05-11 12:47:46 +00:00
drh 65c6420335 Always truncate, rather than persist, the rollback journal of a TEMP database.
FossilOrigin-Name: 42fb6f1e99a6c31889819a0302679d598dc0ab1b
2016-05-11 11:04:17 +00:00
drh 5c8e092804 Add pcache tracing macros. Off by default. Requires changing an "#if 0"
and recompiling to enable.

FossilOrigin-Name: d9313d19c75a62f558b3df6b15595b15bbfa0b62
2016-05-11 10:57:04 +00:00
dan 78d1c90567 Add another test case to temptable3.test.
FossilOrigin-Name: 223640243efc52c14bb2bb540833a2a624eaa41a
2016-05-10 20:16:43 +00:00
drh d12bc6022b Fix a problem in sqlite3PagerMovepage() when working on a temp table for which
pages have been spilled.

FossilOrigin-Name: 20cf8811caf705b482be100baecb3ef72aee2d5a
2016-05-10 20:03:08 +00:00
drh 3791c9c288 Fixes to requirements marks. No changes to code.
FossilOrigin-Name: 79ecd0ef20c12198e950a730871444a980a0f1b2
2016-05-09 23:11:47 +00:00
drh 83561932a5 Enhancements to test/sort5.test so that it works with SEE.
FossilOrigin-Name: 8a39c8ee49e6e80c83613546cf328801c80b7c4d
2016-05-09 22:35:06 +00:00
drh f52a697e04 Remove some forgotten debugging lines from test/sort5.test.
FossilOrigin-Name: f5875489810101c13a7917bde86e6a23b088e386
2016-05-09 22:32:18 +00:00
drh a72a15e45a Omit the unnecessary WHERE_REOPEN_IDX flag in the WHERE interface.
FossilOrigin-Name: da94a6e0ebacad8f235dcd653a25474327f26137
2016-05-09 19:58:56 +00:00
dan ba1079ba2a Update a comment in fts5.h. No changes to code.
FossilOrigin-Name: 14e53d0e2f62d82ae1d64a72fd9711548e3bf5ea
2016-05-09 19:03:42 +00:00
dan 170b66493d Fix the FTS5 xQueryPhrase() API function so that it recognizes column filters.
FossilOrigin-Name: 48505cde05d74748454dc135d4ec25954ecf020e
2016-05-09 18:05:44 +00:00
drh e8da01c189 Make the sqlite3DeleteTable() routine smaller and faster.
FossilOrigin-Name: d75140b851a34a5eb66041e294e421628efbc5ba
2016-05-07 12:15:34 +00:00
drh 3eead27022 Fix typo in the intpkey-17.2 test.
FossilOrigin-Name: a45fda657d987f5c923d141584841a6c62dfb504
2016-05-07 12:15:15 +00:00
drh f09c48233a Simplification to the logic used to decide between OP_Seek and OP_NotExists.
Use OP_NotExists for both DELETE and UPDATE.

FossilOrigin-Name: 3a695263183303e3f64eb2320752d0fdef53eaf2
2016-05-06 20:23:12 +00:00
drh a3fd75d426 Corrections to comments on the whereScanInit() interface.
FossilOrigin-Name: ab7ab415d19524f6c3901e474d3a154f55d28530
2016-05-06 18:47:23 +00:00
drh 87f8f1ac69 For DELETE operations, make sure that seeks on the main table are not
deferred, since if they are and none of the indexes reference columns of
the table, the seek might never occur until the OP_Delete opcode, which is
too late.  Fix for ticket [16c9801ceba49].

FossilOrigin-Name: 93a2bace5704f7ecad56541a6b3e06a88f7f393f
2016-05-06 16:49:54 +00:00
dan 39332fb0f7 Fix an error in main.mk causing testfixture to use individual fts5 source code files instead of fts5.c.
FossilOrigin-Name: 933a1c818c1d1ccec8680e1ba87f2cbe37cc9f7d
2016-05-06 16:30:34 +00:00
drh bcf6884afd In the WHERE generator, when building code for a DELETE operation, make sure
that seeks to the main table are not deferred.
This is a better fix for the [16c9801ceba49] bug than the previous.

FossilOrigin-Name: 150dd09ebd7b17234a79e1811a0fae8b0a7a40d5
2016-05-06 16:06:59 +00:00
dan d49c6930b1 Fix a bug in sqlite_analyzer causing it report (slightly) incorrect values for the number of entries in indexes or WITHOUT ROWID tables.
FossilOrigin-Name: dc37750d4e87d0c529785adceeebd838b8f8591d
2016-05-06 15:16:02 +00:00
drh 70077d1733 Do not scan indexes that have the integer primary key as their left-most
column.  This fixes the crash of ticket [16c9801ceba] but it seems like
the wrong fix.  More investigation needed.

FossilOrigin-Name: 50312273ffaf1bd4bfdc73865fa0b19166968429
2016-05-06 11:31:10 +00:00
drh 8271630e81 Additional error reporting. Open the source database read/write so that
it can delete the WAL file when done.

FossilOrigin-Name: d2efd3c176f0eba2d78105f0bb3161db38bd4bab
2016-05-05 23:59:22 +00:00
drh e04369e29e Working when run against sqlite.fossil.
FossilOrigin-Name: b0bd9dd6255be161ea289ba6caa3fbd568128f62
2016-05-05 23:39:30 +00:00
drh 2a9bd02645 Finished implementation compiles, but untested.
FossilOrigin-Name: aeb88bdf6fe9e5839b1503ab5740b27bc09d4842
2016-05-05 23:09:57 +00:00
drh da110bfece Initial check-in of the "scrub.exe" utility program prototype. Not yet
fully functional.  In particular, no scrubbing is done.

FossilOrigin-Name: bdf2ec77d1542d4e9b68218f558710a3efc15823
2016-05-05 17:15:23 +00:00
drh ad5a9d715f Renumber internal constants in the printf() implemention for a small
performance improvement.

FossilOrigin-Name: 69d11447f4b1a8c536c3b6573d2a3419da870412
2016-05-05 11:53:12 +00:00
drh 4e80d5fcf1 Disable the session extension API if SQLITE_ENABLE_SESSION is not defined.
FossilOrigin-Name: 71af9ac165ac02272f4886f69bd9ab4770fd7bb6
2016-05-04 21:06:21 +00:00
mistachkin 9fe3fbbc35 Fix typo in comment. No changes to code.
FossilOrigin-Name: 6c43ba1c8753a4029e127078652f265c408a01c0
2016-05-04 19:04:20 +00:00
drh 91da707280 Only disable the one-pass DELETE optimization if the WHERE clause contains
a correlated subquery.  Uncorrelated subqueries are allowed.  This is a
refinement of check-in [3f221f592a9a1] that is the fix for
ticket [dc6ebeda9396087].

FossilOrigin-Name: aae389692a2ed2cc92151d51fb2cd5a16921c469
2016-05-04 14:45:30 +00:00
drh 582c080289 Portability enhancements to the configure script on the amalgamation tarball.
FossilOrigin-Name: 7184c4b8869ffc00944abdd8d2c521cb11ea5824
2016-05-04 14:20:15 +00:00
dan c88ae52d86 Disable the PagerDontWrite() optimization for temp tables. It can cause database corruption if a page passed to PagerDontWrite() is dirty at the start of a transaction that is subsequently rolled back.
FossilOrigin-Name: 6341ab2ffef298ca16b323358afbea4a4c1fb0e1
2016-05-04 11:28:03 +00:00
mistachkin 12b35ea980 Minor style tweaks in the MSVC makefile.
FossilOrigin-Name: 1b43358f8979c4f18519e824e0d5f6ef2250107c
2016-05-03 19:40:54 +00:00
mistachkin 1b361ff381 Add the experimental SQLITE_FCNTL_WIN32_GET_HANDLE file control.
FossilOrigin-Name: b6ddabe1818c36007c476a31e2e35755630a5f14
2016-05-03 19:36:54 +00:00
drh 799730bf81 The session extension is disabled by default. To enable it using
--enable-session on ./configure on unix and add SESSION=1 to the nmake
on Windows.  Or add -DSQLITE_ENABLE_SESSION and
-DSQLITE_ENABLE_PREUPDATE_HOOK to build manually.

FossilOrigin-Name: bcaa650e8796984b275eceba0ed477f360295d01
2016-05-03 14:57:07 +00:00
drh 5e18d40200 Turn the session extension off by default. Enable using --enable-session on
configure scripts, or using the SESSION=1 argument to nmake on Windows.

FossilOrigin-Name: e462cde2a50c39cc2f8d8624aada19280b8226eb
2016-05-03 13:14:18 +00:00
drh 48cd59a57d Avoid left-shifts of signed integers.
FossilOrigin-Name: 0715ce164333e27671efbec8796f238df98cc287
2016-05-03 00:04:55 +00:00
dan 39f98c52d0 Remove some randomness from test script temptable2.test.
FossilOrigin-Name: 5830cf72e9e870830d088399f1ccb03ed6522582
2016-05-02 19:05:05 +00:00
drh b1c6995c58 Fix a test case in temptable2.test so that it works on systems that
lack a coherient cache (ex: OpenBSD) and thus do not support the
"PRAGMA mmap_size" command.

FossilOrigin-Name: 088cf83872f6477c3b297c58d6f8a5def7025daf
2016-05-02 16:59:49 +00:00
drh cf7e7557b5 Fix harmless LLVM compiler warnings in the srcck1.c utility program used
during the build process.

FossilOrigin-Name: e4af967533f290862dfba1d9ef44d4c9ddd8a01b
2016-05-02 13:57:19 +00:00
drh 57a07ba9a9 Disable the multi-row one-pass DELETE optimization when the WHERE clause
contains a subquery.  Fix for ticket [dc6ebeda9396087].

FossilOrigin-Name: 3f221f592a9a19009076e568566c59801cd3fc32
2016-05-02 12:18:56 +00:00
drh 44aebff246 Improvements to the way the LIKE optimization is implemented, resulting in
slightly smaller and faster code that is easier to test.

FossilOrigin-Name: 54c63b329288729031f45b7778752552cd90e226
2016-05-02 10:25:42 +00:00
dan 40cf36ff17 Change the way tester.tcl handes $argv so that in "permutations.test <permutation> <filename>" <filename> may be the name of any file in the test/ directory.
FossilOrigin-Name: 820c57bb24ad3d8663ca512e4022268b940bb2ee
2016-04-30 19:23:10 +00:00
drh 2f55511dfa Remove an unnecessary branch from the OP_String8 opcode.
FossilOrigin-Name: 459a0b456da69112605b37adc9af27d79e35a4d7
2016-04-30 18:10:34 +00:00
drh 2e55b04da4 More bug fixes to Lemon identified by Kelvin Sherlock. None of these
have any impact on SQLite.

FossilOrigin-Name: 762bdc55f8878ee2ef65af2165a8e7fdbddf0160
2016-04-30 17:19:30 +00:00
drh 99f5de771f Simplifications to the OP_Halt opcode implementation.
FossilOrigin-Name: daf4630f96f13133664908045e279da9d5a40bb5
2016-04-30 02:59:15 +00:00
drh 2aab11fa5a Fix the temporary directory search algorithm for unix so that it fails
gracefully even if all candidate directories are inaccessible.  This fixes
a bug that was introduced by check-in [9b8fec60d8e].

FossilOrigin-Name: 614bb709d34e11488da88861243023cc5de4b409
2016-04-29 20:30:56 +00:00
drh 54606bbc14 Postpone I/O associated with TEMP files for as long as possible, with the
hope that the I/O can ultimately be avoided completely.

FossilOrigin-Name: 9d0a5ae00273686ea35b43bc2ffaa8775c176363
2016-04-29 15:39:48 +00:00
dan 4a030c6430 Fix test script temptable2.test so that it works with the "inmemory_journal" and "journaltest" permutations.
FossilOrigin-Name: b7bec7f2d3d08d0c14f77654be2c5cedf1619e58
2016-04-29 14:12:48 +00:00
dan 20ae3264b8 Merge latest trunk changes, including test case fixes, with this branch.
FossilOrigin-Name: 99794aca7b6cb40f08ce4db9889a989fc597eac9
2016-04-29 11:35:28 +00:00
dan 288327ed81 Modify the permutations.test script so as to set any permutation specific configuration values before running each individual test script. Fix a mostly harmless buffer overread in the sessions module.
FossilOrigin-Name: 4cbd50245440e714935399a5c285cf32d8bfc424
2016-04-29 11:33:58 +00:00
drh afb8cd977d Lemon bug fix: Do not merge action routines unless their destructors are
also identical.  Problem and suggested fix reported on the mailing list
by Kelvin Sherlock.

FossilOrigin-Name: 4792d6dbba6857f74d27332dcc1468e39c767c71
2016-04-29 11:28:35 +00:00
dan 14faa061fd Fix an almost entirely harmless buffer overread in the sessions module.
FossilOrigin-Name: 89b0ee3351381f7bc666cb206f77a56f2e0d4a0e
2016-04-29 10:13:22 +00:00
drh a3fa140fb4 Some optimization comments added to vdbe.c. No functional changes to code.
FossilOrigin-Name: e7c22e3bffce63f3b47fa3683be8c00c42b2a7d3
2016-04-29 02:55:05 +00:00
drh aa50271a24 Further simplifications and improved commentting on the rowset.c module,
including several optimization comments.

FossilOrigin-Name: 9f15a520deb9f1d4ecaa3bfff82bd57ef122aadb
2016-04-28 22:29:31 +00:00
drh 396794f0ee Comment changes only: Add several optimization marks in rowset.c. Add
a header comment that explains what the various special comments mean.

FossilOrigin-Name: 8cdbe89ac6c22d632f677eb293111b3dbae7d6c1
2016-04-28 20:11:12 +00:00
mistachkin 2075fb08e6 Fix typo in comment. No changes to code.
FossilOrigin-Name: 9f6f17b5c97c9576c340173d068485fdbfd53253
2016-04-28 19:23:10 +00:00
drh cb6d66becc Rearrange some code in the RowSet logic for clarity of presentation, while
adding an /*OPTIMIZATION-IF-TRUE*/ comment.  It should operate identically.

FossilOrigin-Name: 5748e64376c1c2be5154a632d1527cfebbb9ec74
2016-04-28 18:53:08 +00:00
dan 8443533178 Merge latest changes from trunk with this branch.
FossilOrigin-Name: 45467ee49872f495d5276cf830f10c3cf4ac8e3c
2016-04-28 14:59:05 +00:00
dan 14cee38be8 Avoid running sessionfault.test and sessionfault2.test as part of the "inmemory_journal" permutation.
FossilOrigin-Name: 5973d3bf2e5aa979ccc9a4a3a0eb08b67098b499
2016-04-28 14:54:54 +00:00
drh 75ab50ce8f Use comments to mark several branches as optimizations. No changes to code.
FossilOrigin-Name: 33e627472780b872716c504f2d585cc057c390a5
2016-04-28 14:15:12 +00:00
dan 3104c4d6f4 Ensure that quota.test deletes the directory named "test.db" that it creates.
FossilOrigin-Name: 045edd4b17c6b76079ac90773c035d8c1f8d525d
2016-04-28 09:53:14 +00:00
drh 10c0a2a7c9 Remove an unnecessary conditional from the sqlite3DecOrHexToI64() routine.
FossilOrigin-Name: fcf85bfe50b254e825ee63a4cd0aa0b333b06eed
2016-04-28 03:52:18 +00:00
drh 609d5846ba Change the sqlite3Atoi64() routine so that it returns failure if not all of
the input characters are consumed, even if it consumed all characters up to
the first 0x00.  This has no impact on external APIs as far as I can tell.

FossilOrigin-Name: 46d4ffff3bd33d7e901e76cfac1cbde38d4f61d0
2016-04-28 00:32:16 +00:00
dan 05accd2216 Modify the permutations.test script so as to set any permutation specific configuration values before running each individual test script.
FossilOrigin-Name: 2662d8fef791f7b8b3b14f9c27dfedec84620dee
2016-04-27 18:54:49 +00:00
drh ad975d539e More simplification of the sqlite3AtoF() routine. Add special comments
to indicate branches that are for optimization purposes only and that give
the correct answer even if always or never taken.

FossilOrigin-Name: 0065fe97cb8e5076acae1bf1560fd2f69dab9014
2016-04-27 15:24:13 +00:00
dan 9bf0136384 Fix a couple of test script problems on this branch. Both related to the fact that temp database page sizes can no longer be changed by VACUUM or the backup API after the temp db is populated.
FossilOrigin-Name: 6bb5aa2be2a6c5ca66a98a9387b2845507a6bdd2
2016-04-27 11:24:42 +00:00
drh c6daa01c05 Remove still more unnecessary branches from sqlite3AtoF().
FossilOrigin-Name: 3adfe9f3e6ce7cc09fcb570d9b65e830a96cac15
2016-04-27 02:35:03 +00:00
drh 15af62acff Further simplifications to sqlite3AtoF() to remove unneeded branches.
FossilOrigin-Name: dd69e53cb077873171af5312c633ca185595bf31
2016-04-26 23:14:45 +00:00
drh e5f06fdc87 Remove an unnecessary line from the sqlite3AtoF() routine.
FossilOrigin-Name: a9d007494cfe30a26dca5352655dc7702351476e
2016-04-26 21:02:53 +00:00
drh 97a7e5e68c The pcache and the built-in VFSes should not use mutexes when
SQLITE_CONFIG_SINGLETHREAD is set.

FossilOrigin-Name: 12418b100196abbfbfb85e0ab4bb6b1cbf335df7
2016-04-26 18:58:54 +00:00
dan 45164826b7 Fix an issue in temptable2.test preventing it from working with SQLITE_DEFAULT_AUTOVACUUM=1 builds.
FossilOrigin-Name: e790aac02e4b427b4891b514a050699d159b03b1
2016-04-26 17:10:03 +00:00
dan 0a5ced4c1e Merge the checksymbols fix from trunk into this branch.
FossilOrigin-Name: 04911cee0cd5467ee99744b774d692219e5e1425
2016-04-26 16:03:58 +00:00
drh b283a0cde9 Fix the "checksymbols" target in Makefile.in to be able to deal with the
sqlite3changegroup family of interfaces.

FossilOrigin-Name: d819bfbd46dc7f065d2a3ab0ef9f8322d8394e11
2016-04-26 13:13:53 +00:00
drh ead01fd272 Add an sqlite3FaultSim() all to make it easier to simulate IO errors in
a VACUUM commit.

FossilOrigin-Name: 8bfde416c51f4e087275aebf652a73985515e810
2016-04-25 22:39:42 +00:00
drh 6c96358601 Remove an obsolete comment from the pager. No code changes.
FossilOrigin-Name: 36f97ca8874a03ac8699f44fe0da95b0be507cc7
2016-04-25 19:28:34 +00:00
dan ae20690e2c Update the RBU vacuum code so that databases that use custom collation sequences can be vacuumed.
FossilOrigin-Name: 7dd48c10790a7b9c4165214399c261a0aa701297
2016-04-25 19:25:12 +00:00
drh 835f22deda Fix some unreachable branches in the pager.
FossilOrigin-Name: 3ae44770fdecc40c8097f1de0b504f36585a2232
2016-04-25 19:20:56 +00:00
drh dc7adf20bb Merge bug fix from trunk.
FossilOrigin-Name: a905d5e08de3f3c60b667d840b5995911372647d
2016-04-25 15:03:49 +00:00
drh b1ec87afdb When checking for the WHERE-clause push-down optimization, verify that
all terms of the compound inner SELECT are non-aggregate, not just the
last term.  Fix for ticket [f7f8c97e97597].

FossilOrigin-Name: ec215f94ac9748c0acd82af0cc9e7a92249462f9
2016-04-25 02:20:10 +00:00
mistachkin 1de86ca17f Fix a typo in the Makefile.
FossilOrigin-Name: d0a579b35105810821bbfec6b50ecfebac7a17ee
2016-04-25 01:43:24 +00:00
drh d456e92ce0 Merge the temporary directory search algorithm fix from trunk.
FossilOrigin-Name: 9b8fec60d8e576cd09e1d075a59bfad1c6169d7a
2016-04-23 21:16:55 +00:00
drh 23ee893752 Fix the fix to the temporary directory search algorithm so that it continues
to return "." as a fallback if that directory has the correct permissions.

FossilOrigin-Name: b38fe522cfc971b37ca04e7b63a92bbb6e0b01e1
2016-04-23 20:59:23 +00:00
drh 7ff5d522bf Merge the latest trunk changes.
FossilOrigin-Name: 84da122dd6e70ed603fea781dca204ae2f668c53
2016-04-23 19:55:59 +00:00
dan 2d36f065e2 Fix a problem with mixing temp-files and mmap-mode.
FossilOrigin-Name: c80c5c62b2e2c5e47e0839f8e2d5b6341ca4a249
2016-04-23 17:24:16 +00:00
dan 6572c16ae1 Fix some problems to do with temp-file databases and recovering from IO and SQLITE_FULL errors.
FossilOrigin-Name: 3d61da4a76af8c9c2a293df085f3ed5a7bb447df
2016-04-23 14:55:28 +00:00
drh 7694e06461 Change the temporary directory search algorithm on unix so that directories
with only -wx permission are allowed.  And do not allow "." to be returned if
it lacks -wx permission.

FossilOrigin-Name: 67985761aa93fb613b87d340e75371fa55b0f778
2016-04-21 23:37:24 +00:00
dan 83b74f29c5 Add the sqlite3rbu_vacuum() API, to create an RBU handle that can be used to rebuild a database in the same way as the VACUUM command.
FossilOrigin-Name: bd4a6f8313eb71399a7141ebf7f2617d7b1464c3
2016-04-21 18:13:37 +00:00
dan b7a208686a If a call to sqlite3rbu_close() on an rbu handle opened by sqlite3rbu_vacuum() returns other than SQLITE_OK, delete the contents of the rbu_state table. This ensures that if an RBU vacuum operation either completes successfully or encounters an error, the next call to sqlite3rbu_vacuum() with the same parameters starts a new RBU vacuum operation.
FossilOrigin-Name: 6e4ac704f51bdd1e0b16814f6a45ab29f26400ee
2016-04-21 16:44:38 +00:00
dan 2e8bfb67d4 Fix a problem in rbu vacuum on tables with a large sqlite_master table.
FossilOrigin-Name: 23eac52e987996afe8db847921aef434cebd25b5
2016-04-21 15:26:26 +00:00
drh 6bcfe8b61f Add a function prototype in order to fix a compiler warning.
FossilOrigin-Name: 49aec9718d61c9f12aed96f530128666c3b01c81
2016-04-21 15:24:46 +00:00
drh 518aca114f Merge updates from trunk.
FossilOrigin-Name: cc28106e5c196c0a9678fbbd06f6afd49271a8e8
2016-04-21 15:03:37 +00:00
drh 26f7977c53 Add the SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION method for enabling
sqlite3_load_extension() while leaving the load_extension() SQL function
disabled.

FossilOrigin-Name: c4f165c460c4244ed434107feac005efa3c386cf
2016-04-21 02:27:56 +00:00
drh f602a16123 Test cases for SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION.
FossilOrigin-Name: debafa5efd37ac60e030d0963ce8e7c4f51a0f10
2016-04-21 01:58:21 +00:00
drh 191dd06195 Revert sqlite3_enable_load_extension() to its original long-standing behavior.
Add SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION which will enable only the C-API and
leave the SQL function disabled.

FossilOrigin-Name: b2ae5bfa32e608625bd177907596df3dbc2212e1
2016-04-21 01:30:09 +00:00
dan 94d49697b5 Add a documentation comment for sqlite3rbu_vacuum() to sqlite3rbu.h.
FossilOrigin-Name: da5c753ddac3cbfdf03710a82f5fd9fa2e29e819
2016-04-20 20:08:58 +00:00
drh cdce61e133 When an error occurs while transitioning out of WAL mode, make sure the
locking state is not left at EXCLUSIVE.

FossilOrigin-Name: 3340f086510b08ce5b42a8781f1df51bf7c27701
2016-04-20 19:30:47 +00:00
drh 333f80562b Fix a locking race condition in Windows 10 that can occur when two or more
processes attempt to recover the same hot journal at the same time.

FossilOrigin-Name: 38a4e9d92887898b779493c71e4500f777a4e2e7
2016-04-20 18:31:27 +00:00
dan 132dde5cdf Add fault injection tests for rbu vacuum. Fix some problems revealed by the same.
FossilOrigin-Name: f042fdd1ea7febec7228e51efc2b0281805e196a
2016-04-20 17:47:52 +00:00
drh 1a55dedf7b <b>API Change:</b> Modify sqlite3_enable_load_extension() so that it only
enables/disables the load_extension() SQL function, and leaves the C-APIs
enabled at all times.  In this way, applications can enable extension loading
for the C interface without having to expose that capability to the SQL.

FossilOrigin-Name: edb454e45ae008e051e2f48d704a855b0c3e4be9
2016-04-20 00:30:05 +00:00
dan 1aea63032a Updates to ensure the values of PRAGMA settings like "page_size", "auto_vacuum", "user_version" and "application_id" are not lost when a database is RBU vacuumed.
FossilOrigin-Name: 74ffea76b8c9ddd7699ce6ca77dce005bd7922ac
2016-04-19 19:27:09 +00:00
dan 46f0035b48 When an RBU vacuum is started on a db identified using a URI filename, pass the same URI parameters when creating the new version of the db. This ensures that RBU vacuum works with password protected databases.
FossilOrigin-Name: ca021ba88106500f347ed65199a4832bc9eb5ef8
2016-04-19 17:11:05 +00:00
dan bff4b6367c Detect attempts to use rbu vacuum on a wal mode database (not allowed). And attempts to write to a database in the middle of an rbu vacuum (which prevents the vacuum from resuming).
FossilOrigin-Name: 00b2f4b09ffca5156e43c4db2bfe0b2c979c49b0
2016-04-19 16:20:24 +00:00
dan 58e3812988 Another fix to rbu vacuum for a zipvfs case.
FossilOrigin-Name: 29407d70e44ad9ea5ddaf1011d0e212b602a3ddf
2016-04-18 21:00:01 +00:00
dan beccf1d16f Fix some zipvfs related problems in RBU vacuum.
FossilOrigin-Name: d76f4aaa4caab713460421bd27365a82ac986c20
2016-04-18 18:18:18 +00:00
drh a6dddd9bde Remove quotes from identifiers used as datatype names in a CREATE TABLE
statement.  Fix for ticket [7d7525cb01b68]

FossilOrigin-Name: eba27d4d17a76884292667d570d542e580ee3e77
2016-04-18 15:46:14 +00:00
drh 2c03652b45 Merge recent trunk changes.
FossilOrigin-Name: d9768de502e34da42f3ad955947c23da50f57bce
2016-04-18 13:36:17 +00:00
drh b5895e50f9 sqlite3PCachePerecentDirty() should return 0 if the pcache is empty.
FossilOrigin-Name: 85f3d80eb7319754792eef76996b2c740a2b0073
2016-04-18 13:30:50 +00:00
drh f9986d90d1 The last parameter to pread64() and pwrite64() should be off64_t, not off_t.
FossilOrigin-Name: 3a7d72986fabe9434ff5bd02c93169314f072b23
2016-04-18 13:09:55 +00:00
dan 303a094466 Add the -vacuum switch to the "rbu" demonstration program.
FossilOrigin-Name: 9a0078a538c7e73a009960347b8953c5af99fefd
2016-04-18 09:17:05 +00:00
dan 2bb5f4478e Changes so that rbu vacuum works with zipvfs databases.
FossilOrigin-Name: bae7f875f476f6e01112751cb404fef42ba0a01c
2016-04-16 19:02:53 +00:00
dan 977cbe78b3 Avoid creating any extra files ("<target>-vacuum") when running an RBU vacuum. Ensure that the OAL file created is "<target>-oal", not "<target>-vacuum-oal".
FossilOrigin-Name: dc19aacc7e99213edca9bb57b5c11a8a1ac99113
2016-04-16 17:53:14 +00:00
dan ee65eea4af Fix a couple of assert() statements that were failing with OOM error tests.
FossilOrigin-Name: 8eb3d7d8360530f364bbbebac53e1f0e6753d924
2016-04-16 15:03:20 +00:00
dan f89157653a Add the experimental sqlite3rbu_vacuum() API function. For opening an RBU handle that rebuilds a database from scratch.
FossilOrigin-Name: 0216b48f28042ad86711e00802c2da8ce9be3044
2016-04-15 20:46:41 +00:00
drh eacd29d484 CLI enhancement: Add the ".eqp full" option, that shows both the EXPLAIN
QUERY PLAN and the EXPLAIN output for each command run.  Also disable
any ".wheretrace" and ".selecttrace" when showing EQP output.

FossilOrigin-Name: 3e217d6265ecd16db783bed7ce1d9d0f9c4828bb
2016-04-15 15:03:27 +00:00
dan 5313f2e12e In the ICU extension toupper() and tolower() SQL functions, avoid calling u_strToUpper() or u_strToLower() a second time if the buffer passed to the first invocation turns out to be large enough.
FossilOrigin-Name: d23e581351fb8eea28e7b13b3dcadfc817c3a05f
2016-04-14 17:29:13 +00:00
drh 497116007e Add the SF_HasAgg constant (currently unused). Also enhance the comments on
many other constant definitions to detail constraints on their values.

FossilOrigin-Name: 7b7a69d098f7581a43b818c251717c2450b797de
2016-04-14 16:40:13 +00:00
dan fc26f7cfed Correctly interpret negative "PRAGMA cache_size" values when determining the cache-size used for sorting large amounts of data (i.e. the functionality in vdbesort.c).
FossilOrigin-Name: 79147dca87cfd7eb62d57baa3b70fa2a8542232a
2016-04-14 15:44:37 +00:00
drh 7111c93c40 Add some missing testcase() macros to the pushDownWhereTerms() routine.
FossilOrigin-Name: 67d7f79c5e5be41a18817c802b5c4d349e3a83a4
2016-04-14 15:38:33 +00:00
drh f1b5ff73cb Rename WhereInfo.pResultSet to pDistinctSet to more accurately reflect what
it represents.

FossilOrigin-Name: 5317961411695e107e8cefdeaba62280429979ca
2016-04-14 13:35:26 +00:00
drh 8f2ce91462 Since the return value of sqlite3OsClose() is always ignored, we might as
well make it "void" instead of "int", and thereby save 50 bytes in the
compiled binary.

FossilOrigin-Name: 7ee570e7a9a2159a8c0d41805c00f91ca0de00e3
2016-04-14 13:16:58 +00:00
drh 7512cb47e8 Additional ".selecttrace" debugging output when the query is transformed from a
DISTINCT into a GROUP BY.

FossilOrigin-Name: 5a46914510af4d5557b299db65c68d5df1070766
2016-04-14 13:06:49 +00:00
drh 07d683fdbc Fix compiler warnings by removing surplus local variables in the schema
pretty-printer logic of the command-line shell.

FossilOrigin-Name: 55a62483b9121a8b373d038a26fdebc4308661f6
2016-04-13 21:00:36 +00:00
drh 1454b26c17 Merge enhancements from trunk via tempfiles-lazy-open.
FossilOrigin-Name: ae16310c4e9a9b7e94874bd912fc6a4324cfaa2b
2016-04-13 19:20:23 +00:00
dan 0f52455a35 On commit, flush dirty temp-file pages only if the file is already open and 25% or more of the cache is dirty.
FossilOrigin-Name: f6babf2920340f25815c0a3c58de1e902c2f5542
2016-04-13 16:52:11 +00:00
drh 8ca7b177bb Merge enhancements from trunk.
FossilOrigin-Name: e2edd34e79af906e7069e3e837730b12de0b73fe
2016-04-13 16:02:28 +00:00
drh 0cb64edc95 Fixes for harmless compiler warnings.
FossilOrigin-Name: 68142dc541b7a0a36fcb075a26f10f03c1e7c422
2016-04-13 15:52:16 +00:00
drh 4926fec967 Add the --indent option to the .schema and .fullschema commands in the shell,
to enable simple but effective pretty-printing.

FossilOrigin-Name: 83cfe82cd6d31ec0a6193525fd92e63a2a43b142
2016-04-13 15:33:42 +00:00
mistachkin 02d436b1f6 A couple more compiler warning fixes.
FossilOrigin-Name: 929fa4c31e7c5b8c6cbb1412478ea91b15ad5529
2016-04-12 20:26:51 +00:00
mistachkin c5896b5cbb Even more compiler warning fixes.
FossilOrigin-Name: 7faec9ea335c53953338886398b85aef87348a1c
2016-04-12 20:15:12 +00:00
mistachkin 77fac879d2 More harmless compiler warning fixes.
FossilOrigin-Name: ab69527c1608da0b668f3b49e967661dd99cc3d4
2016-04-12 20:05:06 +00:00
mistachkin 02267cc213 Compilation fix for a C99-ism in the 'fts3view' tool.
FossilOrigin-Name: bedb88a4b9c808ea781ae69058399a1a3a3d15fa
2016-04-12 19:30:31 +00:00
mistachkin 74f598b677 Fix harmless compiler warnings in the 'session' module.
FossilOrigin-Name: a18a6ce2271865d04cd75a8a5baa63798b7393db
2016-04-12 19:20:22 +00:00
dan 199f56b984 Once a temporary database file has been opened, flush all dirty pages to disk when comitting a transaction.
FossilOrigin-Name: bbac71aa2aa2380d393cda3be64b0208b464b27e
2016-04-12 19:09:29 +00:00
drh 741c2772db Fix speedtest1 so that it automatically unlinks its test database prior
to startup.

FossilOrigin-Name: b65b69f6b686c6555876b6fc701da95cc49120b5
2016-04-12 17:13:33 +00:00
drh 2160ca5f8d Add the --temp option to the speedtest1.c performance test program.
FossilOrigin-Name: 8053a6e2bf616fc9326f0323962176e318d7d2a5
2016-04-12 16:59:39 +00:00
drh e11003d5ba Improved localtime() support for WindowsCE
FossilOrigin-Name: 662c32af0276a9ef4eea2d29e2523ccc44b6d128
2016-04-12 16:23:30 +00:00
mistachkin 8366ddf242 Add and adjust comments.
FossilOrigin-Name: 541c6da23850673f5d2a2e31c3967b796ee2effc
2016-04-12 16:11:52 +00:00
drh 8a878f239c Merge enhancements from trunk.
FossilOrigin-Name: 9682c0433c04713c28bd9105a7e20af7372f873e
2016-04-12 16:10:10 +00:00
drh 752b102e9b Add the sqlite3_snapshot_cmp() interface (available only with
SQLITE_ENABLE_SNAPSHOT).

FossilOrigin-Name: 7e7289655185e7643ead6d685922528bc4d9e0ae
2016-04-12 16:04:07 +00:00
dan 745be369c7 Update the documentation for sqlite3_snapshot_cmp() to make the circumstances under which the comparison is valid clearer. Add tests for the same.
FossilOrigin-Name: 8fc834741bf6c8a832a180795c3d6f5c3dcfcd62
2016-04-12 15:14:25 +00:00
drh 70b8d6bbcc Update the header comment on the memjournal.c file. No code changes.
FossilOrigin-Name: 07f10deabb0f4207408142541e3913d638dfcdeb
2016-04-12 11:58:18 +00:00
drh 6f07734349 Performance optimization the Vdbe allocator.
FossilOrigin-Name: e2c4995bf1099cc02bcb1dc4a4631f06a870d171
2016-04-12 00:26:59 +00:00
drh f3c57ff54c Avoid unnecessary calls to object destructors for a small performance gain.
FossilOrigin-Name: aec94b6ee68fe50e2cc14388281e2ef531e21d68
2016-04-12 00:16:54 +00:00
drh 926957f0a6 Performance improvements in sqlite3WhereExprUsage().
FossilOrigin-Name: fdf752394b48fb7b9afe7b8a7d83f859985cc2d2
2016-04-12 00:00:33 +00:00
mistachkin 0cedb963a3 Further refinements.
FossilOrigin-Name: b35bb928b25492f6dd71ccf9c250cb9f0cce09ff
2016-04-11 22:45:45 +00:00
mistachkin 9cdd401d37 Merge updates from trunk.
FossilOrigin-Name: b8094166b3c6a8ec7913b403e08b5e6790fb03c1
2016-04-11 22:24:03 +00:00
mistachkin 4f2c822cc5 Fix typo in the MSVC makefile.
FossilOrigin-Name: 3189a7f1851f823218d85a2455bf218d00d81543
2016-04-11 22:23:04 +00:00
mistachkin 0e188e1d1e Fix some compilation issues.
FossilOrigin-Name: 016481b39f8b23b4f0f851053068d8eaee6122e1
2016-04-11 22:10:26 +00:00
dan ad2d5baf1f Add the sqlite3_snapshot_cmp() API.
FossilOrigin-Name: c698a21af740ca1019c3a771fb83e569cd6bf23e
2016-04-11 19:59:52 +00:00
dan 0e55da2ef8 Fix a typo in temptable2.test.
FossilOrigin-Name: 04b1890fbc19eb3fa935083c1664fbbfb67dad93
2016-04-11 19:24:56 +00:00
dan b5a2592a9e Add tests for wal mode to temptable2.test.
FossilOrigin-Name: c6d0d441a1ab4873caedf2f23543444cea5d7f5a
2016-04-11 19:23:36 +00:00
drh 244b9d6ec6 Performance optimization to sqlite3Dequote() and its callers.
FossilOrigin-Name: 9efe2265b1e70172778d333c5b9d9a76095427ab
2016-04-11 19:01:08 +00:00
dan 7180de2aa4 Merge latest trunk changes with this branch.
FossilOrigin-Name: ffc62af1d503c6e7fc0059d9c2ee57a3bef9dd32
2016-04-11 18:50:25 +00:00
dan b9f11f932d Add extra tests to temptable2.test.
FossilOrigin-Name: 7dd9d4c15bb6b6ef9127dc7c80a189c55e714dc9
2016-04-11 18:49:37 +00:00
drh affa855c94 Performance optimization for the sqlite3ExprListDelete() routine.
FossilOrigin-Name: 2764aeaa11f38cf2ff4d6191e6d5466ddb203022
2016-04-11 18:25:05 +00:00
drh bea119cdeb Performance optimizations in the column cache of the code generator, and
especially the sqlite3ExprCacheRemove() routine.

FossilOrigin-Name: e35b345cf858018ae0c07f79725f8d58062168db
2016-04-11 18:15:37 +00:00
dan 67330a1224 Fixes for OOM and IO error handling with temp file databases.
FossilOrigin-Name: 4eb06e843af60d5e533793618c6e0e9b7ef7a1a6
2016-04-11 18:07:47 +00:00
drh 3c19469ca2 Simplification and performance improvements in sqlite3ExprDup() and its
subroutines.  More work is possible in this area.

FossilOrigin-Name: 476cc2838824e0667e80ce527b9caa551dee4a77
2016-04-11 16:43:43 +00:00
drh c310db39ff Rename the OP_MX_JUMP macro to SQLITE_MX_JUMP_OPCODE to avoid confusing the
opcode name generator.

FossilOrigin-Name: e554a4c38bda9c73bf129bb7c665c53ccc4d96a8
2016-04-11 16:35:05 +00:00
drh 4f0010b1bc Performance improvement in sqlite3ExprDelete().
FossilOrigin-Name: 60ad80e3af4bae9f5c74fedf09eec9689e2e3dbf
2016-04-11 14:49:39 +00:00
drh 7cc84c2cdd Remove the VdbeOp.opflags field and its associated initialization overhead.
Update mkopcodeh.tcl to reorder opcode numbers to help the resolveP2Values()
routine run faster.

FossilOrigin-Name: 099478fa7521ba52262ef2bf24dd8f0114ce92e1
2016-04-11 13:36:42 +00:00
dan 7082371de7 Update this branch with the latest changes from the trunk.
FossilOrigin-Name: 982b753d0b6a3ed9fba33ed41523b2cd42280276
2016-04-11 09:39:25 +00:00
drh 8679fbabaa Back off of the parser optimization in the previous check-in, slightly, to
preserve some backwards compatibility regarding some undocumented behavior
in the '#AAA' style query parameter.

FossilOrigin-Name: ef1966c2469a0f5dbdb31a0287bd37badb2b8f28
2016-04-11 01:43:33 +00:00
drh 8f3b137fa6 Small size reduction and performance improvement in the parser.
FossilOrigin-Name: 16df71284bf081c8b3d3aa57c129a07067ddbed3
2016-04-11 01:26:31 +00:00
drh 08de4f7933 Factor out the common operation of setting the Expr.x.pSelect field of an
Expr object into a subroutine.

FossilOrigin-Name: 6a5cceee486c5e3625556e4c7076ff90e9d8fa43
2016-04-11 01:06:47 +00:00
drh ba26faa33f Fix a problem in the code generator for joins on virtual tables where the
outer loop of the join uses the IN operator.

FossilOrigin-Name: 6c56b3a04778bc62ca50307ad838dd301cd91ac2
2016-04-09 18:04:28 +00:00
drh bfc7a8bb01 Fix the sqlite3BtreeDelete() routine so that it preserves the correct
key even when the row being deleted is not on a leaf page.
Fix for ticket [a306e56ff68b8fa56]

FossilOrigin-Name: ca2ef8a86cf806cbbcc64db03251b1df5b2c5501
2016-04-09 17:04:05 +00:00
drh 53801efcdf Limit the number of digits shown in the "prereq" mask for ".wheretrace"
debugging output.

FossilOrigin-Name: 3686ed7413ae6cdbc8020c0023205e0455e87467
2016-04-09 14:36:07 +00:00
drh 11b264019c Update documentation for sqlite3_snapshot_open(). No code changes.
FossilOrigin-Name: 1dfa5234d3ee38c6af2d18a6294afa93232821e7
2016-04-08 19:44:31 +00:00
drh dca595c4a3 Add test cases for ticket [7f7f8026eda387d544].
FossilOrigin-Name: 87aa9357fbe6749bae60e30af54ca16e48678802
2016-04-07 21:14:35 +00:00
drh 38b3dde00e Prevent the in-memory journal read cursor from entering an inconsistent state
when it reads the last few bytes out of the journal file.  Fix for
ticket [7f7f8026eda38].

FossilOrigin-Name: c4b9c611bdcd85f31d68aaf114ee34a9f27eba6d
2016-04-07 18:42:23 +00:00
drh 45c3c66385 Avoid decrementing a pointer off the front end of the buffer in OP_MakeRecord.
FossilOrigin-Name: 153135bfb3b8f7c407ccf36571e2d4d5afe28ea3
2016-04-07 14:16:16 +00:00
drh be5000d6bf Instead of just commenting out the unneeded code in the previous check-in,
remove it completely.

FossilOrigin-Name: 8415d4848ab36ca33b23d1fad6b063544de04a3b
2016-04-07 14:05:20 +00:00
drh 3b42be9178 Remove an unnecessary test for a NULL pointer in freeP4().
FossilOrigin-Name: e84e88e31b67afe42e2494d984ab1cafd107465a
2016-04-07 14:01:10 +00:00
drh f878e6e1a7 Update comments on the unix file locking protocol. No changes to code.
FossilOrigin-Name: 716b20de4306de1653ba5bcdbfb8d210d2d46e1a
2016-04-07 13:45:20 +00:00
dan 9131ab9386 For a pager backed by a temp file, store the main journal in memory until it is at least sqlite3_config.nStmtSpill bytes in size. Prevent the backup API from being used to change the page-size of a temp file.
FossilOrigin-Name: 84c557010c211595d2ec80b62c63af1c7f4714bd
2016-04-06 18:20:51 +00:00
dan 7f8def285e Fix a problem in test script lock.test. Fix minor issues in pager.c.
FossilOrigin-Name: 84de8813c3b4007e3c7c3a286ce13020f2065c7b
2016-04-06 16:27:50 +00:00
dan d87efd7221 Add tests to this branch. Fix a problem with temporary databases in auto-vacuum mode.
FossilOrigin-Name: afe9bd9b4b5dc98dccf1bced80567515ab5c0117
2016-04-06 15:39:03 +00:00
drh 40dc357a01 Remove an unnecessary branch in the sqlite3LogEstToInt() routine.
FossilOrigin-Name: da81d7afeb0566a09a505ba5fce901e991e4a029
2016-04-05 23:39:53 +00:00
dan 41113b6429 Defer opening the file used for the temp database (where CREATE TEMP TABLE tables are stored) until the database is too large to reside entirely within the cache. There are likely still problems on this branch.
FossilOrigin-Name: be5a549eba6cf8e29cb6b9824fd6d0db9d03ca7f
2016-04-05 21:07:58 +00:00
drh ed06a131da Carry table column types through into VIEW definitions, where possible.
FossilOrigin-Name: fb555c3c2af7f5e62ff839658f4fba7b645d3a68
2016-04-05 20:59:12 +00:00
mistachkin 18a1549322 Remove superfluous directories from the Makefile clean targets.
FossilOrigin-Name: 0bf9926c7a7865694edd48535777248e73d86bbf
2016-04-05 19:46:10 +00:00
mistachkin c0d10c8d4f Merge updates from trunk.
FossilOrigin-Name: 00990020d07d7c87b922cdbfa5373298a86bb4b3
2016-04-05 17:59:56 +00:00
drh 60de73e83d Incorrect version of build.c checked in at [87e5f5a6c60e3] (because I
neglected to press the "Save" button on the text editor).  There is no change
to the logic, just improved presentation.

FossilOrigin-Name: cf569f9f2fab1828e4bfced111fd9a6ee23ea8c0
2016-04-05 15:59:23 +00:00
drh aed11f2072 Make sure "0" intended as a NULL pointer is cast to a pointer when used
in a varargs functions parameter.

FossilOrigin-Name: ed128e8b826cd9620b7146d01d461ed28b9a672d
2016-04-05 14:02:16 +00:00
drh 868f0398e4 Remove an unnecessary conditional from the index builder.
FossilOrigin-Name: 87e5f5a6c60e37e943b3ce80617e81b09852515e
2016-04-05 14:01:34 +00:00
drh 1c715f67b9 Use SQLITE_WITHIN() for pointer range comparisons in some testing code.
FossilOrigin-Name: 7cacf4e954c8de5af5efb56d8271a5ac1edc1c04
2016-04-05 13:35:43 +00:00
drh cca6698408 Do not allow pointer arithmetic to move a pointer across a memory allocation
boundary.

FossilOrigin-Name: 85b979319bcb8ec301ae39b36ad60348e4515be7
2016-04-05 13:19:19 +00:00
drh 73a6bb5851 Fix documentation typos. Comment changes only. No changes to code.
FossilOrigin-Name: d5fc2f7f90f8cbd53810c7a445b0e9c9a0e39182
2016-04-04 18:04:56 +00:00
mistachkin 48dcf2b60b Improve error messages from the 'shell1-5.0' test.
FossilOrigin-Name: cefd36ff7b7f142bcebdb16b4d24ae274cdf2709
2016-04-04 17:59:37 +00:00
drh bdeb125741 Improved handling of UTF8 by the command-line shell.
FossilOrigin-Name: 4534ebf15fbcd6fe2028957b7aa591b6cd5da95f
2016-04-04 17:34:54 +00:00
drh de613c6d4a Add the ".auth ON|OFF" command to the command-line shell.
FossilOrigin-Name: 65c7bcc42786a254966c531ba9062abb8fc8c5bf
2016-04-04 17:23:10 +00:00
dan 455684a036 Test that the view name is passed to the authorization callback when a SELECT statement is run on a view.
FossilOrigin-Name: 8627a4cd6d64bd076b56c1e8ccc3b1dfc1b4c07d
2016-04-04 16:40:44 +00:00
mistachkin 49e1125b69 Add and enhance the new tests.
FossilOrigin-Name: f4cbd18db47af4af990d7891dcc831e92b3f17e0
2016-04-04 15:47:46 +00:00
drh ae0c84bd9e Enhance sqlite3session_apply() and sqlite3session_apply_strm() so that
conflicts are retried before the xConflict() callback is invoked, as long
as the "apply" operation is making forward progress.

FossilOrigin-Name: 42a219668413e18dae917b03b04a21d108cc44be
2016-04-04 14:57:25 +00:00
drh 5fd0c12049 Minor performance optimization in the comparison opcodes of the VDBE.
FossilOrigin-Name: e375fe52cea7903c11ecef71c3452c67a96b663e
2016-04-04 13:46:24 +00:00
drh 51b55a3ee6 Fix harmless compiler warnings.
FossilOrigin-Name: 0213d6af84965676626c2fb4d78b4c74675207cc
2016-04-04 12:38:05 +00:00
mistachkin 1810f22809 Refinements to the previous check-in.
FossilOrigin-Name: b36dfdff787dc4a107b2c3fcbb98bfc4922872d8
2016-04-04 02:33:34 +00:00
mistachkin 1fe36bb8a8 Experimental changes to the command line shell to make it work better with Unicode on Windows.
FossilOrigin-Name: 74183a5f803999e1d4e288851c72519c3c53f6b5
2016-04-04 02:16:44 +00:00
mistachkin 1293120345 More refactoring and cleanup work on the Win32 string conversion and utility routines.
FossilOrigin-Name: 02ccb444a3d0b9a52ffd04cae9d9b6f654128c35
2016-04-04 02:05:46 +00:00
mistachkin 5daed673b8 Revise and enhance the Win32 string conversion routines.
FossilOrigin-Name: 345860c92195544aad44ea9b0d14c9ebbd50adf2
2016-04-03 22:44:16 +00:00
mistachkin 899c5c9d34 Replace the new fprintf() calls.
FossilOrigin-Name: f76c3a0ca40989fe9401c3b6f662f8e6ef2a730c
2016-04-03 20:50:02 +00:00
mistachkin 0784f8a460 Merge updates from trunk.
FossilOrigin-Name: 566b551e5a81440a5c8ff865ceb4422c76d67cf7
2016-04-03 20:45:04 +00:00
drh 076b6468f5 Preupdate hook documentation fixes. No changes to code.
FossilOrigin-Name: 59814f35d13db1f6379b9ae218b5432bc03c6197
2016-04-01 17:54:07 +00:00
drh f6661a8896 When reading an sqlite_stat1 table with missing entries for some indexes,
set the default for the missing indexes after all other indexes are set
so that the default values are more in line with indexes that are actually
in the stat1 table.

FossilOrigin-Name: a62340dc0507e36f6dec05b1fda68d8399ec62ec
2016-04-01 12:35:22 +00:00
mistachkin 2779989110 Update the clean target in the MSVC makefile.
FossilOrigin-Name: 69f4d83210f6425b2c0d699b397ef4fa4422d438
2016-03-31 22:53:37 +00:00
drh 5996a77987 Enhance the query planner so that IS and IS NULL operators are able to drive
an index on a LEFT OUTER JOIN.

FossilOrigin-Name: c648539b52ca28c0b2cb61208e2c32b1d29626a1
2016-03-31 20:40:28 +00:00
dan 0d0a2abc6a Add another OOM test to this branch.
FossilOrigin-Name: 49763fc3ae2fb6117b0443ea28661568467f9bf2
2016-03-31 15:08:10 +00:00
dan 5f5663dc23 Add further tests for the code on this branch. Fix a problem in OOM handling.
FossilOrigin-Name: 195f3340ee4d870420e4f58d44300bab5436b920
2016-03-31 10:50:26 +00:00
drh c8be643733 Enhanced comments describing the sessions file format. No changes to code.
FossilOrigin-Name: 84dc41e2df1092e9724a535b670343181a9cd0dd
2016-03-31 02:44:56 +00:00
drh 7e0765a9ec Fix the return code in sessionRetryConstraints().
FossilOrigin-Name: ea917c14b940f95b20b91dae77567dc25a651ef6
2016-03-31 00:45:58 +00:00
dan d915152677 Have the sqlite3session_apply() function and its streaming equivalent retry any operations that failed with SQLITE_CONSTRAINT after all other operations on the same table have been attempted. New code is largely untested.
FossilOrigin-Name: 1085911afb51744f32fe9db183b50e8e88bdd73e
2016-03-30 21:19:00 +00:00
mistachkin 05004784a5 Updates for the MSVC makefiles.
FossilOrigin-Name: 7cf0cab730e2d570c82dd789279ad6501ac598c8
2016-03-30 16:23:06 +00:00
mistachkin b932bf63e6 Fix typo in comment. No changes to code.
FossilOrigin-Name: 64d75cbe2c45af67124fa7ce5688d91cc6ddb755
2016-03-30 16:22:18 +00:00
drh c556f3c33f Simplifications and clarification to update callback handling in the
OP_Delete and OP_Insert opcodes.

FossilOrigin-Name: 47887ef89ed60ddb869d65e0957c1c4b2115f169
2016-03-30 15:30:07 +00:00
drh 9fc4caf64c Increase the version number to 3.13.0 on account of the new session extension.
FossilOrigin-Name: e9bcd5acb9ab7b3d55c96519ca10f51f35e24cd9
2016-03-30 14:26:36 +00:00
drh 3875a96ad9 Remove a redundant test for disabling RESTRICT with defer_foreign_keys=ON.
FossilOrigin-Name: 9cdf813c6aaaddc01d2d4e04636c83fcda04d971
2016-03-30 14:17:36 +00:00
drh 838083975a Incorporate the sessions extension and the
SQLITE_ENABLE_PREUPDATE_HOOK compile-time option.

FossilOrigin-Name: 4af7a90f980ade3566fc5da2f0db2669ac7d8256
2016-03-30 13:43:09 +00:00
drh 74c3302fd1 Avoid compiler warnings and excess opcodes when SQLITE_ENABLE_PREUPDATE_HOOK
is not used.  Fix the EXPLAIN output for P4_TABLE opcodes.

FossilOrigin-Name: 5ab46d760dff327491703478d6d7c7c44a0147ca
2016-03-30 12:56:55 +00:00
drh fbcd3130f6 Improvements to the performance testing program "speedtest1.c" and the
shell script that invokes it.

FossilOrigin-Name: e4bee561fdead5d35c24da3fe8a11bf6548550c6
2016-03-30 12:20:24 +00:00
drh 799b8372d1 Merge changes for 3.12.0.
FossilOrigin-Name: ed22eb653f2809446ace6a27e7ea3926ac6db30c
2016-03-29 10:19:29 +00:00
drh 10df23fe4f Version 3.12.0
FossilOrigin-Name: e9bb4cf40f4971974a74468ef922bdee481c988b
2016-03-29 10:14:15 +00:00
drh 72cd360caf Fix the multiplexor so that it does not assume that the xGetLastError method
is non-NULL in the child VFS.

FossilOrigin-Name: f6a88cccbc0c62a0b453f4711298c9d5e1882b18
2016-03-28 11:01:54 +00:00
drh 60c4249fcc More changes to the shellN.test scripts to get them working on all variations
of Windows.

FossilOrigin-Name: 8213c2f58167243411d29cc58e303b4be656f756
2016-03-26 15:36:36 +00:00
drh eaa544d44d Remove the catchcmd_collapse_space procedure in tester.tcl - no longer needed.
FossilOrigin-Name: 3bd499d3bdf4e80f83513966c2ee9dd11e67cbd1
2016-03-26 14:41:13 +00:00
drh 15707ac992 Update shell1.test tests to deal with backslash escaping in TCL on Windows-style
pathnames.

FossilOrigin-Name: 219a251e182bf43376fbc8ae1ce6f77f18a1b092
2016-03-26 13:26:35 +00:00
drh 4f69540b71 Do not run the shell3.test module under mingw because of mingw's dodgy
command-line parsing.

FossilOrigin-Name: a7c080a90a236fbc18b9a42b78dbed4dd8a25160
2016-03-25 20:10:20 +00:00
mistachkin 82452480ea In the Win32 VFS, avoid trying to use rand_s() on Windows CE.
FossilOrigin-Name: 183350fa7cc6a5ab8bd0a86cab231a6e4c915890
2016-03-25 17:19:57 +00:00
drh 5729c31daf Add the catchcmd_collapse_space command and use it to help make shell testing
more robust against TCL space escapes.

FossilOrigin-Name: 93caabb66082f76ef161a51ac822b919517a7171
2016-03-25 17:09:16 +00:00
drh ddb2b4a310 Fix two instances of undefined behavior in the C code - both harmless for
all current compilers.

FossilOrigin-Name: 99fd194c83dbcfcdcc582983b86678b85b1b9570
2016-03-25 12:10:32 +00:00
drh cb620b4797 Make test cases in shell1.test robust against TCL deciding to quote strings
using lots of backslashes.

FossilOrigin-Name: 817e93f42c09eb876421e27eb8eceb7b077cb45d
2016-03-24 20:55:03 +00:00
mistachkin eb2329bed3 Prevent negative values of SQLITE_DEFAULT_CACHE_SIZE from making SQLITE_WIN32_HEAP_INIT_SIZE negative.
FossilOrigin-Name: e0737f5236ed3e85bd03203c880ee41b34619137
2016-03-24 20:36:47 +00:00
drh d38a2e2511 Larger margins for one memsubsys1 range check when running with a
non-zero reserved-bytes value.

FossilOrigin-Name: 6db1d1fbc6c1acc896fa635dfdc5564800502c40
2016-03-24 15:32:19 +00:00
dan cc47eac005 Fix some test scripts so that they work with various permutations.
FossilOrigin-Name: f4d234b5013bf93b6eac7f8be6d4c074cf9f5293
2016-03-24 15:09:14 +00:00
drh 565d64014b Merge the beta changes into sessions.
FossilOrigin-Name: beb5ea1439995fb8ab112451a8ffcc08fe42d0c4
2016-03-24 14:34:26 +00:00
drh c5412d533c Avoid calling realloc() with a zero size in fuzzcheck.c.
FossilOrigin-Name: a1fd14694c1adc54e5c443ebfdef38e38637f5c5
2016-03-23 17:54:19 +00:00
dan 231ee68808 Fix "ifcapable" tests in capi3.test and capi3c.test so that the tests work with more build configurations.
FossilOrigin-Name: 3fa88f68c3e1bbb3421cb0d2b82b9bb3fe7b9b14
2016-03-23 16:32:29 +00:00
drh 997de998a8 Remove an unused local variable from FTS5.
FossilOrigin-Name: 0ed693c29f184223cde3b3d51f0e06273e586803
2016-03-23 15:53:45 +00:00
dan 848b190e40 Explicitly limit the size of fts5 tokens to 32768 bytes.
FossilOrigin-Name: 70fc69eed9b09159899d7cbd1416a59d04210a63
2016-03-23 15:04:00 +00:00
drh 3767026113 Update a requirement mark. No changes to code.
FossilOrigin-Name: 412984642af40578ec611d8c0b7c0508cb5cf9c9
2016-03-23 13:46:05 +00:00
drh d7564865ad The sqlite3_column_decltype() routine should return NULL, not an empty string,
if the column has no declared type.

FossilOrigin-Name: 605eba4a756e7185119088e2242f82691d078b01
2016-03-22 20:05:09 +00:00
mistachkin 527b0435fa Fix harmless compiler warning for MSVC.
FossilOrigin-Name: 142cd359d37f1d8d53de32e329523d9a93c7d6e5
2016-03-22 15:26:03 +00:00
drh c5e7f94494 Fix a harmless compiler warning.
FossilOrigin-Name: 5ace870d3ac3e9eb29cb4602c9036873adbcb99d
2016-03-22 15:25:16 +00:00
dan 0a2f2b546a Fix some errors in fts5 test scripts.
FossilOrigin-Name: e1ab2d376a72786098125a41c1ea8140fcbd15c6
2016-03-22 15:01:54 +00:00
drh 3bfa7e82b6 Create the "uptr" typedef (the same as uintptr_t when available) and use it
to cast pointers before comparison.

FossilOrigin-Name: 2484cc0c3ffc8834a155f89af1581bd07d453a90
2016-03-22 14:37:59 +00:00
drh 0b98207c5b Avoid the possibility of integer overflow on a pointer comparison test for
corruption in the database file.

FossilOrigin-Name: ff1b1ac3313ba9d70414e928ef3dd82913298a1a
2016-03-22 14:10:45 +00:00
drh 13969f5af0 Fix harmless compiler warnings.
FossilOrigin-Name: 25d776e4523aefeec007943fe29aa17c23ccb301
2016-03-21 22:28:51 +00:00
dan 6737aab5cf Add tests to ensure that fts5 is now deterministic.
FossilOrigin-Name: 3d076094ce411bffcfeb76c0284d15d0f83bd459
2016-03-21 16:25:34 +00:00
drh 4567beefac Skip recently added test cases in nolock.test when running in
the inmemory_journal permutation.

FossilOrigin-Name: a1dcf7af42bb7394d46138318f9367fe9e8be560
2016-03-21 16:19:29 +00:00
drh 6369bc3fbb Remove an unreachable branch from the unlink verification logic in the UNIX
VFS.

FossilOrigin-Name: 4dc30cce7fdb7dba9a9aad96bb8b499b965610b2
2016-03-21 16:06:42 +00:00
drh dbf8a16cb3 Merge 3.12.0 beta changes from trunk.
FossilOrigin-Name: 3296a0ceedef43c2790f0b36471f91138a575243
2016-03-21 15:32:19 +00:00
dan f5268268b7 Have fts5 cache the structure of its index in main memory. Use "PRAGMA data_version" to figure out when this cache should be invalidated.
FossilOrigin-Name: 902f221754f3cc6fb4ae049c135f85efce604ed3
2016-03-21 15:30:50 +00:00
dan 3c6707f72b Rearrange code so that tests pass whether SQLITE_DEBUG is defined or not.
FossilOrigin-Name: 89296a46c3b891ee0b637ff6f89d828d6e46e7b5
2016-03-21 15:18:13 +00:00
drh d260dd3534 Add the sqlite3_system_errno() interface.
FossilOrigin-Name: 4bd12b57ea177cfb1f44d54bfa7aedfb8a8c0c64
2016-03-21 14:46:37 +00:00
drh f68521c4e6 Make sure system errors that occur durign sqlite3_step() are captured for
use by sqlite3_system_errno().

FossilOrigin-Name: b4a1114f730c62e93623f889bc0e4fd8d0b31efa
2016-03-21 12:28:02 +00:00
drh 80fbee092e Improved comments. No logical changes to code.
FossilOrigin-Name: a6b6c6c466f3feb257b4fc08ef6b9a27a68ca073
2016-03-21 11:57:13 +00:00
drh 8d2f41ccd2 Do a better job of capturing all system errno values regardless of when
they occur.

FossilOrigin-Name: 7d49998d571d841a6d1b55f5f9889e613daaab2a
2016-03-21 11:38:01 +00:00
drh b7c9659db3 Merge updates from trunk.
FossilOrigin-Name: 86ab8643969bd2e51a257d80da9316c668437f7b
2016-03-21 10:49:49 +00:00
dan ef480d37dc Change the way fts5 internally allocates segment ids in order to eliminated non-determinism from the module.
FossilOrigin-Name: d6e2637df16764aa9723a30ea2eb8a631d28cb2b
2016-03-21 09:56:19 +00:00
drh 544c6b8e1b Change the Vdbe.aMem array so that it is zero-based instead of one-based.
FossilOrigin-Name: c39081e878faccc8552141afa5732a2bf2f77570
2016-03-21 00:38:59 +00:00
drh 3cdce92c38 Remove an unreachable branch. Improvements to comments.
FossilOrigin-Name: c5677ecd5cd2637d92a831ec6bd5b002f8d75626
2016-03-21 00:30:40 +00:00
drh 9f6168b6a3 Change the Vdbe.aMem array so that it is zero-based instead of one-based.
FossilOrigin-Name: e07b0c47eb5a39623f5fe0e66b939bba0906691c
2016-03-19 23:32:58 +00:00
dan b6eb666264 Fix exclusive.test so that it works with -DSQLITE_TEMP_STORE=3.
FossilOrigin-Name: d7852c639683a1d305a1e731df3cccafa64b594b
2016-03-19 18:11:59 +00:00
drh 9bccde3d03 Updates to the Lemon documentation.
FossilOrigin-Name: f095341471aa822e6d556cb65512ec081c3918da
2016-03-19 18:00:44 +00:00
dan f27d737b88 Add the sqlite3rbu_bp_progress() API to the RBU extension. Used to obtain the percentage progress of an RBU update.
FossilOrigin-Name: 209e31c729b9c8a09a80e43e3e4a2f3cd9384b3a
2016-03-19 17:48:12 +00:00
dan fce07fb944 Fix a problem detecting invalid values in the rbu_control column of an rbu database table.
FossilOrigin-Name: a1132dd9027d1c6dd845be307eeb38e535393f2c
2016-03-19 17:09:30 +00:00
dan febfe02300 Update the sqldiff tool so that it generates an rbu_count table.
FossilOrigin-Name: 1f7afb6e9be9f549a91bf2ab492df15698df89fd
2016-03-19 16:21:26 +00:00
dan f11737fcc8 Merge latest trunk changes, including fixes to test script rbudiff.test, into this branch.
FossilOrigin-Name: 734fc68fb12f06e97026d4637138b82b37809f5b
2016-03-19 15:34:42 +00:00
dan 49aed58b7f Fix another problem in test script rbudiff.test.
FossilOrigin-Name: 41c29c123ff347db720ed1a541c0b2ffc04670aa
2016-03-19 15:13:59 +00:00
dan 1e8dae0e43 Fix test scripts sqldiff.test and rbudiff.test so that they work with the --testdir option.
FossilOrigin-Name: 1ffe3cde03f924bb8405a8729c8e1bc01f5b6d3b
2016-03-19 14:53:36 +00:00
dan cf9bce34ab Add test file fts5multiclient.test.
FossilOrigin-Name: 7832466f9177cca59455ba272802145297fcd53d
2016-03-19 14:47:28 +00:00
drh bb9b5f2608 Fix a register allocation bug in the VDBE code generator for
PRAGMA integrity_check;

FossilOrigin-Name: 88439a866b3b16ad7c308ebe59198662a05e7eeb
2016-03-19 00:35:02 +00:00
dan eea627da9e Add further tests for sqlite3rbu_bp_progress(). Fix a problem in handling WITHOUT ROWID tables in the same.
FossilOrigin-Name: 65e02368e2b6cec349ea71af5a456d6783b0d15e
2016-03-18 20:12:28 +00:00
dan 789780d8f6 Change the name of the new API on this branch to "sqlite3_bp_progress". Add tests and documentation for the same.
FossilOrigin-Name: 1a1b69e87eb7d18f76f5b733e44da75136a686b6
2016-03-18 18:56:45 +00:00
dan fe485c0e56 Add tests for the changes on this branch. Fix a problem with calls to the new progress indicator API made after an rbu update has been resumed.
FossilOrigin-Name: bf82321724d3b0feb51e26d9b76090e03cc3964a
2016-03-18 10:29:47 +00:00
drh 860443da10 Fix FTS5 so that it works with SQLITE_OMIT_AUTORESET.
FossilOrigin-Name: b199637d81d7e2a767131ac03c7679b101fd459c
2016-03-18 00:39:40 +00:00
drh b99185f278 Fix more test-case errors in the Apple configuration.
FossilOrigin-Name: 6631e1e655604a7d1fb45b4d151938d4a13b47f3
2016-03-18 00:19:48 +00:00
drh 108e5a9a6c Fix some test cases so that they work under the Apple configuration.
FossilOrigin-Name: 399c60764d3fdec49dab1745c30930ca1dbafe70
2016-03-17 23:56:23 +00:00
drh 9493cafe6f Fix harmless compiler warnings that arise with -DSQLITE_OMIT_LOAD_EXTENSION
FossilOrigin-Name: 65ba2f0b465a1493de6e467f55e0300ac3fb08e1
2016-03-17 23:16:37 +00:00
drh 790b151e19 Changes to releasetest.tcl: Rename the "OS-X" configuration to "Apple".
Bring the "Apple" configuration up to date.  Allow the use of "if:os=..."
arguments in a configuration.  Run the Apple configuration on Linux in addition
to on Macs, but without -DSQLITE_ENABLE_LOCKING_STYLE.

FossilOrigin-Name: beb2a80b430e0ad561a58d8f00b80cbdc74b5e03
2016-03-17 23:00:42 +00:00
dan e42195b044 Add an API to indicate the percentage progress of an rbu update.
FossilOrigin-Name: ffc58d2c2576a5b6e1c2c7112612c5760e711afd
2016-03-17 21:06:42 +00:00
drh 762e32bcfa Change the xGetLastError() method on the windows VFS so that it continues to
format an error message (if requested) but returns the system error code,
rather than an SQLite status code.

FossilOrigin-Name: 1602f6b53698bd3a1a4be218c2e3145dd895f1f1
2016-03-17 19:28:19 +00:00
drh de845c2f5a A more compact implementation of the code generator for the
IS and IS NOT operators.

FossilOrigin-Name: 8607e3ac7a9d44372a4a66da21bbb3d28ae2528a
2016-03-17 19:07:52 +00:00
drh 0e80e50984 Simple test cases for sqlite3_system_errno()
FossilOrigin-Name: 185bc8644c806597194dc532a4d547a03a2dedaa
2016-03-17 17:23:11 +00:00
drh 1b9f2141a7 Experimental implementation of the sqlite3_system_errno() interface.
FossilOrigin-Name: 6782c87b3722fbd09684a5b1e5df05247956f1c6
2016-03-17 16:01:23 +00:00
dan c9460ab989 Fix some OOM-handling issues in the fts5 changes on this branch.
FossilOrigin-Name: 020a0bda59fe93b9361ceeed0d5a8ba4177380c8
2016-03-17 12:39:56 +00:00
drh 4b058dd4d1 The prepared statements for some pragmas can now be reused without invoking
an automatic reprepare.

FossilOrigin-Name: 97b0e88cc7c3d677217d0bfab4cb4a34a4abb238
2016-03-16 21:29:54 +00:00
dan db8d320d63 Merge the changes on the reusable-pragma branch into this one.
FossilOrigin-Name: 6c4a17b963916d19c9433d7a251338042f32e9fa
2016-03-16 20:53:33 +00:00
drh f71a366407 Some pragmas can be reused without an automatic reprepare.
FossilOrigin-Name: db1ce7e13e656fcd2766f1b1f225cbfefe8f73ad
2016-03-16 20:44:45 +00:00
drh e459bd4986 Fix a comment on the freelist_count and data_version pragmas.
FossilOrigin-Name: 10a3e2a01db9f80452a2a3369fd25b6fd9798274
2016-03-16 20:05:57 +00:00
dan 377ba38429 Add a cast to an implict (size_t -> int) conversion in fts5_expr.c.
FossilOrigin-Name: d9b5ff7aba3a8f6ca4505eac308fa9d510254c3e
2016-03-16 19:53:58 +00:00
dan f55fb6615b Have fts5 cache the decoded structure of fts5 indexes in memory. Use "PRAGMA data_version" to detect stale caches.
FossilOrigin-Name: 33ef2210ef19e55c8d460bfe9d3dc146034c8acc
2016-03-16 19:48:10 +00:00
drh 4ef07708df Enhance Lemon so that it reorders the reduce rules such that rules without
actions occur at the end and so that the first rule is number 0.  This
reduces the size of the jump table on the reduce switch, and helps the parser
to run faster.

FossilOrigin-Name: d5712f21ec758ff096a7b1bb8ed4fc5ec400ca5d
2016-03-16 19:45:54 +00:00
drh 3f77389bb4 Avoid a few unnecessary fstat()s on journal files.
FossilOrigin-Name: dbf84705913c0845ca4e75eb30c91536c754efeb
2016-03-16 19:10:46 +00:00
drh 892ffcc7fc Fix the query planner so that it is able to use the integer primary key
from an index as part of a multi-column constraint.

FossilOrigin-Name: 96ea9909429f0b3b4a67002e8340ae3f7dc0b73f
2016-03-16 18:26:54 +00:00
drh 47e1842e5b Merge all recent enhancements from trunk.
FossilOrigin-Name: 6a7ee04b0ddac36a87d5ed2ac89a53e537f4d5a3
2016-03-16 01:16:30 +00:00
drh 32f57d4c37 Add the SQLITE_OMIT_CODEC_FROM_TCL compile-time option.
FossilOrigin-Name: 45f7f0c80bd91a0c7ff859c27fd9e82e551bd83e
2016-03-16 01:03:10 +00:00
drh c5db1d4b4c Rearrange some internal fields in the sqlite3_stmt object to avoid a harmless
TSAN warning.

FossilOrigin-Name: e0b116edd64a55c971c368685aa343cb6beed0f1
2016-03-16 00:36:19 +00:00
drh 98968b22c5 Change the OP_IntegrityCk opcode to accept the list of root pages as an
intarray argument in P4.  Slightly smaller and faster.

FossilOrigin-Name: 15e4a272df46cbad8e71b21551dc06a126d64d46
2016-03-15 22:00:39 +00:00
mistachkin b7b91068ee In the Win32 VFS, use SQLITE_FCNTL_LAST_ERRNO instead of (the older) SQLITE_LAST_ERRNO.
FossilOrigin-Name: 9463762c437488970a87093ef13131c39b2adadc
2016-03-15 19:10:39 +00:00
drh 0ff47e9e1b Implement FROM-clause subqueries as co-routines whenever they are guaranteed
to be the outer-most loop of the join.

FossilOrigin-Name: c7bae50bdccb5bcf3bc22e8ac5bb6725ef13db39
2016-03-15 17:52:12 +00:00
drh 82f525406a More test-case changes so that everything works when the reserved_bytes
value in the header is non-zero.

FossilOrigin-Name: 2fd095b14b03a508169bba710d2e8e2addf4b8f5
2016-03-15 12:37:08 +00:00
dan 089555c8e9 Fix the shellN.test test scripts so that they work with the --testdir option.
FossilOrigin-Name: 051c61ebae921b70f843c55aacf046a9922cc187
2016-03-15 09:55:44 +00:00
drh a580936383 Fix the permutations.test script so that it works again.
FossilOrigin-Name: 9f194f90c07d5415b1d6bb10ec049f74999d6885
2016-03-14 21:26:25 +00:00
drh 10ac13ae3b Update test scripts so that they work with SEE.
FossilOrigin-Name: f4693ba4bbd9738b45012cf507fc0d7b6d04b7ee
2016-03-14 21:12:26 +00:00
drh 4a8a646723 Changing page size using VACUUM or backup is not allowed with a codec attached.
FossilOrigin-Name: 92be06c1a828d56652fa5269a3029f8cb029b2cd
2016-03-14 20:49:24 +00:00
drh 05586c3284 Merge test script fixes from trunk.
FossilOrigin-Name: ea1d2cddd59192251ee5fd912b190cded4959879
2016-03-14 18:42:04 +00:00
drh 7da56b4f65 Many more test cases fixed. Only a few remain.
FossilOrigin-Name: 99b9d7eef68fd6d5c9eecb5fbe3dfe002c1ca4a8
2016-03-14 18:34:42 +00:00
drh af3906a798 Many test cases fixed to work with encryption.
FossilOrigin-Name: d866fffb8b1af5003a8730ce7029d1edddb24d46
2016-03-14 17:05:04 +00:00
drh 7bd6b49a3e Test script changes to support testing the SQLite Encryption Extension.
FossilOrigin-Name: 1c70aa5c014fc48ab06215992a61c6f92490abe4
2016-03-14 16:16:43 +00:00
dan de503eb166 Fix the backcompat.test script so that it works with the --testdir test option.
FossilOrigin-Name: f7480e33eb82f2eae219d17ce46cd2d4edac07d2
2016-03-14 15:43:03 +00:00
drh 0d71eaa368 Run TCL tests in the "testdir" subdirectory.
FossilOrigin-Name: 90e0cc7b0be31ee2f155c2c053b0cbac584f6154
2016-03-14 15:03:54 +00:00
drh e500f65a2c More file pathname normalization.
FossilOrigin-Name: fa8c12921f8361f1889724bb7c5f7eca9c48b075
2016-03-14 14:59:35 +00:00
drh bea14132cf Normalize the $testdir and $argv0 paths so that they continue to work
in the testing subdirectory.

FossilOrigin-Name: 19225b8130f1640772fc54250583b571a89063b6
2016-03-14 14:28:43 +00:00
drh d5704a8961 Run TCL tests in a subdirectory "testdir".
FossilOrigin-Name: f632bba0d6ad3edc60f4127380ce8320378dac42
2016-03-14 13:42:29 +00:00
dan 7d85774da8 Fix a memory leak in fts5 that could occur following a syntax error in a query expression.
FossilOrigin-Name: 54b8968e335760105206b894672213c1d56771a4
2016-03-14 12:16:23 +00:00
dan 5cf98f101e Fix a problem handling 'NEAR("" token)' in fts5 found by fuzzing.
FossilOrigin-Name: 10a827ae5f3f322af836c15e581fdc958a433a5a
2016-03-12 19:33:47 +00:00
dan e8c20120ce Fix handling of strings that contain zero tokens in fts5. And other problems found by fuzzing.
FossilOrigin-Name: 72b3ff0f0df83e62adda6584b4281cf086d45e45
2016-03-12 16:32:16 +00:00
drh ffbb02a361 Do not allow the use of WAL mode with nolock=1 because it does not work.
FossilOrigin-Name: 74f5d3b07f6e5e977858c73957c6f9337ae3ca3e
2016-03-11 23:07:30 +00:00
dan e1f1ffa55a Tweak the amalgamation autoconf files so that the --disable-static-shell option works again.
FossilOrigin-Name: 83efcdebfa255cd0663ecc6b74eb99183e2f3a10
2016-03-11 15:25:13 +00:00
drh 811f17bac0 Update spellfix1_scriptcode() to output 215 (latin) for pure numeric text.
FossilOrigin-Name: df44308b862e932ff0ad25b6328d13be22047b96
2016-03-11 14:30:18 +00:00
mistachkin a0ca3bc854 Check for PDB files prior to attempting to copy them in the MSVC batch build tool.
FossilOrigin-Name: d7c20f04e69fb1848b2e2f3b04fbd56e06c7c854
2016-03-10 19:08:44 +00:00
dan 1bb85f3ed3 Add tests to cover untested branches in recent fts5 changes.
FossilOrigin-Name: fa0033edf6ddf3c6631fa95b343225dbc8ac9429
2016-03-10 15:12:47 +00:00
drh ecdf20d3a4 Use #ifdefs to remove code that is unreachable in some configurations, replacing
it with an assert().

FossilOrigin-Name: f96ec84d605fd73c323344a753acf35b76307af9
2016-03-10 14:28:24 +00:00
drh 6459ca0b8c Remove an unused local variable.
FossilOrigin-Name: 3c343c3d012367942037e64a9855b825cb459844
2016-03-10 14:22:42 +00:00
dan 4dbc65b29a Add an incremental optimize capability to fts5. Make the 'merge' command independent of the 'automerge' settings.
FossilOrigin-Name: 556671444c03e3afca072d0f5e9bea2657de6fd3
2016-03-09 20:54:14 +00:00
dan 57ebc84a6e Fix a problem in fts3/4 that was causing it to discard data cached in-memory if an 'optimize' command is run when there is no data on disk. The usual way this would happen is if the very first transaction that writes to the fts3/4 table also includes an 'optimize' command.
FossilOrigin-Name: 79338b991bf01e81d336790ca87a0fa747da4ff3
2016-03-09 18:17:42 +00:00
drh 69c355bd9a Slight simplification to the query optimizer logic associated with IN (SELECT).
FossilOrigin-Name: 2c55c3c2950cafdc256ab540f60dc4609b9c354b
2016-03-09 15:34:51 +00:00
dan ab8aa11b96 Add another test case for bug [5e3c8867].
FossilOrigin-Name: d91e57e49f23414ec9211b775eb11cd6230a4f96
2016-03-09 15:14:54 +00:00
drh 90730c9e68 When optimizing expressions of the form "x IN (SELECT ...)" make sure that
the subquery is not correlated.  Fix for ticket [5e3c886796e5512].

FossilOrigin-Name: 1ed6b06ea3c432f920fb2b66b6042be906c5d21c
2016-03-09 15:09:22 +00:00
drh 7c621fb967 Automatically disable SQLITE_ENABLE_EXPLAIN_COMMENTS if SQLITE_OMIT_EXPLAIN
is defined.

FossilOrigin-Name: 8d4b6b2b519a80f831d64345ac26db825b0e2ebe
2016-03-09 13:39:43 +00:00
drh bacbbccd16 In the query planner, make sure OOM errors are reported up into
whereLoopAddVirtual() so that it shuts down appropriately.

FossilOrigin-Name: a13c59d08bcbc6f26ce6ac761a892eff8f035201
2016-03-09 12:35:18 +00:00
drh c5644346b6 Disable the bestindex*.test modules when building without virtual table support.
FossilOrigin-Name: e0bac2f3eed900d3a26de339fb7d5963f9b47724
2016-03-09 11:59:16 +00:00
drh d93b2b840d Simplifications to the memjournal.c logic to facilitate testing.
FossilOrigin-Name: 8baa2c2c7698e03418531482a8314a5d7ae2c7d3
2016-03-09 04:17:17 +00:00
drh 769b4c95ca Move the write failure test in memjrnlCreateFile() to just after the
actual write, thus reducing the number of instances of the test by one.

FossilOrigin-Name: 7f00d80c63b15376391f661d872f2b29a970702d
2016-03-09 03:44:32 +00:00
drh c1fb2b87bd Update a comment in btree.c to account for WITHOUT ROWID tables. No code
changes.

FossilOrigin-Name: fa20dcb03b92be3bb32f8e3d6f88681ace3f6c84
2016-03-09 03:29:27 +00:00
drh 2f1e02e8a7 Change a branch made obsolete by recent parser enhancements into an assert().
FossilOrigin-Name: ee486ef742557244f532e8d3b3604ff04e024b8a
2016-03-09 02:12:44 +00:00
drh 273021d71a Add an #ifdef and an ALWAYS() for coverage.
FossilOrigin-Name: 069337a922867ad0d023f5bf36e13ea46e047000
2016-03-09 02:03:03 +00:00
drh d1cca3b721 Change an unreachable branch in the virtual table query planner into
an assert().

FossilOrigin-Name: 73b97b9ec3c39ab2828ae6353b5d7e04a27996c9
2016-03-08 23:44:48 +00:00
drh 3349d9bea9 Improved comments on virtual table query planning. Added many new
WHERETRACE() macros.

FossilOrigin-Name: 4c89c2534abcf67bc486d5a900a84a6c4f59537e
2016-03-08 23:18:51 +00:00
drh c629e63a55 In memjournal.c, reuse the same sqlite3_file object for both the in-memory
phase and the on-disk phase.

FossilOrigin-Name: e7fbbdc25c0991d4e58d78a5fcb7386e1aa7f3af
2016-03-08 17:59:19 +00:00
dan 7ed4020890 Modify the memjournal.c code to make it a bit smaller.
FossilOrigin-Name: d99ac4154812065eef26c298de52954d7ee0bd75
2016-03-08 17:44:08 +00:00
drh 33b104af08 Drop support for SQLITE_EXTRA_DURABLE. The new SQLITE_DEFAULT_SYNCHRONOUS
compile-time option is a more general replacement.

FossilOrigin-Name: f6d3156ba9af1da517dd77c1df03fa7869888463
2016-03-08 16:07:59 +00:00
drh 15d36c603d Remove an unused goto label in the RBU extension.
FossilOrigin-Name: 2179a106e8dd7943d4f37093e65ce7826720904e
2016-03-08 16:02:37 +00:00
dan d0b8b664bd Add a new row type to RBU (a peer of insert, update and delete) - "delete then insert".
FossilOrigin-Name: 1d9468d2427d2c9b7240b364554ac85a0b62fa44
2016-03-08 15:52:43 +00:00
drh 9219bf9839 Add the SQLITE_DEFAULT_SYNCHRONOUS and SQLITE_DEFAULT_WAL_SYNCHRONOUS
compile-time options.  Automatically switch to the WAL_SYNCHRONOUS setting
when first opening a WAL-mode database if the synchronous setting has not
been previously set by the application.

FossilOrigin-Name: 5a847a676e756bbe33436596d4279f339bfb247c
2016-03-08 15:47:47 +00:00
dan c7dbce0f2a Update fts3/4 so that the 'merge=X,Y' command merges at least, instead of exactly, Y segments from a single level. This matches the documentation. 'merge=X,0' is, as it was in 3.11, an error.
FossilOrigin-Name: 64b3cb29159491cbfab7e01844b54408541ece5e
2016-03-08 15:37:48 +00:00
drh c2ae2073d9 Make the SQLITE_DEFAULT_SYNCHRONOUS and SQLITE_DEFAULT_WAL_SYNCHRONOUS
values zero-based to agree with PRAGMA synchronous.

FossilOrigin-Name: 592d2104361500e5002783ba329a2609389c57b9
2016-03-08 15:30:01 +00:00
drh e243de5cf5 If SQLITE_DEFAULT_WAL_SYNCHRONOUS is not the same value as
SQLITE_DEFAULT_SYNCHRONOUS and the application has not run
"PRAGMA synchronous", then set synchronous to the 
SQLITE_DEFAULT_WAL_SYNCHRONOUS setting when entering WAL mode for
the first time.

FossilOrigin-Name: 5791407b523abd24e832fc2361b3e9f01ee2f36a
2016-03-08 15:14:26 +00:00
drh 50a1a5aaca Add compile-time options SQLITE_DEFAULT_SYNCHRONOUS and
SQLITE_DEFAULT_WAL_SYNCHRONOUS used to specify the default synchronous
settings for all database connections.

FossilOrigin-Name: 1fefa967aa93372d232b96b1e0232b7b855d6d00
2016-03-08 14:40:11 +00:00
drh 6702f761ea Fix ATTACH to use the symbolic name PAGER_SYNCHRONOUS_FULL rather than
an integer literal.

FossilOrigin-Name: c4e192a0e5a408e198dbacb2752859a00d2b572f
2016-03-08 14:16:23 +00:00
drh 0dba3304f6 Fix comments on pager flag settings to include synchronous=EXTRA.
FossilOrigin-Name: 3a65a1fc0fd2408c6984153801ec5dcd5211c897
2016-03-08 13:56:02 +00:00
drh 6de32e7cdb Simplified error detection in the xBestIndex processing.
FossilOrigin-Name: 82ca2131b670505578628687746135ac413d156b
2016-03-08 02:59:33 +00:00
drh 8426e36c8f Add the ALLBITS macro as a shorthand for "(Bitmask)(-1)".
FossilOrigin-Name: 91bd619d27e4d91510a187bbb88de961a31c8a2e
2016-03-08 01:32:30 +00:00
drh 599d576456 Add a NEVER() to the code generator. Change the parameter name "mExtra"
to "mPrereq" in the query planner, to more closely reflect its meaning.

FossilOrigin-Name: 721ae51e443647291f3a8f7f2128aa410fee2682
2016-03-08 01:11:51 +00:00
drh fb826b8c13 Changes so that some assert()s in the virtual table query planner are
correct even following an OOM error.

FossilOrigin-Name: 9805f6f85211dcb5a0ab3ceca204e6f2e48530ea
2016-03-08 00:39:58 +00:00
dan 108b7953ed Update fts3/4 so that the 'merge=X,0' command merges X pages from all segments of the first level in the fts index that contains 2 or more segments.
FossilOrigin-Name: cddf69dbc46f10ee7e87538dd850e086386b544c
2016-03-07 20:14:27 +00:00
drh 237b2b7111 Avoid a NULL pointer dereference following an OOM while generating code
for IN operators on virtual tables.

FossilOrigin-Name: c924008692e35f1f5144830af08d6de051dd21dd
2016-03-07 19:08:27 +00:00
drh c5c67abb9a Merge the virtual table query planner enhancement, the RTREE cost estimate
fix, and the statement journal spill delay enhancement from trunk.

FossilOrigin-Name: 17fd8f3cf0ec565e08403dc8e10a1cffc2bbe165
2016-03-07 17:49:17 +00:00
dan e45216fd9d Add a new row type to RBU (a peer of insert, update and delete) - "delete then insert".
FossilOrigin-Name: 169311c85b30f625bdb6986c9cd11db70942d73b
2016-03-07 17:39:30 +00:00
drh 8c71a98ce1 Add the SQLITE_CONFIG_STMTJRNL_SPILL option for sqlite3_config().
FossilOrigin-Name: b6c4202432dc96f8f1740f52d0bf872116357fcc
2016-03-07 17:37:37 +00:00
dan 104ead923e Fix a problem in the previous commit affecting queries with three or more tables joined together to the right of a LEFT or CROSS JOIN operator.
FossilOrigin-Name: d8d89d69a490a708b83147945f74134ae0e4b387
2016-03-05 21:32:14 +00:00
dan 6a1e076939 Change the way SQLite invokes the xBestIndex method of virtual tables so that N-way joins involving virtual tables work as expected.
FossilOrigin-Name: 195444380bafd3d95d37ad83047c75ca20978de4
2016-03-05 21:07:49 +00:00
drh 2ea74dc805 Adjust the cost estimates for RTREE such that the expected number of rows and
expected cost is halved for each additional constraint.

FossilOrigin-Name: fd7cd0609381a85673d1f737ebeb19dde3de180f
2016-03-05 20:28:24 +00:00
dan 115305ff00 Change the way SQLite invokes the xBestIndex method of virtual tables so that N-way joins involving virtual tables work as expected.
FossilOrigin-Name: ffc65968ede2c402e616147e6e3d737e6f9de21d
2016-03-05 17:29:08 +00:00
drh c2f18adde5 Remove the unused journal.c source file (its function have been subsumed into
memjournal.c).  Refactor some of the names in memjournal.c.  No functional
changes.

FossilOrigin-Name: 5f2a262d3f6b1531001326faf1d3b3d92c20a30a
2016-03-05 15:35:09 +00:00
drh 65a7e769e7 Work around (incorrect) ASAN warnings in memjournal.c.
FossilOrigin-Name: 4de09777dad6188b7e897473700af3c9655e8547
2016-03-05 15:03:31 +00:00
drh 07eab3b87f Fix an integer size mismatch problem in test_bestindex.c
FossilOrigin-Name: 2e35eb6b7464455467c868adfbcaad4da16d3207
2016-03-05 14:19:32 +00:00
drh 14bfd99143 Fix an incorrect #ifdef on sqlite3LogEstToInt().
FossilOrigin-Name: dca7b23354a6b08c926b6ed3f7345d942a409862
2016-03-05 14:00:09 +00:00
drh 6f17c09fcf Fix an assert() in sqlite3VarintLen(), even though it is impossible to hit
in SQLite due to the way sqlite3VarintLen() is used.

FossilOrigin-Name: 251424c5869f43012fc1e1a545de362036b883db
2016-03-04 21:18:09 +00:00
drh 2606aca80f Merge recent enhancements from trunk. Default page size is 4096. Writes
to statement journals are avoided.

FossilOrigin-Name: 456df3365e2df60e34762f2024bb551538b3f72b
2016-03-04 16:42:43 +00:00
drh 3298a641a2 Defer opening and writing statement journals until the size reaches a
threshold (currently 64KiB).

FossilOrigin-Name: cb9302cca423de41305719a49208daa392ec09da
2016-03-04 14:43:44 +00:00
drh 3ac9a86415 Update test cases to taken deferred statement-journal opening into account.
FossilOrigin-Name: 5b2fe5219ab9ad15969e3374894a75979b65cb3c
2016-03-04 14:23:10 +00:00
drh 14520bfd23 Merge changes from trunk.
FossilOrigin-Name: a87305dfd49ee17632d0bce66ce7c2e9407b7b3e
2016-03-04 13:08:35 +00:00
drh 94580868f5 Change the default cache_size to -2000 (which means 2000*1024 bytes
independent of page_size).

FossilOrigin-Name: 2682e8e413fadbca0673f242769af17bfd291559
2016-03-04 04:01:43 +00:00
drh 9878fefd6f Change the default page size for new database files to 4096 (from 1024).
Except, when building the testfixture, preserve the legacy page size.
Also fix a comment on SQLITE_MAX_ATTACHED.

FossilOrigin-Name: 2e8a9ca9d3d6efddc31f01074d14acae56568c37
2016-03-04 03:43:10 +00:00
drh e808d7c1fe Detect the presence of pread()/pwrite() system calls on unix systems and
use them if available.

FossilOrigin-Name: 82cbf5ad2ed988a006106e188e98096a52e6779d
2016-03-04 03:20:05 +00:00
drh 79a2ca3944 Further fixes to the pread()/pwrite() enabling logic.
FossilOrigin-Name: 38fb54e7854ac0500a88585ff9dd7487b4b2e586
2016-03-04 03:14:39 +00:00
drh a46cadc42e Fix the build for cases when pread()/pwrite() are not available.
FossilOrigin-Name: 7d67d876b70c7a4199697c5b112d809c600e140e
2016-03-04 03:02:06 +00:00
drh ddebf16f1f Add the test_bestindex.c file to Makefile.in and Makefile.msc so that
"make test" will work again.

FossilOrigin-Name: 6ec6b6a97e62be1abe1e349b5bc04c6f5ae88968
2016-03-04 02:59:35 +00:00
drh e32a256acd Update the configure script to detect pread/pwrite and update os_unix.c to
use those routines if they are available.

FossilOrigin-Name: 2cffb9e50bed77d1079603f5b4a71b7559de7294
2016-03-04 02:38:00 +00:00
drh ff6b826631 Get in-memory subjournals working for builds without SQLITE_ENABLE_ATOMIC_WRITE.
FossilOrigin-Name: b5378dcea53d4cd1744d13ddee5e50869607b771
2016-03-04 00:13:29 +00:00
drh a05fc913ab Merge the latest updates from trunk.
FossilOrigin-Name: 55c00f716dc98b188c91f3a5a010242c9497785f
2016-03-03 21:29:10 +00:00
drh 862acaa3f4 Reduce the amount of heap memory required to store many schemas by storing
the column datatype appended to the column name (with a \000 separator), 
rather than in separate memory allocation.

FossilOrigin-Name: 16fbf2e19c22df9441aef5c8b7f5670adc38a6b6
2016-03-03 21:22:53 +00:00
drh 2b33f6e775 Allow the left-hand side of IN operators on virtual tables to have the
aConstraintUsage[].omit flag clear.

FossilOrigin-Name: 3eb74342740cd393e03aa38cd01690ccab173b76
2016-03-03 20:42:18 +00:00
drh 5b38201708 Merge 3.11.1 changes into trunk.
FossilOrigin-Name: 7abc2dd953477797fa05421b061d73596aa025fb
2016-03-03 17:54:30 +00:00
drh c5c1507612 Version 3.11.1
FossilOrigin-Name: f047920ce16971e573bc6ec9a48b118c9de2b3a7
2016-03-03 16:17:53 +00:00
drh 2396fce54e Increase the default upper bound on scope to 30.
FossilOrigin-Name: b1258814f6100f594210775e9e3007b5b0c65025
2016-03-03 15:16:15 +00:00
dan b78b83a2f6 Add new test script bestindex1.test to the utf16 permutation.
FossilOrigin-Name: 5893e97244126c80762e55249461f21a4e81bb70
2016-03-02 17:57:53 +00:00
dan 512c09b0bd Add an extra test for the change on this branch.
FossilOrigin-Name: d2d28251566d2a0ec1a07fe5b8ed047136840bfd
2016-03-02 16:13:53 +00:00
dan 9cc24c8002 Enhance test_bestindex.c so that it can be used to test plans generated by xBestIndex.
FossilOrigin-Name: 3c15a9bf45cd7dae2fbd99123b8dd75ce278d6e4
2016-03-02 16:01:41 +00:00
dan 341b20fb12 Fix a recently introduced problem in permutations.test causing an error when the QUICKTEST_OMIT environment variable is defined.
FossilOrigin-Name: 45bc9557722cc2a1398a53fdb2acd8b6692f3121
2016-03-02 15:37:50 +00:00
dan e18ec6acc2 Fix an error in an fts5 test script.
FossilOrigin-Name: b2a03e2d479aec2fc68dfc83a1fa34c740f44e13
2016-03-02 13:26:19 +00:00
drh dbc49161c0 Allow the left-hand side of IN operators on virtual tables to have the
aConstraintUsage[].omit flag clear.

FossilOrigin-Name: 1622623cbbfc4325c53d731aba78ca9c382ec612
2016-03-02 03:28:07 +00:00
drh 47784529cc Add the optional -DSERIES_OMIT_CONSTRAINT_VERIFY=0 option to the series.c
extension that implements the generate_series() virtual table.

FossilOrigin-Name: 3d9daa929c0abe6dc01e800ef343b0eef2f0c76a
2016-03-02 00:58:49 +00:00
drh 7434b1dbf4 New test cases and infrastructure for testing the xBestIndex method of
virtual tables.

FossilOrigin-Name: 1d41c161165006d6c2af47e476f05fb13039f8b8
2016-03-01 22:48:00 +00:00
drh 4fb48e4eb1 Improved debugging output with wheretrace. Fix some typos in test script
comments.

FossilOrigin-Name: 13a37fd487ce7d4f98a12f7a67a9c05dadc66557
2016-03-01 22:41:27 +00:00
dan 23c3c38dd6 Fix a memory leak in the test code on this branch.
FossilOrigin-Name: 7a1add56341f43dc41adc7b370e58860f4dd50a3
2016-03-01 18:35:55 +00:00
dan a3a44dd379 Allow test_bestindex.c to set the omit flag for a constraint.
FossilOrigin-Name: 759b9d5b22aa60cc1d6b606f81eb7366c28cbcbe
2016-03-01 18:24:36 +00:00
dan 8e4251b633 Add test code useful for testing the planners use of teh virtual table xBestIndex() method.
FossilOrigin-Name: de034c0db66298454ae8418949d58eb6e223c0de
2016-03-01 18:07:43 +00:00
dan bce50c734b Do not attempt to run fts5bigtok.test or fts5merge2.test if FTS5 is not compiled in.
FossilOrigin-Name: f7ed373953c2dea0919a85dfb461dfef512cd5fc
2016-03-01 16:56:26 +00:00
dan e82126c9d0 Add -DSQLITE_ENABLE_FTS5 to one of the release-test configurations in releasetest.tcl. Run fts5 tests as part of "make test" if SQLITE_ENABLE_FTS5 is defined.
FossilOrigin-Name: 3cee93716f2aece03bf9b835fb7b5294e4ddc176
2016-03-01 16:02:57 +00:00
drh fb02bad04f Remove a forgotten "breakpoint" command from an FTS5 test script.
FossilOrigin-Name: 61927c8f3156c6e61b768318b3cd3bcc4144e17b
2016-03-01 15:52:41 +00:00
drh 5ec04f0943 Increase the version number to 3.11.1
FossilOrigin-Name: 2dcd2fdafe933b74e2d90923986c5ee5791d8223
2016-03-01 15:41:31 +00:00
dan a93cd623cf Merge branch-3.11-matchinfo into this branch.
FossilOrigin-Name: 42358170b35cc3e25c42f20e56f3f67e809001ba
2016-03-01 15:09:15 +00:00
dan b1e8d31edf Fix a problem in fts5 where a corrupt db could lead to a (huge) buffer overread. Cherrypick of [c9a30e117f].
FossilOrigin-Name: daef5869f4d62ebb24eb03b79fe4be0812fa0496
2016-03-01 14:51:36 +00:00
dan 45a0e4eb59 Fix an fts5 problem causing 'optimize' to corrupt the fts index under some circumstances. Cherrypick of [251d6473f7].
FossilOrigin-Name: 5b1b7ab5d67f3d691e52ba57dbc14c52d90c6631
2016-03-01 14:50:55 +00:00
drh 889cb33b8f Better estimatedCost in the xBestIndex method of the generate_series vtab.
FossilOrigin-Name: f2c16094a536e7ef62444d0fe38cbee2a4999426
2016-03-01 02:11:50 +00:00
dan 6e76326d18 When using a temporary file for a statement journal, store the first 64KiB in memory. If the file grows larger than that, flush it to disk and free the memory. Hardcoding to 64KiB is just an experiment to check that the memjournal.c code works.
FossilOrigin-Name: 44b2dc18e200e87cf062cb8f1659727c53fa36e9
2016-02-29 20:18:21 +00:00
dan 5f37ed5121 Fix minor problems with new code in memjournal.c.
FossilOrigin-Name: 9fd3f7b9c93325a83cdbe7dc9ee312b22a9c2898
2016-02-29 20:00:13 +00:00
dan 4e9d0d5418 Fix a problem in fts5 where a corrupt db could lead to a (huge) buffer overread.
FossilOrigin-Name: c9a30e117f2c6c9ef0cc0c6ca5227d2961715b8f
2016-02-29 17:34:16 +00:00
dan 437a54eaba Fix an fts5 problem causing 'optimize' to corrupt the fts index under some circumstances.
FossilOrigin-Name: 251d6473f7c9ad95adbdcc49cb8eaf7c0956764b
2016-02-29 17:16:26 +00:00
drh 94eaafa9ce Reduce the amount of heap required to store many schemas by storing each
column datatype appended to the column name, rather than as a separate
allocation.

FossilOrigin-Name: 842b21162713bb141b845b01c136457a31af4ab0
2016-02-29 15:53:11 +00:00
drh 743606c3d3 Very minor improvement to the performance and reduction in size to the
parser by capturing the name and datatype of table columns in a single
grammar rule reduction.

FossilOrigin-Name: 4b55c520f554163edc174e5995e66242f169cb04
2016-02-29 13:44:38 +00:00
drh 986dde7052 Further simplifications to the grammar.
FossilOrigin-Name: 519fd03b845c9b53df9e5397282df2e99f36a672
2016-02-29 13:37:21 +00:00
drh 2881ab6298 Update the parser so that it pulls out the column name and type all in one
go, rather than using separate reductions.

FossilOrigin-Name: ad3ffe2eec8e8ea2591a78c723d2665735553cb0
2016-02-27 23:25:36 +00:00
drh 94fa9c414a Eliminate the need for the Column.zDflt (using Column.pDflt instead) to reduce
the amount of memory needed to hold the schema.

FossilOrigin-Name: d8c94a46dfa94930732c2de2aa79675c5087d36e
2016-02-27 21:16:04 +00:00
dan 2491de28f1 Extend the code in memjournal.c so that it subsumes the role of journal.c. And (untested) can flush journal or statement journal files to disk after they grow to a specified size.
FossilOrigin-Name: e0b0b4316531fc8afa74b4882d9c74a91030ec69
2016-02-27 20:14:55 +00:00
drh fc1a84c57b Tighter description of I/O stats in the shell. Show I/O stats on speedtest1.c.
FossilOrigin-Name: f681d800340e0e710f73d0f7c09101f899249183
2016-02-27 19:19:22 +00:00
drh 3478490332 Enhance the ".stats" command in sqlite3.exe to show one-time stats information
if invoked with one argument.  Also show /proc/PID/io information if run on
Linux.

FossilOrigin-Name: 3c36948f16b58fe8042c37d0df634308b4e48217
2016-02-27 17:12:36 +00:00
drh 4f8f5e4446 Fix a requirement mark to conform to a typo fix in the documentation.
FossilOrigin-Name: d1392c627934b89cdb86d82e73d56e8f76952b30
2016-02-27 14:04:27 +00:00
drh d892ac97bb Enhance documentation of sqlite3_snapshot_open() to explain that the database
connection must have participated in at least one read operation prior to
the beginning of the transaction for which the snapshot is to be opened.
Add test cases for this fact.

FossilOrigin-Name: 33dd671cb9c17f08dbc61aed91e80eaeb84bfaf5
2016-02-27 14:00:07 +00:00
mistachkin fe41a98fd6 Add 'Replace.exe' to the MSVC clean target.
FossilOrigin-Name: c2277fab12d2aecf9e0f69683741a194df17e854
2016-02-27 00:21:44 +00:00
mistachkin 62ab810014 Fix typo in ICU error message.
FossilOrigin-Name: 00c8fffd47cec763857389e1e91c026ba3179182
2016-02-27 00:21:16 +00:00
drh fee1e8d317 Make sure the Replace.cs file is included in the autoconf tarball.
FossilOrigin-Name: b850df483d4dfc677ec61b119d8c1162b6a823d6
2016-02-27 00:07:18 +00:00
mistachkin 9aeb971ceb Support generating the '.def' file using the autoconf Makefile for MSVC.
FossilOrigin-Name: 3617564cb630ed418badf43d2c0291c11c166d12
2016-02-26 23:13:16 +00:00
drh 88a1650859 Fix a potential buffer overflow in the ICU upper() function.
FossilOrigin-Name: b8dc1b9f5d413000387bfe784b69f5d0ee5c0489
2016-02-26 21:20:57 +00:00
mistachkin fe663fdecb Further refinements to the MSVC batch build process.
FossilOrigin-Name: cf4e4fbdb6a29b7fbd5150958ab4f8f2a1cd7f21
2016-02-26 21:03:16 +00:00
mistachkin 9b88ace822 Further refinements to the MSVC batch build process.
FossilOrigin-Name: 4e54e9c0fefe417f94a2d95921acf61b1dda5ca4
2016-02-26 21:01:37 +00:00
dan 38c3d3d8a5 Fix the ICU extension LIKE function so that it does not read past the end of a buffer if it it passed malformed utf-8.
FossilOrigin-Name: 424b7aee3310b9782bd312589dc3d9f287aa04b8
2016-02-26 16:03:29 +00:00
drh d42908fb0e Provide the new SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER option to
sqlite3_db_config() that can be used to activate the two-argument version
of fts3_tokenizer() for a specific database connection at run-time.

FossilOrigin-Name: 374b5108087a2eae03676c0f3469b37a272145bf
2016-02-26 15:38:24 +00:00
drh 5f7d411e98 Fix a typo in a comment (though an important comment in that it is used
to generate documentation).

FossilOrigin-Name: ff3d7f845e1875d6729f64f5231db1c376892f31
2016-02-26 13:22:21 +00:00
drh 26bcc7cf40 Ephemeral tables used to hold manifested views may not be unordered since
they might be subject to an ordered comparison if they are part of a join.

FossilOrigin-Name: 3ef6a3153267d5328202fea24fd29ff4d5409295
2016-02-26 04:13:39 +00:00
drh c9eaeef1fe Remove a debuggin "exit" command mistakenly left in the "where.test" module.
FossilOrigin-Name: beda0b8c76c2c7328a44156257c978cf8f5df59b
2016-02-26 04:04:07 +00:00
mistachkin 74c2f06668 Add some comments in the VSIX test tool.
FossilOrigin-Name: c871473ffee6dbb0f5b47f1c1329c84b902368ae
2016-02-25 23:27:02 +00:00
mistachkin a85ac12d00 Add tool for smoke-testing the UWP VSIX package.
FossilOrigin-Name: d27f32c6d72182198ae6d6cf8e385be76335dc65
2016-02-25 23:25:00 +00:00
mistachkin 7856c1c0eb Enhance checking of prerequisites in the vsixtest tool.
FossilOrigin-Name: 799d5f09ed058898167e43bd9c8d1bf8c5df23ba
2016-02-25 23:22:26 +00:00
drh 8c098e61b6 Fix an incorrect cost computation for sorting (introduced just a few
check-ins ago).  Should be NlogN, not NloglogN.

FossilOrigin-Name: 2459d3238853951bc3a507dd975e7ec921cf8446
2016-02-25 23:21:41 +00:00
mistachkin 9d970c3c93 Small optimization in FK handling.
FossilOrigin-Name: e0d25913b73a813f5987aa70b364b00f19351663
2016-02-25 21:38:28 +00:00
drh 27b6649f39 Change the srcck1.c utility program to use only unsigned characters.
FossilOrigin-Name: d64d005eb5df2e3eb1248fc8eff8b1b683e48c74
2016-02-25 21:27:03 +00:00
drh d566c95179 Change the "PRAGMA stats" command to report size values in LogEst units.
The eliminates the need for sqlite3LogEstToInt() unless non-standard
compile-time options are used, so leave it out except in those cases.

FossilOrigin-Name: 832c237fcbe83dd4f5a18a06acb0aeb7e2b9e712
2016-02-25 21:19:03 +00:00
dan aa9ffaba4a Disable the RESTRICT foreign key action if "PRAGMA defer_foreign_keys" is set.
FossilOrigin-Name: 9ffff484bb4b67c29dda6180d7d766ad13988fe1
2016-02-25 20:17:55 +00:00
dan fd37e67b16 Disable the RESTRICT foreign key action if "PRAGMA defer_foreign_keys" is set.
FossilOrigin-Name: 8fea1166016c659ece83e0045bc348f478a9ba6a
2016-02-25 19:52:11 +00:00
drh d3e1af4aa0 Merge all the latest changes from trunk.
FossilOrigin-Name: b86590043e17705ada90562cf30f69b3e3ef65a4
2016-02-25 18:54:30 +00:00
drh eecb80e77e Query planner improvements: Take the LIMIT into account when estimated the
cost of an ORDER BY.  Avoid automatic indexes on query loops that are expected
to run less than twice.

FossilOrigin-Name: bf46179d4484376909dce40ffcc06fecb19b3544
2016-02-25 18:40:18 +00:00
drh 5a6f5ede81 Improvement on the previous check-in: disallow automatic indexes for any
loop that is expected to run less than twice.

FossilOrigin-Name: aab53a21894ba51d325fd8f8f4bb4163ece74391
2016-02-25 18:22:09 +00:00
drh 87eb919d05 Do not use an automatic index on an outer loop that only runs once.
FossilOrigin-Name: 5957e793414ff80ed01a7a67e70c3fd096a3f6e0
2016-02-25 18:03:38 +00:00
drh c3489bbf77 Take the LIMIT clause into account when estimating the cost of sorting.
FossilOrigin-Name: d491745cab951e0de70f1f79b7640ea8aff6e8bb
2016-02-25 16:04:59 +00:00
drh d8c22ac655 In the command-line shell: When the ".import" command is creating a new
table using column names from the first row of CSV input, make sure 
double-quotes in the name are properly escaped.

FossilOrigin-Name: 2e67a1c823c7003e7d2619c7d8b6db6ce046c527
2016-02-25 13:33:02 +00:00
mistachkin 77b7e2afb1 Improve readability and logging of the vsixtest script.
FossilOrigin-Name: 4fe7c4e90b7adbb1630b4aa15709968a1fcc7d83
2016-02-25 08:02:16 +00:00
mistachkin 6ae4d84fdf Enable all steps and add/update comments.
FossilOrigin-Name: 788f99f47f40be42f30d3f324983f39e84d8cfbb
2016-02-25 02:56:53 +00:00
mistachkin c32db469f4 More work. Install and build steps are now tested.
FossilOrigin-Name: 0ab74373bd37d48d6afa7aecb67885afcd3a85b1
2016-02-25 02:49:58 +00:00
mistachkin 5dad68d3c7 Fix typo. Improve interim debugging.
FossilOrigin-Name: e0029bdf20df90abd8b81e5b08133866665b1c87
2016-02-24 23:31:14 +00:00
mistachkin 78007b2f22 Test build all supported configurations and platforms during VSIX testing.
FossilOrigin-Name: cce40a0b8ee792482fb7031113eb190ad316d01a
2016-02-24 23:25:23 +00:00
mistachkin 7aa3ebee0f Initial work on an automated VSIX testing tool. Not working or tested yet.
FossilOrigin-Name: 496e4ac984b2548dd5f2f969cd34656b586cfcfe
2016-02-24 21:42:03 +00:00
dan f769cd61b2 Extend [3e9ed1ae] so that covering indexes on WITHOUT ROWID tables are also identified.
FossilOrigin-Name: e721975faa0925be4029330550ff2a9666041ff7
2016-02-24 20:16:28 +00:00
drh 6ad224e91e Change a char* to const char* in order to suppress some harmless
compiler warnings.

FossilOrigin-Name: 56f62e34ae9d5c7db07367f0007df258b2e76bd2
2016-02-24 19:57:11 +00:00
drh 87993148bd When an index complete covers a table, it can be used as a covering index
even if columns past the 63rd column are indexed and accessed.

FossilOrigin-Name: 3e9ed1aea43e8ce2eb74bb845ea2c05b5882e36e
2016-02-24 17:18:51 +00:00
dan a73086dd9e Fix a problem with handling identifiers that start with "x" if SQLITE_OMIT_BLOB_LITERAL is defined.
FossilOrigin-Name: b65217c69c59cbe9cd1494e2eb42ecf22c336399
2016-02-24 16:14:07 +00:00
drh e1dd060898 Identify indexes that complete cover their table.
FossilOrigin-Name: 71d488b599cbde817de369efac4412569a55b43d
2016-02-24 15:43:05 +00:00
drh 16b7dcc717 LSM1: Fix the integer key encoding so that negative keys are in numeric order.
FossilOrigin-Name: f92dc4187f6046fcb3ab63449efd7f3738594adc
2016-02-24 13:35:22 +00:00
drh 0e0089679f Add the SQLITE_BITMASK_TYPE compile-time option.
FossilOrigin-Name: 0064a8c77b2b048c71277d1cfd1ba3975b513b70
2016-02-23 16:28:34 +00:00
drh 6627fd6126 Merge trunk enhancements.
FossilOrigin-Name: fac4f4ecee21a460e527a0e2ffa24094b74e17dd
2016-02-23 01:41:35 +00:00
drh 078b99f806 Add support for (variable length) integer keys in LSM1.
FossilOrigin-Name: 32f3daec0a8084b258b2513c8025bc4d95a5d757
2016-02-23 01:37:24 +00:00
drh b052958657 Remove code not needed now that synchronous=OFF database files no longer
trigger the use of a master journal.

FossilOrigin-Name: aa9f4c622af191edbeb6a535942944f8c91f5c37
2016-02-22 23:44:42 +00:00
drh 600e888454 Avoid an unnecessary seek operation some corner-case skip-scan operations.
FossilOrigin-Name: 2a6003a937a210dfc279e393d3a0b49d1f3ac92e
2016-02-22 23:14:11 +00:00
drh 0bf2ad6a18 Clearer presentation of the logic. No functional changes.
FossilOrigin-Name: a3dcf6db76cc09bdfedb1bbeba3b359b77762cbe
2016-02-22 21:19:54 +00:00
drh a6d2f8eb1e Avoid an unnecessary seek operation on some corner-case skip-scans.
FossilOrigin-Name: 38e837e605076124b73235e1fd832838d9545cb2
2016-02-22 20:52:26 +00:00
drh b9626cfa70 Always use the sqlite3VdbeDeleteAuxdata() routine for clearing auxdata on
function parameter, rather than having a separate deleteAuxdataFromFrame()
for doing the job for trigger frames.

FossilOrigin-Name: 64386fa339adb91439da979d74062f67a6ec68fd
2016-02-22 16:04:31 +00:00
drh 8e6cf0a7c5 Avoid creating a master journal unless two or more databases in the
transaction can actually benefit from that master journal.

FossilOrigin-Name: 3ed1890612bd45bd9c72f670d2cbb0b8fbd35d92
2016-02-22 14:57:38 +00:00
drh e872d5133d Change magic numbers associated with synchronous settings to named constants.
FossilOrigin-Name: 9230ba6c01f4a550d92a0cbbf36dbe81af14fbfc
2016-02-22 13:23:16 +00:00
drh 7dc1918bbf Merge up to trunk.
FossilOrigin-Name: f9e5fb88a5a14b26e9ea6997f449d0913f27a494
2016-02-22 13:01:22 +00:00
dan 748e5cd6f9 Add an extra test case for the change in commit [c4295725].
FossilOrigin-Name: a48ac4c347813bd2b416b1cb06c3cbf1f4b3781a
2016-02-22 09:45:27 +00:00
mistachkin d149ea3a3a Further enhancements to the MSVC batch build tool.
FossilOrigin-Name: 06f1495f4b7465e3992f524f56d97847643a9895
2016-02-19 19:46:58 +00:00
mistachkin c03c2cf8b3 Use the arguments to NMAKE consistently in the MSVC batch build tool.
FossilOrigin-Name: 480e5049486b8b047f533d78b040daa47dd6b946
2016-02-19 19:29:44 +00:00
mistachkin 56362a5ab7 Enhance clean target in the MSVC makefiles.
FossilOrigin-Name: 66a9ad4a6df513f4c35c3d337d4e2e80cd38d586
2016-02-19 19:03:04 +00:00
dan 3200132add Use a separate list of aux-data structures for each trigger program at the VDBE level. Fix for [dc9b1c91].
FossilOrigin-Name: c4295725015d394f01b8563f47236e0890f1cc0d
2016-02-19 18:54:29 +00:00
drh b719e3a747 Enhance speedtest1 to display the particular version of SQLite under test.
FossilOrigin-Name: 0cb728c15c66f1bf09cc1e0731a95ba937c6c71c
2016-02-19 16:19:23 +00:00
drh e1ee002891 Fix a couple of harmless warnings generated by clang.
FossilOrigin-Name: a1a3ff1f53145c5a9fbf29398cf4a453729e71f0
2016-02-19 15:17:53 +00:00
drh b1f4efd20b Fix a harmless uninitialized variable access.
FossilOrigin-Name: 398522e686b34e7f82a62e62d8b0a0ea924de064
2016-02-19 14:20:46 +00:00
drh 81fd3497f4 Make sure WhereClause objects are fully initialized before use when
planning OR queries.

FossilOrigin-Name: 162053021795ff40c447498a76de4d31d58aa808
2016-02-19 14:10:44 +00:00
drh 9a1e85ee2e Fix (harmless) compiler warnings in some of the TCL-based test code.
FossilOrigin-Name: 7c26d2b47025edaa289bd4a383b5c1536482ec11
2016-02-19 13:29:52 +00:00
drh 469753d949 Add an SQLITE_DISABLE_INTRINSIC #ifdef to the sqlite3Put4Byte() function.
FossilOrigin-Name: ba9c6827d0890aaed9168c221fefbdbe89f4f9d3
2016-02-19 13:20:02 +00:00
drh 51381c208e Omit the unused yyzerominor constant.
FossilOrigin-Name: 60ad68a9f569d2446d76a6453be4fa1c4ed2cd93
2016-02-19 13:19:22 +00:00
dan 9e2cfad18a Add an "#ifndef SQLITE_AMALGAMATION" guard around a typedef in fts5_test_mi.c to avoid redefining "u32" if it is compiled as part of the amalgamation. Cherrypick of [f9c49ba1].
FossilOrigin-Name: ce0f1ed517e387ca6a687b805088d7c529cd257b
2016-02-19 10:19:43 +00:00
dan 92b859292d Add an "#ifndef SQLITE_AMALGAMATION" guard around a typedef in fts5_test_mi.c to avoid redefining "u32" if it is compiled as part of the amalgamation.
FossilOrigin-Name: f9c49ba1edf13cb8c48d73f1b2e3f80c46b3c030
2016-02-19 10:18:36 +00:00
mistachkin b0c99afeda Modify the MSVC batch build tool to support the MSVC autoconf Makefile.
FossilOrigin-Name: 72b10e5e7d2db436c7b03cc3735a2e9d0e53ab5d
2016-02-19 05:07:56 +00:00
mistachkin 9751730f83 Further improvements to the MSVC batch build tool.
FossilOrigin-Name: b9626b5954068ae2e7733dd14f906a1f6d7090a5
2016-02-19 00:48:23 +00:00
mistachkin b9076ba4c9 Further improvements to the MSVC batch build tool.
FossilOrigin-Name: 90dd6eb1fec22460473d670519d0e730bb37067d
2016-02-19 00:47:18 +00:00
mistachkin d8945d1707 Correct the install location for the UWP VSIX package.
FossilOrigin-Name: f74de325ffb01a1ca8ddd4f011188e38296c3402
2016-02-18 21:15:12 +00:00
mistachkin 45dc877f76 Correct the install location for the UWP VSIX package.
FossilOrigin-Name: b47d03027e973e3c8d77246a2d2100881f6a9bd2
2016-02-18 21:00:29 +00:00
dan 557d0383ff Remove SQLITE_TEST macros from fts5_test_mi.c. Add the SQLITE_FTS5_ENABLE_TEST_MI compile time symbol - to make it easier to create builds that include the fts5 matchinfo demo by default.
FossilOrigin-Name: e2ef6667772eeac6eee3aed5d0609c2a0ef5d8cf
2016-02-18 16:16:43 +00:00
drh b2bddbbc2d Avoid a potential buffer overrun if an SQL statement being parsed ends
with an illegal "!" token.  (This problem was detected by fuzzcheck
running under valgrind. The problem was introduced by check-in [9570b6b43df3].)

FossilOrigin-Name: 2a8d97e7c8976df0312e1294e8c1da8b15686654
2016-02-18 14:49:28 +00:00
drh 4c9d22819f Improved handling of the -v option on the fuzzcheck test program.
FossilOrigin-Name: c8cd7804dc905b2b20cd7c0192bcfaceaaa7e2a8
2016-02-18 14:03:15 +00:00
dan a0c2d3c155 Remove an unnecessary "include <tcl.h>" line from fts5_test_mi.c.
FossilOrigin-Name: 31d8b69e9e0747e573516570bfe2770384e99134
2016-02-18 13:32:34 +00:00
drh 5b081d8a28 Add extra API armor on the sqlite3_bind_blob() interface.
FossilOrigin-Name: 80de1ad5eb4c3839756b6467d5b8195b4abfb1f8
2016-02-18 01:29:12 +00:00
drh 7f149e5173 When VDBE opcodes fail, they cause an immediate exit from the loop, rather
than depending on the rc==SQLITE_OK test at the top of the loop.  This is
faster and smaller.

FossilOrigin-Name: 24c7151c1aabeaffcb8bb5836404e70a3ec4681b
2016-02-17 20:47:24 +00:00
drh 9467abf3dd Fix up all VDBE opcodes so that they cause an immediate exit on any kind of
error, and thereby eliminate the need to test "rc" at the top of the loop.
Resulting code is a little smaller and faster.

FossilOrigin-Name: a444633a827642bcf4d02a461e7e5f66769d39fd
2016-02-17 18:44:11 +00:00
drh b5a55ce77d Bump the version number to 3.12.0.
FossilOrigin-Name: c17d7276b8c114df5fe6e9ea14d59758443c281b
2016-02-17 15:01:18 +00:00
dan 5e29f38d2c Remove the "#ifdef SQLITE_TEST" condition from fts5_test_mi.c. Update fts5_main.c so that if SQLITE_FTS5_TEST_MI is defined when it is built the fts5_test_mi.c entry point is automatically called. This makes it easier to build versions of fts5 that include the matchinfo() demo by default.
FossilOrigin-Name: 87e6e225aea3a4d10476d16eab4a6403a4a128c9
2016-02-17 14:48:26 +00:00
dan 87d6b35541 Improve test coverage of demo code in fts5_test_mi.c.
FossilOrigin-Name: 8a78050dc0e374a0df0f29716df60250e2c4b4f7
2016-02-17 14:11:06 +00:00
drh b7997fe3a9 Enhance Lemon to generate more compact and efficient code for yy_reduce().
Update the main SQL grammar to take advantage of the new capabilities.

FossilOrigin-Name: 53fd040c98d9647ea135d43c493777bf8da4aebd
2016-02-17 13:24:12 +00:00
drh 43303de97e More agressive use of /*A-overwrites-X*/ in the parser. Fix an off-by-one
error in parser stack overflow detection.

FossilOrigin-Name: 417e777701bbf4bd67626d4ca3bc2c5d847f6cd0
2016-02-17 12:34:03 +00:00
drh 0ccbc64fd6 Documentation typo on sqlite3_wal_hook(). No changes to code.
FossilOrigin-Name: fc2043ebaa3f106529500164936bb82f9b921b1c
2016-02-17 11:13:20 +00:00
drh cf82f0d3d2 Enhance Lemon so that if reduce code contains a comment of the form
"/*A-overwrites-X*/" then a LHS label A is allowed to overwrite the
RHS label X.

FossilOrigin-Name: 5cfe9545d478a2c500083613dd20e14b2ffce645
2016-02-17 04:33:10 +00:00
drh dabd04c656 Further improvements to the Lemon-generated code for yy_reduce().
FossilOrigin-Name: ef95a7d6490e33a9af4bc7b4b622de7328742ca7
2016-02-17 01:46:19 +00:00
drh 4dd0d3f819 In Lemon, add the ability for the left-most RHS label to be the same as the
LHS label, causing the LHS values to be written directly into the stack.

FossilOrigin-Name: 4bb94c7c4c3cb3ccad72c2451d88684130dde845
2016-02-17 01:18:33 +00:00
drh 45f31be85d Experimental changes to Lemon for improved parser performance.
FossilOrigin-Name: a65d583ce97b8c08157268bd054479cda3957a94
2016-02-16 21:19:49 +00:00
drh 30c14728b4 Minor simplification to the tokenizer. Slightly smaller and faster.
FossilOrigin-Name: 9570b6b43df3bc5ce314cded20bca8be9e968efe
2016-02-16 13:04:19 +00:00
drh dab943cf3d Improve the Lemon parser template (lempar.c) so that it avoids unnecessary
work when the grammer defines YYNOERRORRECOVERY (as SQLite does).  Slightly
smaller and faster code results.

FossilOrigin-Name: 9235b0cf6a37712ae9e5deeb1e5ee064dd5511fa
2016-02-16 01:01:43 +00:00
drh 7ff89807e0 Fix a harmless compiler warning in FTS5.
FossilOrigin-Name: e52c90758c53cbb0f74e0d8582e4c3c1bee04150
2016-02-15 23:46:36 +00:00
mistachkin b71aef3461 Readability improvements for winRandomness.
FossilOrigin-Name: 1640f814c7a5210f08c81e52e5a3fb89ac26f4d4
2016-02-15 22:37:18 +00:00
mistachkin 0ead47d1c7 Fix comment. No changes to code.
FossilOrigin-Name: 2e1f2eff27e25280fe626c07b6260b0a7aa903d3
2016-02-15 22:28:50 +00:00
mistachkin bfc9b3f45c Revise compiler checks for the rand_s() function.
FossilOrigin-Name: 287f508dd6abc1b9ffdbec6a685ebe79eeac992b
2016-02-15 22:01:24 +00:00
drh 51d5ed97f5 On windows systems when rand_s() is available, use it to obtain additional
seed material in winRandomness().

FossilOrigin-Name: 139081bef9f63c3ebbe9e992408597b1349bdf37
2016-02-15 21:31:51 +00:00
drh 8eb3790a8d Improved entropy gathering for the implementation of winRandomness().
FossilOrigin-Name: fea3705e7750d276a8c8300b7a82dfae2d5979c0
2016-02-15 20:41:56 +00:00
drh 4b7b1c9c12 Add working -q and --help options to testfixture.
FossilOrigin-Name: 404494e52b6385671ccde1c83b7b868986645536
2016-02-15 19:38:17 +00:00
drh 3719d10d11 In the tool/warning.sh script, disable Android-specific compiler warning tests
when not running on Linux.

FossilOrigin-Name: 153f01a821e9844d0a2e418eb83c60f6c7695c8d
2016-02-15 18:58:37 +00:00
drh e683b89880 Fix harmless compiler warnings previously seen in 64-bit MSVC builds.
FossilOrigin-Name: 7026246300392a83cc23817dbc54c2c66bf1f2b3
2016-02-15 18:47:26 +00:00
drh 32c49904a6 Add the SQLITE_NOMEM_BKPT macro to enhance the ability to debug OOM errors.
Only effective with compiling with SQLITE_DEBUG.

FossilOrigin-Name: 9b3454762d142113f5923d754ca6bd2edefbd362
2016-02-15 18:15:15 +00:00
drh 66acf297fd Minor code simplifications.
FossilOrigin-Name: c3b38efd50c3c07b6dee5dea4c1f95b37d1c0994
2016-02-15 18:02:13 +00:00
drh 3bff397248 Make the application-defined SQL function logic more compact and faster,
especially faster for the case where an application defines thousands of
new SQL functions.

FossilOrigin-Name: 7d49ed32a7262ec95d72ce520ab75402633386a1
2016-02-15 17:56:35 +00:00
drh 7f219fad58 Merge 3.11.0 changes.
FossilOrigin-Name: 631023dd9aa19cd8d92d712941d58e7148821995
2016-02-15 17:39:10 +00:00
drh 195c8d5eba Version 3.11.0
FossilOrigin-Name: 3d862f207e3adc00f78066799ac5a8c282430a5f
2016-02-15 17:29:24 +00:00
drh 8e0cea1a5d Make sure the codec is invoked when overwriting existing frames of the
WAL file.  Yikes!

FossilOrigin-Name: f694e60a79024967a3f4574e3928f0b28589d381
2016-02-15 15:06:47 +00:00
drh 80738d9c3e Improvements to the application-defined function mechanism so that it is
more compact and runs faster, especially when the application defines
thousands of new SQL functions.

FossilOrigin-Name: 3201fbcc5105d23132e6b8b7ac825e66af4f8a39
2016-02-15 00:34:16 +00:00
mistachkin 8fd8413aaa Update a comment.
FossilOrigin-Name: e9753d9a2c1269050f886e6cb9bc9cba0a8df6ce
2016-02-14 00:14:35 +00:00
mistachkin fad3039c51 Enhance ability to debug out-of-memory errors.
FossilOrigin-Name: 6a9c4a3ebfb7cc0738ef6634440ccab44a21ff28
2016-02-13 23:43:46 +00:00
drh e75a9eb9bb Provide Sqlite3_SafeInit() and Sqlite3_SafeUnload() entry points on the TCL
interface, but have the always return TCL_ERROR, because the non-standard 
TCL builds on Macs require this.

FossilOrigin-Name: 37ec3015ec95035d31e3672f520908a0d36c9d67
2016-02-13 18:54:10 +00:00
dan a66e386225 Fix another test problem in sessionfault.test.
FossilOrigin-Name: f6d1cf79437f892220e93635c377513160ee7fd7
2016-02-13 15:08:25 +00:00
drh 50d348b1e1 Harden sqlite3session_delete() against trying to delete a session that
is not currently on the session list.

FossilOrigin-Name: 6c2d34df76fb7823f307c11a1135ab30674421a9
2016-02-13 14:45:56 +00:00
dan 6fee795885 Fix a problem in sessionfault.test causing it to segfault following a test failure. This commit does not fix the actual test failure - just the subsequent segfault.
FossilOrigin-Name: 582b2ae77d65b1e142ceb5774f37b0aaa3851378
2016-02-13 14:39:46 +00:00
drh d8b7d6e44c Merge the changes for the 3.11.0 release candidate from trunk.
FossilOrigin-Name: 4d7a802e73ef0352f840bc8d74c560afb7666ff7
2016-02-13 14:07:56 +00:00
dan 53ff9c2972 Fix a potential buffer overread provoked by invalid utf-8 in fts5.
FossilOrigin-Name: a049fbbde5da2e43d41aa8c2b41f9eb21507ac76
2016-02-12 18:48:09 +00:00
dan f2d328fa25 Fix a fairly obscure buffer overread in fts5.
FossilOrigin-Name: 130580207ab5cee762b2893808acef7c8afad027
2016-02-12 17:56:27 +00:00
drh aa622c1f4f Fix a documentation typo. No changes to code.
FossilOrigin-Name: d9c985878cf7c74a79ccdb9cf94a2d48fdde3e6f
2016-02-12 17:30:39 +00:00
drh cd42352526 Enhance mptester so that it takes great care to delete its test database
prior to start-up, including checking the return code from unlink() and
retrying after a delay if unlink() fails.  Hopefully this will clear 
intermittant startup problems on Windows.

FossilOrigin-Name: 6ea84ec1e02f0a48953bc758027ab7148529c36e
2016-02-12 17:27:32 +00:00
mistachkin a819aed880 Naming updates for Universal Windows Platform.
FossilOrigin-Name: 717c1fc41a2246e27b324a4071073c286bac4efc
2016-02-12 05:19:29 +00:00
drh f981093760 Remove an unused parameter from whereSortingCost().
FossilOrigin-Name: b5d771991686bf86a679b7dff9f16301a5029c8b
2016-02-12 00:13:38 +00:00
drh 4553f6ea91 Automatically disable FTS3 and FTS4 when building with SQLITE_OMIT_VIRTUALTABLE.
FossilOrigin-Name: 0beb32d20d8dd698138cdb2de6b6056de176754d
2016-02-11 22:41:04 +00:00
mistachkin 30470c5162 Enhance the MSVC makefile to enable building 'testfixture' fully from source code.
FossilOrigin-Name: f183e05990608d1a4002fa8a02c2d2eea6bc94b6
2016-02-11 21:59:02 +00:00
drh c50d5908b4 Remove the unexplained extra 3.0 cost factor for the B-tree sorting that is
done to implement DISTINCT in the absence of an index to help.

FossilOrigin-Name: 52571991fcfa2629e8a8354e0c9a62e749a092bf
2016-02-11 21:55:23 +00:00
drh 5d2e2f1267 Remove the unused fts5BlobCompare() routine.
FossilOrigin-Name: defc762dd11144402abd591278819768a080d5ea
2016-02-11 21:53:57 +00:00
mistachkin e2eb259fce Prevent 'expanded command line X too long' errors during the batch 'for' loops used for copying files.
FossilOrigin-Name: 67ee9b5af10a8b57a37f19ac040e49fdfcec4145
2016-02-11 21:38:05 +00:00
mistachkin c04c54b842 Enhance the MSVC makefile to enable building 'testfixture' fully from source code.
FossilOrigin-Name: 54ff3a26bc45a1c3c0690119e8fd00b02e2a16ba
2016-02-11 21:28:16 +00:00
dan df9c59f74d Fix another unused variable warning in fts5 code.
FossilOrigin-Name: 61b4c120540afd80a4021b0d3990f13acc38a059
2016-02-11 18:18:33 +00:00
dan 2a44b3d877 Avoid a buffer overread when reading a corrupt fts5 structure record.
FossilOrigin-Name: facbc424e555061135aced7b134bf6c19f54e484
2016-02-11 18:08:38 +00:00
dan 22e8356368 Handle parser stack overflow when parsing fts5 query expressions. Fix some compiler warnings in fts5 code.
FossilOrigin-Name: bc3f7900d5a06829d123814a5ac7b951bcfc1560
2016-02-11 17:01:32 +00:00
drh df3a907ecc Add JSON1 and FTS5 to the set of extensions subject to close compiler warning
analysis.  Fix some warnings in each.   More (harmless) warnings still exist
in FTS5.

FossilOrigin-Name: cfe2eb88b504f5e9b1351022036641b1ac4c3e78
2016-02-11 15:37:18 +00:00
drh 1a606f8246 Merge enhancements and fixes from trunk.
FossilOrigin-Name: f040a5bb62f3473fba6450c97c68f538d1df21ef
2016-02-09 15:44:18 +00:00
drh 0ac7cfaf99 Merge enhancements from trunk.
FossilOrigin-Name: a533608cb0de3cbc1e28a794aab99864b8c249f4
2016-02-05 14:15:34 +00:00
drh 33c1eb6477 Merge all recent enhancements from trunk.
FossilOrigin-Name: f3f9200115caf4b356f90ec97c351d1afbcb9bf6
2016-02-02 02:22:30 +00:00
mistachkin 6cc16fc070 Cleanup localtime() support for Windows CE.
FossilOrigin-Name: 39759a553208d8ef72964bdd539a0883e1d99cf6
2016-01-23 01:54:15 +00:00
dan 2beb2c390b Disable the RESTRICT foreign key action if "PRAGMA defer_foreign_keys" is set.
FossilOrigin-Name: 82470d1c3a41221c78bcdd402b2219c4c21c43af
2016-01-21 17:25:56 +00:00
drh e1ed0bb607 Merge the LIKE-operator bug fix from trunk.
FossilOrigin-Name: 36cb3d6e274a06a78693ca506feaad0b14bde11d
2016-01-20 16:02:48 +00:00
drh 20f272c96f Merge recent enhancements from trunk.
FossilOrigin-Name: 327af5f644a49b2f41d5456958f9d61a2b704e1c
2016-01-20 11:33:37 +00:00
drh cb75bff3f7 Merge the latest fixes and enhancements from trunk.
FossilOrigin-Name: 007e5c6df60f9743ac6914332f59925e4a7a861c
2016-01-14 14:48:17 +00:00
drh 604ce70448 Merge recent enhancements, and especially the WAL overwrite change, from trunk.
FossilOrigin-Name: c4a858b228a164be2f89f5b01833f0b5e0d7735b
2016-01-11 13:10:41 +00:00
mistachkin e787cbbe2a Merge updates from trunk.
FossilOrigin-Name: 5cbab63756f6f276996f39d16d70b178581f63cd
2016-01-06 20:50:02 +00:00
drh f56a2a07ff Merge changes for version 3.10.0.
FossilOrigin-Name: fa4705c91f9650ecd7ec967dbbf0028aabd8a98c
2016-01-06 15:14:53 +00:00
drh 721f26dc9a Merge in last-minute patches for the 3.10.0 beta.
FossilOrigin-Name: c785cd7813e4ef6d6f2cb362a0f822713db6bcea
2016-01-04 19:02:47 +00:00
mistachkin 710b33b999 Alternative to [76f5efa6], move definition of utf8_printf up.
FossilOrigin-Name: 54c5522dda239cb9775709495ed7eb56a5dd8e11
2016-01-03 18:59:28 +00:00
drh 8de1d77c60 Merge the latest enhancements from trunk.
FossilOrigin-Name: c0be246a740c8f33a7c07e1414688364dee56ece
2016-01-01 13:25:06 +00:00
drh 173b60999e Merge recent enhancements from trunk.
FossilOrigin-Name: f6c9273cab877b8b6b327250195f3392393d060a
2015-12-16 19:47:54 +00:00
drh 86151e8905 Avoid unnecessary work inside of verifyDbFile() in the unix VFS.
FossilOrigin-Name: f3c0579e931799088e9a83757e25bae229120697
2015-12-08 14:37:16 +00:00
drh 1bb15fc973 Merge recent enhancements from trunk.
FossilOrigin-Name: d1a1278d7f3306536dc9cbd8fb300898f1e373e8
2015-12-02 20:40:26 +00:00
drh 769dc6e2a2 Merge the latest enhancements from trunk.
FossilOrigin-Name: 7d6cfc79e7e5534ebacd980479917bc528a638f7
2015-11-19 19:40:40 +00:00
drh 99a1ab7ebc Merge the latest enhancements from trunk.
FossilOrigin-Name: 8aede091c4740511d11ea14da253fe39bbfe75a6
2015-11-19 19:31:33 +00:00
drh c83ef77bb9 Work toward more flexible typing for keys and values.
FossilOrigin-Name: 5c79f53131a7ab3c83f49e35a5021a6cdb2518fc
2015-11-19 19:27:07 +00:00
drh a87cc18948 Basic functionality is now working.
FossilOrigin-Name: aa129c51ecf5c917cfac30be330886f8a10f49e1
2015-11-17 02:23:09 +00:00
drh eb8e7adb16 The virtual table compiles but does not work and is missing many features.
This is an incremental check-in.

FossilOrigin-Name: a32849d6bf66462d1f511714a00f24519d7b7079
2015-11-17 00:15:21 +00:00
drh a0b7ffb184 Import the LSM code from SQLite4 for use in an experimental virtual table.
NB: This is a speculative experiment and could easily result in a dead-end
branch.

FossilOrigin-Name: 3d930501a2acb7f20932cfeb4e3fe308b4569cd6
2015-11-16 16:00:22 +00:00
drh 98a0e0083f Merge recent enhancements and bug fixes from trunk.
FossilOrigin-Name: 78bc42e664e9fa9ee21ad9762c369f291fcdf5db
2015-11-07 01:33:30 +00:00
drh e2ef7dc05b Merge all recent enhancements and fixes from trunk.
FossilOrigin-Name: 0546d1cd1a3402890edade7970c269cc3f17bc98
2015-11-02 18:57:26 +00:00
drh d286b9fb7d Merge all the latest enhancements from trunk.
FossilOrigin-Name: 395a153ff7b3c7a72f3d02b6fe76d72383f4e480
2015-10-30 16:50:00 +00:00
drh 5db9901479 Merge the version 3.9.1 updates.
FossilOrigin-Name: 2bbb9595ccc4fdd854bf16a1efcddbc42a7ff14e
2015-10-16 20:20:08 +00:00
drh 2c22b5259e Merge in the final few changes before the 3.9.0 release.
FossilOrigin-Name: e1afdbb50120f7d058b25538c6cb8ce3bb34993d
2015-10-13 20:42:16 +00:00
drh 4918480252 Pull in the latest 3.9.0 tweaks from trunk.
FossilOrigin-Name: ed174ccf0ae615647ba026fed649d26dc9a98640
2015-10-10 20:35:10 +00:00
drh 973bc6f1a8 Merge the version 3.9.0 changes and the incorporation of JSON1 and FTS5
into the amalgamation from trunk.

FossilOrigin-Name: c1d96fb654b2c0f66d586aa39d80ea0468186690
2015-10-09 15:29:24 +00:00
drh 2d000eafbe Merge the 3.8.12 beta changes from trunk.
FossilOrigin-Name: 35b1b8d4b97715030700e37b292bb4f1bb3f44d6
2015-10-08 14:55:30 +00:00
dan 6c39e6a800 Changes to the sesssions module ensure that tables appear within changesets and patchsets in the same order that they were attached to the sessions object.
FossilOrigin-Name: 7695890230dc1e0c6db9b7aa509db2039c7f7239
2015-10-01 16:35:57 +00:00
drh 32af5eda6a Merge recent enhancements from trunk, and especially the fix for
ticket [1b266395d6bc10].

FossilOrigin-Name: b2face9aa95ade96a5666c70b6b31064c1ad0977
2015-09-30 14:50:39 +00:00
drh 9ec0efd946 Merge all the latest trunk enhancements into the sessions branch.
FossilOrigin-Name: c91065f8edb1e54076791716fc20d3fcfe3070dc
2015-09-24 14:26:51 +00:00
dan 438b881540 Merge the latest trunk enhancements with this branch.
FossilOrigin-Name: b7469c44be77358e02892a3abc696f7caa0dcd3b
2015-09-15 15:55:15 +00:00
drh 91762f2d18 Merge the latest trunk enhancements.
FossilOrigin-Name: 22ce9218fb2bb56cc5dd4e32077a16f669250d5f
2015-09-14 10:47:29 +00:00
drh 6b86881788 Merge recent trunk enhancements.
FossilOrigin-Name: 6a513c05850949900f396c7a61accb97cc6d2af5
2015-09-03 14:48:25 +00:00
drh 5969c657ae Merge recent enhancements from trunk.
FossilOrigin-Name: cb77236673e30af1e8749d984dedecc8f901b255
2015-09-01 18:52:35 +00:00
drh 89a10b2d53 Merge recent trunk enhancements, include table-valued functions.
FossilOrigin-Name: e9196d566690de0e9815f8cd85be7844322b5a79
2015-08-20 23:54:25 +00:00
drh 87c44ef2f7 Merge test improvements and minor fixes from trunk.
FossilOrigin-Name: 0298a9a780695b666e7c683700d9f2f889d6f826
2015-07-24 22:21:01 +00:00
drh 244c8d7077 Merge all changes in the latest 3.8.11 beta into the sessions branch.
Changes include the rename of OTA to RBU, the WITHOUT-ROWID-OR-Skipscan fix,
and improvements to pcache1.

FossilOrigin-Name: 7f0ee77062d2fcb014942c7c62c163ccc801f21b
2015-07-23 21:59:58 +00:00
drh 38151adfe2 Merge trunk changes, including the addition of FTS5 and pcache1 performance
enhancements.

FossilOrigin-Name: db4cbefb8674c6cfff27c1e918741de1885c845c
2015-07-14 15:39:22 +00:00
drh bed6de557a Merge in the latest enhancements from trunks, especially the use of
_byteswap_ulong() and similar intrinsics on MSVC.

FossilOrigin-Name: 85ca4409bdca7aee801e9fba1c49a87fabbf2064
2015-07-02 18:47:12 +00:00
drh 59b4bd4840 Merge all the latest enhancements from trunk. This merge include FTS5
and a number of notable performance enhancements.

FossilOrigin-Name: 39936b33b0668aad81aa574d4d74c92b0ddd218a
2015-06-30 16:29:59 +00:00
drh be7d497836 Merge all the latest enhancements from trunk.
FossilOrigin-Name: 924f471291dfd458307a11819aa640cc1a02ac63
2015-06-25 15:44:49 +00:00
drh 5600329bc0 Merge all recent enhancements and fixes from trunk.
FossilOrigin-Name: 199bfb67fdf642cca6cd5d460fa4dc602b94837a
2015-06-17 18:18:51 +00:00
drh 60c97e6aa8 Merge recent trunk enhancements and fixes.
FossilOrigin-Name: c39cb0e2571f58c87053de009e2c135d71b2c3af
2015-06-11 18:01:29 +00:00
dan 5898ad6954 Add the sqlite3changegroup_xxx() APIs to the sessions module. For combining multiple changesets or patchsets.
FossilOrigin-Name: 0c1a901cd60e557fc676b97625243163dfe9be9d
2015-06-11 17:26:10 +00:00
dan 807547038d Add the "finish_test" command to the end of new test script sessionE.test.
FossilOrigin-Name: fb3914070791c84b5f323b7359ac845246d8a844
2015-06-02 09:20:46 +00:00
dan 6dc29e60c8 Modify the sessions module to ignore all operations on tables with no primary keys as documented.
FossilOrigin-Name: bdaf9575cd9ebb33dc5da4062a84bca79e7b0fec
2015-06-02 09:19:22 +00:00
drh ad2c1dd782 Import recent enhancements from trunk.
FossilOrigin-Name: 54bec164ebeaf62d783352b3c4d0de8845394091
2015-05-29 19:04:58 +00:00
drh eafdd67242 Merge bug fixes from trunk.
FossilOrigin-Name: 519054bb72e8f8977b11161c81b0e96ba7bca589
2015-05-22 23:51:30 +00:00
drh 893ca50d0f Merge enhancements from trunk, including the new sqlite3_value_dup() API and
the addition of the apSqlParam field in the sqlite3_rtree_query_info object
of R-Tree.

FossilOrigin-Name: cdc0ca6fb36e787b981fb544a27c6df838f85704
2015-05-22 23:26:18 +00:00
drh dbbd816059 Merge the Makefile.msc fix and the compiler warning fix from trunk. Also
fix another compiler warning in sqlite3session_diff().

FossilOrigin-Name: 7530e1bf557083ef91447a02f05b019dbe60fa70
2015-05-19 23:04:26 +00:00
drh adf3bf5811 Merge recent trunk changes, include the R-Tree enhancement that allows
8-byte BLOB arguments to geometry functions, and the fix for the TEXT affinity
problem that could cause corrupt indexes.

FossilOrigin-Name: 0a0de8b72ca24f287f9c84766a14e12ea4564b59
2015-05-19 22:42:23 +00:00
drh 5f9a57fc49 Merge in the IS-operator enhancements and other recent changes from trunk.
FossilOrigin-Name: 4f9229445c293b39c80b2a662901f608c85b36ef
2015-05-14 15:17:20 +00:00
drh 060c3ffc71 Merge in the 3.8.10 release changes.
FossilOrigin-Name: 0404ef885e47f0df1daa04feb28452beb4d32a35
2015-05-07 12:29:54 +00:00
drh d689fd3a92 Merge all trunk enhancements and fixes into the sessions branch.
FossilOrigin-Name: de7083cfe2bb00b689bec6bcc75e994f564ceda6
2015-05-05 17:12:27 +00:00
dan b9db909952 Modify the sqlite3session_diff() API so that tables with no PRIMARY KEYs are ignored. This matches the other sessions APIs. Also change sqlite3session_diff() so that it returns SQLITE_SCHEMA, instead of SQLITE_ERROR, if the tables being compared do not have compatible schemas.
FossilOrigin-Name: aada0ad08e3baa10d14d1f3393183110289e068e
2015-04-23 17:22:49 +00:00
dan 4cc923e3e3 Fix the error message returned by sqlite3session_diff() for tables with no PRIMARY KEY.
FossilOrigin-Name: 4d34a3d40da210bebb2a2e6dff094f9a39c92798
2015-04-23 15:03:14 +00:00
dan dd009f839c Fix a performance problem in sqlite3session_diff().
FossilOrigin-Name: ea400eca314d81761fe5c0e329b906c045f0dfe4
2015-04-23 14:40:17 +00:00
drh 6ea60c7c53 Merge the latest trunk enhancements and fixes into the sessions branch.
FossilOrigin-Name: 4e5f17d189eb0578a544c21fc150f9e2ee3428e3
2015-04-23 13:49:53 +00:00
drh 850b0d031d Merge all recent trunk enhancements and fixes into the sessions branch.
FossilOrigin-Name: b8ef1cdee307441e8d97b4bfc21f8547692eea9f
2015-04-20 01:32:53 +00:00
dan 10dc553c13 Hold the database mutex for the duration of sqlite3session_diff().
FossilOrigin-Name: 6f33050115562833c43da3c99dd37aeb0bf966b6
2015-04-17 11:31:08 +00:00
drh 92f283c0d4 Fix a stray backslash character in a printf format string in
sessionDiffFindModified()

FossilOrigin-Name: abb192a1d79388d4717f459b91e34f9c035935f2
2015-04-16 13:52:03 +00:00
drh ff363ee121 Merge all recent trunk fixes and enhancements into the sessions branch.
FossilOrigin-Name: e65e65f9bc9b4bf5c9dd6e3a77a0d5f03c40e006
2015-04-15 14:14:38 +00:00
drh df3c171881 Merge all recent trunk enhancements into the sessions branch.
FossilOrigin-Name: 5f14f34f072921e229bc20a5185c0cdb3f464c04
2015-04-12 01:33:37 +00:00
dan 58bd114a6f Merge the sessions-diff branch with this one.
FossilOrigin-Name: 805baa57e5d2e97dccddc08eb72f2564df4802e8
2015-04-11 17:09:36 +00:00
dan 730bb805a8 Updates to comments describing the changeset and patchset formats.
FossilOrigin-Name: 5342f721e878b52f207731ea57411f3669ae3f3f
2015-04-09 19:19:22 +00:00
dan 3cc89d9567 Fix problems in the sessions module causing it to produce spurious SQLITE_NOMEM errors when handling SQL text or blob values zero bytes in size.
FossilOrigin-Name: b9459d5980c6249a5c1bc5ea72cb4f3b1ba0e433
2015-04-08 16:43:31 +00:00
dan cf8e91442d Add experimental API sqlite3session_diff().
FossilOrigin-Name: c4340b2ea2115ad97dcac036f9034e132ab789e5
2015-04-08 16:01:12 +00:00
drh 159e6b304c Merge printf() width and precision overflow fixes from trunk.
FossilOrigin-Name: aeca95ac77f6f320a916f7e3c5a7a588ef4a20c8
2015-04-07 23:10:44 +00:00
drh af76530fb0 Merge obscure problem fixes from trunk.
FossilOrigin-Name: 271c110bcf5bf2ea7e113dd01dec876a08e3c047
2015-04-06 12:08:24 +00:00
drh edb3e433ba Merge recent enhancements from trunk.
FossilOrigin-Name: aea439bdc6d4d3a8568423171abf381843188826
2015-04-01 16:39:06 +00:00
drh 2a07f5ecec Merge all recent trunk enhancements and fixes into the sessions branch.
FossilOrigin-Name: df94e61f93da390cb75c48975c50e9d62096ea0b
2015-03-31 00:10:21 +00:00
drh edea911945 Merge all recent trunk enhancements into the sessions branch.
FossilOrigin-Name: 54aaa6f29ad1bf84148c2403eed77e8311f68d66
2015-03-24 19:02:13 +00:00
drh 099006de44 Merge all recent trunk enhancements into the sessions branch.
FossilOrigin-Name: 1d1c57c3566d86cd44f146688b620131b3b57e52
2015-03-17 18:54:10 +00:00
drh c11a172d5f Merge recent trunk enhancements into the sessions branch.
FossilOrigin-Name: 68c8937e83b770d5ec6b1855c1bde81057c11b5f
2015-03-09 13:07:45 +00:00
drh 2f82071478 Merge the latest trunk fixes into the sessions branch.
FossilOrigin-Name: 131a2d3116436ca6304777c9c5d46b7c4051d949
2015-02-25 14:02:53 +00:00
drh 878acb32ef Merge all recent trunk changes into the sessions branch.
FossilOrigin-Name: f36bb5fa5c5e3430808fe35d58f45559a216d341
2015-02-21 15:13:50 +00:00
drh 1ee4a2dd88 Merge all the latest enhancements from trunk.
FossilOrigin-Name: ae7eef117f28a5dae7a05805f2d31ac532a9fcc5
2015-02-06 15:40:32 +00:00
drh 9c2e9f7afa Merge all 3.8.8 changes into the sessions branch.
FossilOrigin-Name: bebd131a3554ea95921e6edbc8aa36674ef25fe3
2015-01-16 12:44:52 +00:00
drh 7a20f698df Merge trunk 3.8.8 beta changes into the sessions branch
FossilOrigin-Name: 0ba124540b5b2a9ceda0f4f4a46e6be54edad813
2015-01-14 17:16:23 +00:00
drh f7af7a17b9 Merge recent enhancements from trunk, including test scripts enhancements and
the removal of limits on the number of terms in a VALUES clause.

FossilOrigin-Name: 5a2dec55bfadc328b430a5231a037b37831a5530
2015-01-08 20:06:06 +00:00
drh c8ae34dc6a Merge the fix to PRAGMA data_version and testing improvements from trunk.
FossilOrigin-Name: 86e39123c1bca457672bc63eff00a823745077e5
2014-12-31 14:27:29 +00:00
drh b5a4387097 Merge the PRAGMA data_version redefinition and other fixes from trunk.
FossilOrigin-Name: 315243e49d30abd0eb31e3795ecf492aee179e4b
2014-12-22 18:48:48 +00:00
drh e465ac29cd Merge the PRAGMA data_version command and the enhancements to FK query planning
from trunk into the sessions branch.

FossilOrigin-Name: d4f82af0a4a9db222e3405cff05c41157e7bd5d9
2014-12-20 14:58:32 +00:00
drh 032f461900 Merge threading fixes from trunk into the sessions branch.
FossilOrigin-Name: 9817a2864eebe2dc90ce505fe0faa8b069ff48ff
2014-12-16 01:05:38 +00:00
drh 52fa3a89f6 Merge the KeyInfo cache mutex fix from trunk.
FossilOrigin-Name: f0940c73bd13cb49a3d229ce2517736324392cfb
2014-12-09 14:54:26 +00:00
drh dd2921ec1d Merge the fix for the shared-cache KeyInfo cache bug from trunk.
FossilOrigin-Name: 5a73da6a3083926a3dafd28c0604122296dc9184
2014-12-05 20:05:10 +00:00
drh c0d33d20f7 Import from trunk the fix the "test" target on the autoconf and MSVC makefiles
and some minor compiler warning fixes.

FossilOrigin-Name: c9f20eb2fbba0868df85ebb98877f9bb969be8a4
2014-12-05 00:41:17 +00:00
drh 34794c3d0c Incorporate the SQLITE_CHECKPOINT_TRUNCATE enhancement and a couple of
obscure bug fixes from trunk.

FossilOrigin-Name: 34ffa3b3c002b0e87d8382ad76e87dbaec0b2bc6
2014-12-04 23:35:08 +00:00
drh 6e09b16852 Merge all recent fixes and enhancements from trunk into sessions.
FossilOrigin-Name: 2617d93713d9f4cf907ab2e7baef6a0f74f7198e
2014-12-02 16:31:01 +00:00
drh 04e8a58669 Merge recent trunk enhancements, including the read-after-ROLLBACK change
and the addition of sqlite3_stmt_scanstatus() support, as well as various
minor bug fixes.

FossilOrigin-Name: f09055f3c4348264c7336f90646375f0d98b061e
2014-11-18 21:20:57 +00:00
drh ca3e10ea37 Merge recent trunk enhancements, and in particular the improvements to
the b-tree balancing logic, into the sessions branch.

FossilOrigin-Name: 28b044a51215a3f64dafb2cf3b6cb7d2029580ef
2014-10-31 14:53:32 +00:00
drh bc2866ca7a Merge all version 3.8.7 updates from trunk.
FossilOrigin-Name: f4de9e07be3819db222317725e62ea997cd22a20
2014-10-17 11:53:22 +00:00
dan abae0c4f1d Fix a problem causing sqlite3changeset_concat() to fail to detect attempts to concatenate patchsets which changesets.
FossilOrigin-Name: 236704a9d1551a50a55bd6e0b6473191a7a7dd21
2014-10-15 20:02:21 +00:00
dan f11b256b0b Merge latest trunk changes with this branch.
FossilOrigin-Name: 1b2824f1d11ac336779372e322aecfb36fb2a31d
2014-10-15 19:37:13 +00:00
drh 92fe38ece5 Merge recent trunk micro-optimizations and the DESC index GROUP BY ORDER BY
bug fix into the sessions branch.

FossilOrigin-Name: 83d4114f2aa404e670ced33511183baacd813a01
2014-10-14 13:41:32 +00:00
drh 78aad7cd1d Merge all recent trunk changes.
FossilOrigin-Name: abfef254721ca29b653f24bfe80e88adaa92dc6c
2014-10-10 12:56:35 +00:00
drh 595db25b28 Merge the latest enhancements from trunk.
FossilOrigin-Name: 2695772c984c215649a16e1e3e18a8048a6a60dd
2014-10-01 01:52:42 +00:00
drh f1a08ad88d Change the names of the stream interface APIs to be of the form
"_strm" instead of "_str".  In other words, added an "m" to the end, to
try to make it clear that we are talking about a "stream" and not a "string.

FossilOrigin-Name: 1f44bfdc237ee6304f4aa56e5c5d1c0d74fcc944
2014-09-27 20:45:48 +00:00
drh 6382b6dc71 Merge recent trunk changes (performance enhancements) into the sessions
branch.

FossilOrigin-Name: 497367cb57345dd37793e5f369b34d12be56172e
2014-09-27 19:51:50 +00:00
dan f05ac11214 Fix a segfault in the sessions module that could follow an OOM.
FossilOrigin-Name: 09985fa6b60a0bf38e23bbccd4d8e1d1cbf66124
2014-09-27 18:18:32 +00:00
dan e8fa8c9649 Fix a segfault in the streaming API functions triggered by a very long table name.
FossilOrigin-Name: d2642543eed54da1ac0f757d43dd4d72482eb752
2014-09-27 16:33:09 +00:00
dan 16228167c2 Improve sessions module documentation and comments. Fix some other code issues.
FossilOrigin-Name: bfc8bd80f8b225cebc66478448510ce84223ae7d
2014-09-27 12:26:18 +00:00
dan fa29ecc4ed Fix a problem with concatenating patchsets containing DELETE and INSERT operations on the same row.
FossilOrigin-Name: 4d8537eafb40e3687abc057ba26a1f7014f2c2d9
2014-09-26 10:52:21 +00:00
dan cbf6d2d2aa Add streaming version of sqlite3changeset_concat().
FossilOrigin-Name: 88eb6656bdb047a104837a2e15e7fe18c0a7a159
2014-09-25 20:43:28 +00:00
dan fa122adac1 Add streaming version of sqlite3changeset_invert() to sessions module.
FossilOrigin-Name: 8ded6a46794c7bff1c8b790c662ba7e92f576380
2014-09-25 14:54:20 +00:00
dan 4757c65866 Add streaming version of sqlite3changeset_apply(). Tests and fixes for the same and sqlite3changeset_start_str().
FossilOrigin-Name: b917fc146876f764442de08d5ec36e5b4cf5ab52
2014-09-24 17:13:20 +00:00
dan ef7a630496 Begin adding 'streaming' APIs to sessions module. This is a work in progress.
FossilOrigin-Name: 3c7d3d950bbf5f5ed3696ebc61c77ca48bafe2b5
2014-09-23 20:39:55 +00:00
drh 6b011d83b4 Merge all recent trunk changes into the sessions branch.
FossilOrigin-Name: 6406b77f2c447751a2fbb16f01c61cdcfd6af59e
2014-09-21 22:49:20 +00:00
drh a4a8a3c22e Merge support for large files on Android from trunk.
FossilOrigin-Name: c2885c6bb24cc55178467e57e77bf71df58b3b13
2014-09-08 15:04:24 +00:00
drh bf9ed6f9af Merge the latest trunk changes, including the multi-threaded sorter, into
the sessions branch.

FossilOrigin-Name: d4cce2c71e64ab7b6a65a81b88b69445ed859351
2014-09-02 15:49:47 +00:00
drh e1ed0b0e17 Merge recent performance enhancements and the CAST operator enhancements
into the sessions branch.

FossilOrigin-Name: 08ae974ac80fabe53f515bbbd93ccf55de8ee671
2014-08-26 02:15:07 +00:00
drh 2571e4eddd Merge all recent trunk changes, especially the fix for
ticket [369d57fb8e5ccdff06f1], but also the skip-scan improvement and
performance improvements in the b-tree code.

FossilOrigin-Name: 0b9e2c3269695713b538561d999c68097db70f0c
2014-08-21 16:09:36 +00:00
drh 3a432b0b47 Disable the hook-7.5.2 tests when using sessions, since that are not correct
in that case.

FossilOrigin-Name: 6d5b9332e8d8bb572ac98b0f4e47e59ad12aac26
2014-08-19 00:33:22 +00:00
drh 2967e0cc9c Improved response to error conditions in the ".session" shell command and
in the "changeset" command-line program.

FossilOrigin-Name: b69f7dd1f35846c3bb9f4f160d50c4f03796f887
2014-08-19 00:26:17 +00:00
drh 9f674f2600 Fix the autoconf and MSVC makefiles so that they construct the changeset
command-line utility upon request.  Delete that utility program when
"make clean" is run.

FossilOrigin-Name: 4dc15fe066f079ff31c89a5e0242dd5b3c851d29
2014-08-18 20:23:29 +00:00
drh f5ab08c779 Fix a harmless compiler warning in the sessionAppendDelete() function.
FossilOrigin-Name: 1324d08d0c639378cf1b03bd6410db81947747ac
2014-08-18 20:14:30 +00:00
drh 5f77b89ecd Add the "changeset" command-line tool for analyzing and manipulating
changesets in files on disk.  Add the ".session" command to the command-line
tool.

FossilOrigin-Name: 31addb627fdbaeb908e0611ad82f6db7537428ea
2014-08-18 20:08:25 +00:00
drh 03168cacd5 A reasonably complete implementation of the "changeset" command-line tool
and the ".sessions" command in the command-line shell.

FossilOrigin-Name: 7b12f1f9c012f33d376242920583807b014b3287
2014-08-18 20:01:31 +00:00
drh 3a67b0453e Add the "changeset" command-line utility for getting an ASCII dump of
change sets.

FossilOrigin-Name: 55bb3544a6b474c04853270067a35ca4b0079f52
2014-08-18 17:56:31 +00:00
dan 082c96dffa Add miscellaneous test cases to improve coverage of sessions module.
FossilOrigin-Name: 0fac6cfffe628ea02c78ebad065307309ec9eaa1
2014-08-18 16:03:46 +00:00
drh e62296100f Begin adding commands to the command-line interface for interacting with
the sessions extension.  This is the first check-in of a work-in-progress.

FossilOrigin-Name: c2fcf0b9f4bdc48dfc6530bda4f531b94a833207
2014-08-18 15:08:26 +00:00
drh 8b7a2e3a1e Merge the latest trunk changes, and in particular the refactoring of the
object names in the command-line shell.

FossilOrigin-Name: 419d286a2fc465f6e0f9662909d0cc52a18eefa4
2014-08-18 13:48:41 +00:00
dan 2e934cd40c Add tests for sessions module.
FossilOrigin-Name: 82fdb1975f5b29a751089a8582713372999ae56e
2014-08-18 08:42:36 +00:00
dan a71d2371d0 Fix some missing and out-of-date comments in the sessions module.
FossilOrigin-Name: 05c1d9149b27c68e2654ed28491722927d2176f5
2014-08-16 19:01:00 +00:00
dan 64277f4a70 Fixes for the sqlite3changeset_concat() API regarding patchsets.
FossilOrigin-Name: dccb34859508eac8146ae5b19c447673d04be3b0
2014-08-16 16:47:55 +00:00
dan 73b3c05590 Begin adding the sqlite3session_patchset() API to the sessions extension. This is an interim commit.
FossilOrigin-Name: 60a4565a8c44762a002cd02979317df5ca47e899
2014-08-15 20:15:49 +00:00
drh f3a3dfe9f1 Update the sessions branch for version 3.8.6.
FossilOrigin-Name: 2acbeac1fd9b9feb26e1c24d4ae50ce79f17a3f8
2014-08-15 15:10:46 +00:00
drh d0738004ca Merge the trunk changes for 3.8.6 beta3 into the sessions branch.
FossilOrigin-Name: d49455d9a972fc2224d9beb97165a998ca56e838
2014-08-13 14:43:32 +00:00
drh 73472e38ce Merge the second InterlockedCompareExchange() fix from trunk.
FossilOrigin-Name: 69018967f6e38521dd9b0fa9ce05c9b947635335
2014-08-06 12:00:08 +00:00
drh 0894993e88 Fix an obsolete comment in the func.c source file. No changes to code.
FossilOrigin-Name: 7a145c9409e70b92946534eb44c2e205f7309897
2014-08-06 11:49:31 +00:00
drh 6a3d6085ad Merge in the fix for the InterlockedCompareExchange() build issue.
FossilOrigin-Name: 091aa5f1047f0ec984a69ab1f356c1960813b77b
2014-08-06 03:16:56 +00:00
drh 58c4cbe152 Merge the latest 3.8.6 beta changes from trunk.
FossilOrigin-Name: 68a6d5e2f43702c78057ae2f2a7345c981d24e17
2014-08-06 01:25:47 +00:00
drh 39a7bfd361 Merge the fix for the CREATE UNIQUE INDEX problem into the sessions branch.
FossilOrigin-Name: 43401ee624587ffa166c3cda7e5265ad0d81da5c
2014-07-30 14:29:54 +00:00
drh aae73527ad Merge recent trunk changes, and especially the fix for the R-Tree problem
described in ticket [d2889096e7bdeac6].

FossilOrigin-Name: 8f1beeade0ddf802900c9d203a4fd678d1190394
2014-07-29 12:40:45 +00:00
drh 35c3d8cc75 Merge recent trunk changes into the sessions branch.
FossilOrigin-Name: a9db017eabdefafcda87c497e8bafa07002ac0fe
2014-07-24 16:23:51 +00:00
drh f257b4c613 Merge the latest trunk enhancements into the sessions branch.
FossilOrigin-Name: a5d94eaba6aa12ff16d2a0af2fc752bcdb461877
2014-06-30 20:02:55 +00:00
drh 83f951ee95 Merge the 3.8.5 release candidate changes into the sessions branch.
FossilOrigin-Name: 09e75d82d02f900e58eceaaa010a42fc7044c89f
2014-06-03 20:09:48 +00:00
drh cbabb20390 Merge trunk changes into the sessions branch.
FossilOrigin-Name: 9f18e78f039ffa89a8806810ad385bdc51bc88ed
2014-05-29 20:29:13 +00:00
drh aff0fbb6a5 Merge recent trunk changes into the sessions branch.
FossilOrigin-Name: a769c7e03e6d4163986d49652687de34d15906a0
2014-05-26 20:00:00 +00:00
drh d963982049 Merge recent trunk changes into the sessions branch.
FossilOrigin-Name: 2d33afe0c43cb99caa521c48b721c3b0971e967c
2014-05-20 00:20:23 +00:00
drh 2e525f18e2 Merge all recent trunk enhancements and fixes into the sessions branch.
FossilOrigin-Name: e158812c34b01ce516d26636a489509bf61d1c27
2014-04-28 18:02:21 +00:00
drh ae28b301e1 Add the sqlite3_rtree_query_callback() API to the RTree virtual table.
FossilOrigin-Name: 3dca2809352c6c6d56db74447a814f77011c6220
2014-04-28 17:51:12 +00:00
drh c686929914 Enhance the sqlite3_rtree_query_info object to report on the number of
elements in the priority queue at each level.

FossilOrigin-Name: f7dad408dd46a1e3612b6142a3afb1d0d4fcda00
2014-04-25 16:29:03 +00:00
drh 98cf9d74f8 Fix the generation of sqlite3_rtree_query_info.iRowid and add test cases
to verify that it is fixed.

FossilOrigin-Name: eba95ead49f8f8ce45d400186562ff0066537c5c
2014-04-21 18:13:37 +00:00
drh 74188329ce Be sure to initialize the sqlite3_rtree_query_info.iRowid field for the
leaves of the R-Tree when doing a query callback search.

FossilOrigin-Name: 4394693882c04c19ebe87ef7547c57e679554397
2014-04-21 15:53:45 +00:00
drh a6ca7f2c1b Fix an off-by-one error in setting the "iLevel" field of the
sqlite3_rtree_query_info structure passed into the RTree query callback.

FossilOrigin-Name: d708f159abfb3b87e2844463088d4fb7f8da9c97
2014-04-21 15:21:19 +00:00
drh ec7c03a08b Further improvements to the RTREE_DECODE_COORD() method, to take advantage
of known processor byte orders when available.  This makes the code 3% faster,
according to valgrind.  Also add test cases to make sure the on-disk
representation is correct.

FossilOrigin-Name: 6f3e94f4b1b403cd7bfc5e8e0ffbd61b5174d3a4
2014-04-18 01:37:08 +00:00
drh e49b2718e0 Merge the latest changes from sessions.
FossilOrigin-Name: d9eef5b03c7c4bb69c11eda41152ee81aed1cac7
2014-04-18 01:14:46 +00:00
drh a1a483d54e Merge recent trunk changes into sessions.
FossilOrigin-Name: 95e77efe076ab421bd246119c47dba5dacf9d087
2014-04-18 01:10:05 +00:00
drh a5db90fc8e Performance optimization on byte-swapping in R-Tree.
FossilOrigin-Name: 444084fd620fc3f45cfb87b83f532d76bd2744e7
2014-04-17 23:23:29 +00:00
drh 1821cbacf1 More test cases with very long priority queues.
FossilOrigin-Name: 71692aa97c78676f0ba80eaeec0ad9ac225f4427
2014-04-17 15:34:58 +00:00
drh b640595f97 Test cases and bug fixes for the sqlite3_rtree_query_callback()
mechanism.

FossilOrigin-Name: 1ccaaed6b516ec2ce953c1b31025a82ba76d00e7
2014-04-17 14:52:20 +00:00
drh 78b486ea12 Refactor the constraint checking logic in RTree. The new-style constraint
callbacks created by sqlite3_rtree_query_callback() are now hooked up from
end to end, though still untested.

FossilOrigin-Name: 32a13870175a1dd1d33af3572dde09ff607a04b6
2014-04-17 13:15:33 +00:00
drh 18b5142b29 Performance optimization on nodeGetCell() in R-Tree.
FossilOrigin-Name: 5d20ff9ec837ad35bc44d6c25d13764b350e81dd
2014-04-16 21:02:28 +00:00
drh 22596b6b3c Convert the RTree module query mechanism over to using a priority queue for
walking the RTree.

FossilOrigin-Name: f26936f71a16ab25590540f7feb273514dfb69ff
2014-04-16 17:23:23 +00:00
drh 933a5ff2d4 TCL tests now all pass.
FossilOrigin-Name: f864baccd3fe0ee939ac1ec20069792f649cddc0
2014-04-16 17:15:14 +00:00
drh ab908cfcb4 Fix a bug in rowid=? query handling. More problems remain.
FossilOrigin-Name: 5b0e6ba4a5050cf81cf41b977b28d714163569e0
2014-04-16 14:45:11 +00:00
drh f247982e37 Bug fixes to the priority-queue implementation for R-Trees. Improved tracing
capability.  Some queries work now, but still many problems.

FossilOrigin-Name: a439ddd629c6bb5ea2e7e274673fee4f5c207acf
2014-04-16 13:00:08 +00:00
drh 96ce1b36aa Initial attempt at getting R-Tree queries to work using a priority queue.
This check-in compiles, but R-Trees do not work well.  And there are
debugging printf()s left in the code.  This is an incremental check-in.

FossilOrigin-Name: 53688a25c23c394278a357829793889970aa4157
2014-04-15 21:06:14 +00:00
drh de8c279b28 Fix comments on the rtreenode() and rtreedepth() test function in the R-Tree
module.

FossilOrigin-Name: ade5b986e8baab9df7bdaf7ccfaee2d6ba55fa3c
2014-04-14 14:43:09 +00:00
drh b6c3aeac90 Remove over 300 lines of unused code, code that implemented the older
Guttman insertion algorithms that are no longer used.

FossilOrigin-Name: 3ba5f295c709faebf5505e61f6dc5266b811b086
2014-04-14 12:18:17 +00:00
drh 8ae04b53c9 Continuing work on the new custom query mechanism for r-tree.
FossilOrigin-Name: ca7357e66ca60f59477b1db000c2cdaeb8082ae1
2014-04-13 16:10:09 +00:00
drh 0ccb6cdc87 Continuing clean-up of the R-Tree module in preparation for cutting in the
new generalized query mechanism.

FossilOrigin-Name: 66c858f20586424e15d0bfa3d7b56643bde66226
2014-04-12 17:44:00 +00:00
drh c9cb207acf Add the new interfaces to rtree, though they do not yet work. Add the
"show_speedtest1_rtree.tcl" script for showing the test data used for the
R-Tree tests of speedtest1.  Change speedtest1 to generate better R-Tree
test data.

FossilOrigin-Name: 0b70275972c7a6a533566c1e50bffbf3ac531e95
2014-04-11 23:14:48 +00:00
drh eb7c4f2aea Add the --verify option to speedtest1. Add verification test cases to
the "rtree" testset and a case that uses a custom geometry callback.

FossilOrigin-Name: 9d485c4207a81f32334857d4a608c5c511dd2b83
2014-04-11 17:41:08 +00:00
drh dcc5c7b2fc Update comments in the R-Tree module in preparation for some big changes.
Add an "rtree" performance test to speedtest1.

FossilOrigin-Name: 20a73ec0b2f56609a4504052e198e32803d30207
2014-04-11 16:14:54 +00:00
drh 652cc4b6dc Merge all recent changes from trunk,
including the fix for the OP_SCopy-vs-OP_Copy problem.

FossilOrigin-Name: 9515c8344a6743bbb0c6a6e49fb79fb3139090df
2014-04-03 16:35:33 +00:00
drh 24ed9d0445 Merge in fixes (including the corrupt-database crash fix) and
performance enhancements from trunk.

FossilOrigin-Name: fc8ca1a87e7127bd28f32fd809aec3e24355fbfa
2014-03-26 19:43:30 +00:00
drh 092378860d Bump the version number to 3.8.4.1., to conform with trunk.
FossilOrigin-Name: 42c9d8fc5fe4f0250bfa1f977c7cc63e5741408f
2014-03-12 10:03:13 +00:00
drh 181aed3c25 Version 3.8.4 for sessions (plus two minor fixes).
FossilOrigin-Name: 917c410808756e1697bd628f4c9c57dd13d08ce7
2014-03-11 01:48:06 +00:00
drh 4e2f459987 Merge the fix for the journal_mode=PERSIST error recovery delay bug.
FossilOrigin-Name: bb6a75f4bbcaaabc3ad47992c7c87868c70e8daf
2014-03-07 14:36:50 +00:00
drh 87778c7f96 Fix a harmless compiler warning in the sessions test harness.
FossilOrigin-Name: d389e20ab07a76d0c4be3801265977fa977a4394
2014-03-06 15:01:11 +00:00
drh b7bc8c9849 Enhance the test harness for the sessions interface so that it does not
use SQLite operations that can encounter an OOM error in places where it
is unable to report an OOM error back up to the test script.

FossilOrigin-Name: bc0e661033b78f27866932244e6204985ae39000
2014-03-06 14:53:25 +00:00
drh f2eded23f5 Merge the latest 3.8.4 tweaks from trunk.
FossilOrigin-Name: 1ed463d91866182fbc884fb88770717ee5bf33ce
2014-03-06 13:48:31 +00:00
drh 3bde1354ff Merge compiler-warning fixes from trunk.
FossilOrigin-Name: a1f2b0428518ec18af74a0e01deb4e40cd95a78f
2014-03-05 23:12:55 +00:00
drh 0503cf491f Merge in various obscure bug fixes and the removal of Mem.memType from trunk.
FossilOrigin-Name: 0828975d580d309a1c66da4b6caeb65b21a01199
2014-03-05 14:49:51 +00:00
drh 7826a9b83f Merge the performance enhancements of trunk (and some obscure bug fixes)
into the sessions branch.

FossilOrigin-Name: 7f51ad97f0b24c57453d58faf25eee68861faa23
2014-03-04 14:34:14 +00:00
drh 15d4211400 Sync with trunk. Bring in the command-line shell updates and the new 3.8.4
version number.

FossilOrigin-Name: 2cd35ff6512e1973077f7ffc2c902476eabbe672
2014-02-11 16:31:14 +00:00
drh 5671ef69ec Sync the latest trunk changes, and in particular the STAT4 IS NOT NULL fix.
FossilOrigin-Name: b006792695d23980e1923b21915d5c1138ecf29d
2014-02-11 04:30:29 +00:00
drh 4b46eb108d Sync with version 3.8.3.
FossilOrigin-Name: a704b65b9476d60c88b5bc82f2743faa2bce5ac2
2014-02-03 13:58:42 +00:00
dan 43a6c6b2d4 Merge latest fixes from the trunk.
FossilOrigin-Name: 6b6dcd4cc75317628072abac7c58b41361cc72b4
2014-01-29 14:21:31 +00:00
drh 19913f4419 Bring in the latest updates from trunk.
FossilOrigin-Name: 7b5f3773867ed0e4ed17bd473ba972d500035318
2014-01-28 18:06:17 +00:00
drh c187698614 Bring in all the latest trunk changes, including the Common Table
Expressions implementation.

FossilOrigin-Name: 9b43e559195680e558264c4c00d34dc9cf9d9146
2014-01-24 14:05:18 +00:00
drh d9e3c267b4 Merge the latest trunk changes into the sessions branch.
FossilOrigin-Name: cfd110bf5db2c1993a5e2ca718648bd9c17ee22c
2013-12-24 12:09:42 +00:00
drh c8d985e09c Merge in all recent preformance enhancements from trunk.
FossilOrigin-Name: 32477642d79615fb85680bdac812ad9655cf6902
2013-12-14 18:24:46 +00:00
drh 65106c77bb Update to the 3.8.2 release.
FossilOrigin-Name: e579661a7950fe9f8eb10012946100c874ba54b0
2013-12-06 15:49:45 +00:00
drh 27964431ea Merge in trunk changes.
FossilOrigin-Name: a2914d6b17358de05eb39f764c0c13d2d4cf8f3b
2013-12-03 20:51:33 +00:00
drh 52208a6332 Merge all recent 3.8.2 beta changes from trunk.
FossilOrigin-Name: 67c34ccfa9596a923695dc4994ec87b331f8326c
2013-12-02 21:58:19 +00:00
drh 5b8d1ab454 Merge all recent trunk changes.
FossilOrigin-Name: 3a2a1bd47875e114d8e6f31c1768908f401d2861
2013-11-27 21:53:51 +00:00
drh 1b2ee4fe1a Merge in performance enhancements from trunk.
FossilOrigin-Name: fc9ae839569eb28eb734c52d95676c59b2e27494
2013-11-26 18:00:29 +00:00
drh 212c6be141 Merge the skip-scan optimization into the sessions branch.
FossilOrigin-Name: 7596d1bf8040f7cefc7b22c5e609acc5d66820bf
2013-11-14 19:18:39 +00:00
drh cf1ef10b62 Import recent bug fixes from trunk.
FossilOrigin-Name: 20eeee4cd34a9bffe6bf65962126ddf8ca04eb3e
2013-11-12 15:39:01 +00:00
drh fba5765b57 Fix two test cases (due to changes in the formatting of constraint errors)
so that all tests now pass.

FossilOrigin-Name: 129e2b69178147d04ee27fce66c17b39f8654da3
2013-11-11 23:02:10 +00:00
drh cbf1b8ef7d Merge in the WITHOUT ROWID changes. A few tests are failing now. They will
be fixed in a follow-on check-in.

FossilOrigin-Name: 5addd1234ded59ce60fb633b76ac87d483377edd
2013-11-11 22:55:26 +00:00
drh d63d4b7bd7 Merge all trunk changes since 3.8.1 into the sessions branch.
FossilOrigin-Name: aa72ea8a004de7fe744fc13baef19d05aea607d5
2013-10-28 22:47:24 +00:00
drh d82d4750a8 Merge the latest trunk changes.
FossilOrigin-Name: 5806546822b717d712dc7cd9de88a86f5bf2f715
2013-10-16 14:32:47 +00:00
drh 9327c70f68 Merge the latest trunk changes into the sessions branch. This merge
should fix the build for WinRT.

FossilOrigin-Name: e111e4edf9d7b2d4d6d6673a7576801839e9537d
2013-10-15 14:10:44 +00:00
drh a63b852992 Synchronize with the trunk.
FossilOrigin-Name: 136445ba020c9475d3f5a7843d7d0add98477138
2013-10-10 20:13:18 +00:00
drh 59255f9a98 Merge in all the latest trunk changes, including the win32-longpath VFS and
the fix for the segfault in the omit-left-join optimization.

FossilOrigin-Name: cdd3838b7876639cf99904b2054884247fbff529
2013-09-03 14:49:07 +00:00
drh 5f9742e0ff Merge from trunk: (1) Recent bug fixes (2) STAT4 support (3) win32-longpath
support.

FossilOrigin-Name: e7ebc8f74fe91dee26f952fdf49e427b45448667
2013-08-29 15:08:38 +00:00
dan 9f0656d8c5 Merge recent trunk changes.
FossilOrigin-Name: 6cc54de88bba00e07fac9de36caac216d94bf070
2013-08-23 17:54:46 +00:00
dan 7531a5a378 Add the sqlite3session_table_filter API to the sessions extension.
FossilOrigin-Name: b7e4dd889d37c8f57c2d3c7900e802f644aac3ea
2013-08-23 17:43:32 +00:00
drh 32683532f0 Merge in minor bug fixes and performance tweaks from trunk leading up to
the version 3.8.0 release.

FossilOrigin-Name: 831492dca8bcfb1a1f83a8bb15de9cc94f29f07e
2013-08-22 15:07:08 +00:00
drh 90bf3d7422 Merge performance enhancements and compiler warning fixes from trunk.
FossilOrigin-Name: 3e4033285deb417bd72c008917729dbf3bf4e90d
2013-08-20 13:02:16 +00:00
drh db78b96111 Merge in all the latest updates and enhancements from trunk.
FossilOrigin-Name: 67587a3348b84424b2ab1f2df1ea923a5168e2e4
2013-08-19 12:49:06 +00:00
drh 700a7fdf83 Merge in the latest changes from trunk.
FossilOrigin-Name: 69d5bed017bda3e184857febcc8b6f6bed6ad228
2013-08-06 14:52:27 +00:00
drh 7fb30bd0dd Merge in the latest trunk changes, including partial indexes, the MAX_PATH
fix in os_win.c, and the sqlite3_cancel_auto_extension() API.

FossilOrigin-Name: 7e1acb390770d1bd189fac7a3a7f96106f96e3a4
2013-08-02 20:44:48 +00:00
drh 6f855952d0 Merge recent trunk changes (such as the query_only PRAGMA, the
defer_foreign_keys PRAGMA, and the SQLITE_DBSTATUS_DEFERRED_FKS parameter
to sqlite3_db_status()) into the sessions branch.

FossilOrigin-Name: 8dfc0b78c38e519b64a796243ff7c0aff688ff36
2013-07-11 15:31:57 +00:00
drh 07001c45a1 Remove the undocumented sqlite3_foreign_key_check() API and replace it with
sqlite3_db_status(db, SQLITE_DBSTATUS_DEFERRED_FKS, ...).  Add test cases
for the new functionality.

FossilOrigin-Name: d39e65fe702a2e11477f2d996f77404f45763368
2013-07-11 13:49:59 +00:00
drh 963c74df59 Rename the SQLITE_DeferForeignKeys macro to shorter SQLITE_DeferFKs. Move
the "defer_foreign_keys" pragma into the flagPragma() routine.

FossilOrigin-Name: 3a2ab74c85a40e0e7ef2d6aef6ec23837cb788e6
2013-07-11 12:19:12 +00:00
drh 888e16e7c5 Pull in all the latest changes from trunk.
FossilOrigin-Name: af3ca4c6e557e6bc92584586b5a97d9be41b0b82
2013-07-09 13:05:49 +00:00
dan bded90b487 Fix a bug preventing some FK constraint checking from being deferred until the end of changeset application.
FossilOrigin-Name: 1452defb8cfcc489230314dd1e0425feba46c49d
2013-07-04 15:22:53 +00:00
dan cb3e4b797e Experimental change to the handling of foreign key constraint violations when applying a changeset: all foreign keys, immediate and deferred, are deferred until the end of the transaction (or sub-transaction) opened by the sqlite3changeset_apply(). A single call to the conflict-handler (if any) is made if any FK constraint violations are still present in the database at this point. The conflict-handler may choose to rollback the changeset, or to apply it, constraint violations and all.
FossilOrigin-Name: 1d44e5d3c2b1dc958442f9114a960b256e002ed3
2013-07-03 19:53:05 +00:00
dan 35e2858e98 Fixes for the sessions module so that it works with sqlite3_extended_error_codes() set.
FossilOrigin-Name: c2972b6aed23f6c76a289534de9ea4732a48f40e
2013-07-02 20:23:40 +00:00
drh fd64cedc4b Bring the sessions branch up-to-date with all the latest trunk changes.
FossilOrigin-Name: 086a127236ee99d67513490fb7b5549e8b752c44
2013-06-26 13:31:50 +00:00
drh 85b303df54 Update the sessions branch to the official 3.7.17 release code.
FossilOrigin-Name: fc88f7311ba888015634b89b5909890208f543f5
2013-05-20 13:01:19 +00:00
drh 466af9baae Update the sessions branch to the latest 3.7.17 beta.
FossilOrigin-Name: af8057ef5dcaa72dc0d2ab5d1553b06757449fa1
2013-05-17 10:58:08 +00:00
drh ad1818d9ed Update the sessions branch with the latest trunk changes.
FossilOrigin-Name: d09355050a74344c1cb6d303af9f601cd41e2368
2013-05-15 18:45:14 +00:00
drh 644abec3a4 Merge trunk changes into the sessions branch.
FossilOrigin-Name: 512f8a1ef8c4cf50723cfc4a78b7370dc37358d9
2013-05-09 23:40:58 +00:00
drh 2464dee6bc Merge all recent trunk changes into the sessions branch.
FossilOrigin-Name: ae6c4a0906ad8caabd8c605bb39c5fb979ab39a2
2013-05-08 18:50:04 +00:00
drh ec7ecb8c9a Merge all recent trunk changes into the sessions branch.
FossilOrigin-Name: 3879ab1b532828fcc12a50a95b6730faebcb69e9
2013-05-03 18:29:22 +00:00
drh 16fb176814 Merge the latest trunk changes into the sessions branch.
FossilOrigin-Name: 6994826c0784280f2e9728dfa4185848846d03df
2013-04-22 23:59:06 +00:00
drh 8bc8bfcb05 Fix the xCheckReservedLock() method on the windows VFS so that it cannot return a false positive when two or more processes use it at the same time on the same file. Ticket [7ff3120e4fa54abb55]. Update to version 3.7.16.2.
FossilOrigin-Name: 67b3c0efa7d5e0cb7cc0fc7606ab3f26ea5419fd
2013-04-12 13:53:50 +00:00
drh 226fb534dd Version 3.7.16.2
FossilOrigin-Name: cbea02d93865ce0e06789db95fd9168ebac970c7
2013-04-12 11:52:43 +00:00
drh 7f6e147a51 Increase the version number to 3.7.16.2 and cherrypick the
fix for ticket [7ff3120e4fa54abb55].  This check-in is a release
candidate.

FossilOrigin-Name: 86f26f9152988e47d7e1cfcca9eedf5e6265a225
2013-04-11 19:04:20 +00:00
mistachkin 73c4041b43 Correct minor typo in two regular expressions.
FossilOrigin-Name: f1eed92b7b0ef4ee22a11d8bb4f9a572b56ce019
2013-04-11 00:45:28 +00:00
drh eeeee7f55d Designate the beginning and the end of the sqlite3session.h file in the
constructed sqlite3.h file.

FossilOrigin-Name: 53f5be74327162a2bd25a91eaf7c91b126294727
2013-04-10 15:01:36 +00:00
drh 8dd661aad1 Merge the changes for the 3.7.16.1 release candidate into the sessions branch.
FossilOrigin-Name: ee35a89712b8ea9f4e70d61a29150348896b519f
2013-03-28 01:19:26 +00:00
drh 1ffe7c7fab Also export the sqlite3changeset interfaces in the amalgamated version of
the sessions extension.

FossilOrigin-Name: 5b399f2bc43612c52ea2289001d852d7ba6f9750
2013-03-19 17:10:10 +00:00
drh e191e2c6d0 Include the sqlite3session.h header file in with sqlite3.h. Make sure
the session APIs are all public.

FossilOrigin-Name: ec490336bc6629d3910667ece1bbc4685a199546
2013-03-19 15:23:18 +00:00
drh c03edc0b62 Adjust the MSVC makefile so that it correctly handles the sessions
extension being included in the amalgamation.  Import the test case
changes that appeared in 3.7.16 final.

FossilOrigin-Name: 9bac09a99aef5f18386037b409869d760c520d53
2013-03-18 16:24:33 +00:00
mistachkin 38b4daa122 Fix typos in MSVC makefile.
FossilOrigin-Name: 2d15c2685750b930c5b7e2f06cb056b24a037967
2013-03-13 19:02:39 +00:00
drh 8ce2b0956a Fix main.mk so that it builds the amalgamation correctly.
FossilOrigin-Name: 0b84e277245f10f928c010ea5958923681c6d582
2013-03-13 12:20:15 +00:00
drh 498dcae0f0 Fix a compiler warning in sqlite3VdbePreUpdateHook().
Add sqlite3session.c to the amalgamation.
Fix the Makefile.in to work with sessions.

FossilOrigin-Name: e54b0225f226a163ec874df7d4b738efba12b3a7
2013-03-13 11:42:00 +00:00
dan bfb5a031e5 Merge latest trunk changes into this branch.
FossilOrigin-Name: d6cd3c780c6bc718d37e0f0b884e3e9a423d57be
2013-03-13 06:34:51 +00:00
dan 1bc8b87e46 Merge recent changes to trunk into sessions branch.
FossilOrigin-Name: 62adb0e0d70e619becb68ffd2625d979bcc777cd
2013-03-12 11:38:59 +00:00
drh b05567ed4b Merge all the latest trunk changes into the sessions branch.
FossilOrigin-Name: d69d21903b883067c66dbcdefe6b369a6fe328b0
2013-03-06 02:12:18 +00:00
drh dab942860c Enhancements to the query planner to make use of indices for ORDER BY even
when IN constraints are in the WHERE clause.  Add extended error codes for
all SQLITE_CONSTRAINT errors.

FossilOrigin-Name: 7e14dc734d7d941da5c3aa6612e26d93b5b929bd
2013-02-13 13:42:50 +00:00
drh 3dbfbcf43e Enhancements to the query planner to exploit transitive relationships in the
WHERE clause, and other minor changes to bring the sessions branch into
alignment with the trunk.

FossilOrigin-Name: 82d3d1ae824e1fbc7958657be79231590ec17ace
2013-01-25 02:10:06 +00:00
drh e6dcfb85df Merge latest trunk changes into the sessions branch, especially the
ORDER BY bug fix of 3.7.15.2.

FossilOrigin-Name: 34af6fac679aeb18ab8349f74e95f3cb6e722ea4
2013-01-09 14:49:37 +00:00
drh 89ded43b36 Merge recent trunk changes into the sessions branch.
FossilOrigin-Name: 7e068e39b3b31364271664e0afb1cd95a235c26f
2013-01-03 22:22:55 +00:00
drh bd36911f4d Pull the latest trunk changes into the sessions branch, and in particular
the collating-sequence refactorization.

FossilOrigin-Name: 4f6d69ae94671df92b976525f75404c01270fef9
2012-12-08 23:37:22 +00:00
drh 26cd614dad Update the sessions branch to include the SQLLOG enhancement, the
SQLITE_IOERR_DELETE_NOENT fix, and a fix for the number-of-documents
bug in FTS4.

FossilOrigin-Name: ba8d08b67021a32fda069c18b7eb93523e6f0d1f
2012-11-27 21:56:28 +00:00
drh afe5b83dcd Merge the latest changes from trunk: chiefly the outer/inner loop query
optimizer scoring enhancement and the INSTR() function.

FossilOrigin-Name: 2993ca20207f8dac02f58d01e31d68c84328356a
2012-11-10 01:27:59 +00:00
drh 3dc2b9032f Pull all the latest trunk enhancements into the sessions branch.
FossilOrigin-Name: fce667f2d93a4ba65ccf1e748469576a3cd7ffcc
2012-10-30 21:03:48 +00:00
drh 036a71a97c Merge all the latest core changes into the sessions branch.
FossilOrigin-Name: 76767d651fe733614b1719aef9ad5ed4568234e4
2012-10-15 14:25:16 +00:00
drh d1102b1ec7 Merge the latest trunk changes, especially the ORDER BY optimizer enhancements
but also other fixes, onto the sessions branch.

FossilOrigin-Name: f1fbb8c5bfa84e84e0b8e2872d83b06a0c0d5acc
2012-10-09 14:58:15 +00:00
drh c4645dacfb Merge the latest trunk changes (especially "PRAGMA busy_timeout" and the
ORDER BY query planner optimizations) into the sessions branch.

FossilOrigin-Name: 6ca8eae1f89d19ee23cbc3a869d85b57d29b4a7d
2012-09-28 13:05:48 +00:00
drh 40eaa08620 Update the sessionfault-9.1 and -9.2 tests to account for the change in
version 3.7.11 in which a pending statement no longer blocks ROLLBACK but
instead causes the next call on that statement to return SQLITE_ABORT.

FossilOrigin-Name: fae9eb197fcef726fd2c7c701afe6805fc008cf9
2012-09-28 12:55:56 +00:00
dan 7417cefec6 Update with latest trunk changes.
FossilOrigin-Name: 87995dc9409482f0a7a367bfc51d78ac0f63b8c3
2012-08-31 14:23:16 +00:00
drh 310874ca00 Merge the latest trunk changes into the sessions branch.
FossilOrigin-Name: aa62d6881b5aae64e15dbae70ce8e77bcc2a9f0b
2012-08-25 01:21:36 +00:00
drh 16de7f4d32 Merge all the latest trunk changes into the sessions branch.
FossilOrigin-Name: fc07a4795e027108674d1d41eb4350df629ddc8b
2012-08-15 16:21:55 +00:00
dan 618fea4830 Merge latest trunk changes with sessions branch.
FossilOrigin-Name: 47f8f0711d63ef4166db9115db44b166959df14c
2012-06-09 19:15:43 +00:00
drh 8973a04e3b Merge all trunk changes, including the WinRT enhancements, into the
sessions branch.

FossilOrigin-Name: c62140398344fd1a68a3e6dfe8b4fab280731ebb
2012-06-07 23:58:36 +00:00
drh c706edac44 Merge the 64-to-32-bit RTree rounding fixes from trunk into the sessions branch.
FossilOrigin-Name: 7eff45c28058fd1cb06dfd7f253cf2e4866e8c7c
2012-05-29 00:48:55 +00:00
drh 14bcd7d25e Merge the unicode61 tokenizer and the shared-cache-memory database changes
into the sessions branch.

FossilOrigin-Name: df817e70afc3f41e680d8f84dfa5772d5b3ae4d9
2012-05-28 18:22:41 +00:00
drh e56467fc9f Version 3.7.12.1
FossilOrigin-Name: d07b7b67d1b3bf65cfe8d96d45a7f1d387bea7ce
2012-05-22 13:01:39 +00:00
drh 7b9370a445 Version 3.7.12
FossilOrigin-Name: be71d2f6678c5dd8a165a67ef6d3f64678227260
2012-05-14 01:58:36 +00:00
dan 3581020e53 Update sessions branch with trunk changes.
FossilOrigin-Name: 3f4848a871a4229ff6951eefaf7673de46d2c43f
2012-05-12 11:50:41 +00:00
drh caee673b0d Merge in the windows AV-defense enhancements for open() and the table
constraint parser fixes for legacy schemas, all from trunk.

FossilOrigin-Name: 323570b8bd52c7e1b0c8c7a0e4f57f6fdebead11
2012-05-10 12:17:18 +00:00
drh 0d7706f41a Update the sessions branch with all the latest changes from trunk.
FossilOrigin-Name: 0f347fbfc7d8821f56f1ae0d1a9472a375631e65
2012-05-04 23:31:14 +00:00
drh efa50bdac1 Merge the latest trunk changes into the sessions branch.
FossilOrigin-Name: 2b7a91e61794ce9ffe210bad584454e52c79924e
2012-04-19 20:00:31 +00:00
drh bd91913dc0 Import all the latest trunk changes into the sessions branch.
FossilOrigin-Name: 87a0eab5d98fff93aa2147c04c4af27be42fb365
2012-04-18 01:41:37 +00:00
drh 108606837e Merge all recent trunk changes into the sessions branch.
FossilOrigin-Name: fb9b9987de965e194fef56bca563ee65c49f0950
2012-03-30 17:30:33 +00:00
dan 6d972c1b98 Merge the latest trunk changes into the sessions branch.
FossilOrigin-Name: 2277c70b6f14e2f8043112a5c49a8bc18b7504f3
2012-03-19 11:17:17 +00:00
drh ddf01aeb16 Merge in the latest trunk changes.
FossilOrigin-Name: ff86875ca35e04cea6c3d5e1b5117a4f227a6b15
2012-03-05 16:26:00 +00:00
drh fdf1795618 Pull all the latest trunk changes into the sessions branch.
FossilOrigin-Name: 361fb66a799f4f253e61ca94d999accde2c75b2c
2012-02-10 17:54:52 +00:00
mistachkin adb96a62e5 Support building with SQLITE_ENABLE_SESSION under MSVC.
FossilOrigin-Name: 2845654d425164de143e82b9fdb255d81a01af56
2012-01-16 12:33:36 +00:00
dan af49af7f9e Update sessions branch with latest changes from trunk.
FossilOrigin-Name: 01c84fd391a0ca1f5245c7eff0644d0cc6cff86b
2012-01-14 13:50:12 +00:00
drh 54cced185c Merge all of the latest trunk changes into the sessions branch.
FossilOrigin-Name: a9bcb432f58b96f079a73c456efd4851c582221e
2012-01-05 13:02:36 +00:00
drh f004e1d69e Merge in all changes found in the version 3.7.9 release candidate.
FossilOrigin-Name: 23580718e1c15ddb89682d0e7566da4d7276bfe9
2011-10-31 14:34:31 +00:00
drh efb1ca3738 Merge the latest trunk enhancements into the sessions branch.
FossilOrigin-Name: 8baef58170ff851d0c4387a6888f59b487b4f33c
2011-10-21 17:08:23 +00:00
drh 29c21c77af Merge all the latest trunk changes into the sessions branch - especially
the SQLITE_ENABLE_STAT3 enhancements.

FossilOrigin-Name: 403431cac6b039b0693915c5422f08dc60dae230
2011-10-11 12:58:38 +00:00
drh 946e610a84 Merge in all trunk changes through the version 3.7.8 release.
FossilOrigin-Name: 98619a23fd11a5eb319687adfdacc91ff2db896c
2011-09-19 20:28:07 +00:00
drh 063d96fc18 Merge the latest trunk changes into the sessions branch.
FossilOrigin-Name: 5efb02949dbeabccfe1d848d275529f03f3dfc84
2011-09-16 19:40:24 +00:00
dan 93bca69578 Merge latest changes from the trunk into the sessions branch.
FossilOrigin-Name: c00e45ede7cbf71a3a6d1ccad0b9275010ca8493
2011-09-14 19:41:44 +00:00
drh 7cca2e6259 Merge the latest trunk changes into the sessions branch.
FossilOrigin-Name: eb036d6f81e15bac013316bf5b1b2ba3e0bd4605
2011-08-26 19:20:47 +00:00
drh 0e9a916c36 Merge the latest trunk changes into the sessions branch.
FossilOrigin-Name: c5709036087b6b4fb6391ab7e4b4b870aac87a31
2011-08-03 21:46:58 +00:00
drh 7f197bb7b0 Avoid segfaulting on an incremental blob write if SQLITE_ENABLE_PREUPDATE_HOOK
set but no pre-update hooks are defined.

FossilOrigin-Name: 62c446340475b52b843c0345eda32ebe86fa9159
2011-08-03 21:32:11 +00:00
dan 964cbd469b Fix errors in a comment in sqlite3session.c. No changes to code.
FossilOrigin-Name: d5f4c4c0bf0d488db11c6ab0d26ca3554a57d0ff
2011-07-26 17:53:53 +00:00
dan 1e556c3fe5 Fix a test case in sessionfault.test. No changes to code.
FossilOrigin-Name: dc6ecacd7724089a0387e69a0fd5cdbfdd2023f8
2011-07-26 15:57:56 +00:00
dan cfec7eee20 Fix a problem causing sqlite3changeset_invert() to effectively drop UPDATE changes.
FossilOrigin-Name: bb3e65d9724dcecdc54b4c9fb0448f95d14495ff
2011-07-26 15:50:36 +00:00
drh 8a3bb3fddd Merge the latest trunk changes into the sessions branch.
FossilOrigin-Name: 110cfd6920cf3011aeaf7e586f8db867bfc69fbb
2011-07-22 12:49:27 +00:00
dan ff53032641 Fix the sqlite3session_isempty() method so that it returns, as documented, non-zero when no changes have been recorded by the session object.
FossilOrigin-Name: d04e0fd82a15aee963e35830caf8159b4b6ccd87
2011-07-18 15:22:56 +00:00
dan a93166e030 Fix error in a comment in sqlite3session.h. No changes to code.
FossilOrigin-Name: 70c84e50209722a61d66fd737e42d49275745b62
2011-07-16 18:35:53 +00:00
dan b69ec3482a Note in the documentation that when iterating through a changeset, all changes to a single table are grouped together. Also add the sqlite3session_isempty() function.
FossilOrigin-Name: 364f3b820a26f9b15cf74a0222ed5e302becc54f
2011-07-16 18:05:07 +00:00
dan 4f52804206 Add a few casts required by 64-bit VS2010 to the sessions code.
FossilOrigin-Name: 5ac4a06111b5fad5f58c20ef5d2b65aeb23e105a
2011-07-15 19:11:32 +00:00
dan 40368988da Add the xFilter callback to the sqlite3changeset_apply() function. This callback allows the application to accept or reject changes on a per-table basis when applying a changeset.
FossilOrigin-Name: 282474c42f24f0e66c69b576b72ef8ce764d49e2
2011-07-13 15:21:02 +00:00
dan e437ca5ec0 Modifications so that the sessions extension works with blob handles.
FossilOrigin-Name: 82ac16c4f873d3bd7c22f36ba7b974b4903a2d50
2011-07-11 19:45:38 +00:00
drh 88ab69f614 Pull the latest version 3.7.7 release-candidate changes into the
sessions branch.

FossilOrigin-Name: 840bf9c2d92192ee3cc2aa7c0e9bdb805a066fd4
2011-06-23 17:40:15 +00:00
drh 893ab7ccba Pull the latest trunk changes into the sessions branch.
FossilOrigin-Name: 5d95b42946b5cf0346164aebe0a8c4f37527bc31
2011-06-23 02:11:11 +00:00
dan 53ae686bfb Update sessions branch with latest trunk changes.
FossilOrigin-Name: 48d5cab3ac08b25ec94d6ecfd25779320558110f
2011-06-22 12:01:08 +00:00
drh 34ffcfff02 Merge the latest trunk changes into the sessions branch.
FossilOrigin-Name: f3d148e0d10e16cd744ec88a2961fd617368c5ed
2011-06-21 01:29:16 +00:00
dan 467eb01caa (no comment)
FossilOrigin-Name: 699b884383f735fb9630d87d25dab61c97dc4485
2011-06-20 11:17:11 +00:00
drh 8863f35f5c Merge the latest trunk changes into the sessions branch.
FossilOrigin-Name: 4c5e276c902e0b93cfc05bf2e1db966ecdac0ed0
2011-06-20 10:44:10 +00:00
drh bf0ed47d82 Merge the latest trunk changes into the sessions branch.
FossilOrigin-Name: 832886b1e6edb916d9824924c7d88202f4eb1969
2011-05-30 13:39:20 +00:00
drh 4ec233f12a Merge all the latest trunk changes into the sessions branch, especially
the disappearing WAL transaction fix.

FossilOrigin-Name: 5b1b536cf828850d0e8ac2ab08e8696082715877
2011-05-19 02:48:46 +00:00
drh 0576a30dad Merge the latest trunk changes into the sessions branch.
FossilOrigin-Name: 6883580e6c8973010a42d1d2c5bde04c6b2f4eb7
2011-05-05 15:46:16 +00:00
dan 23328bedf0 Merge trunk changes into sessions branch.
FossilOrigin-Name: b91b4c31fe311b292044c9c747feba294ffce25c
2011-04-18 17:30:56 +00:00
dan 77fc1d5bb4 Fix further missing comments and other minor issues in the session module code.
FossilOrigin-Name: 99f0f35092b0b78b7016b21c242da263ab64b77b
2011-04-18 15:47:08 +00:00
dan 798693b2b1 Fix some missing comments and other issues with session module code.
FossilOrigin-Name: 20d7c280235201e519f296372f269e7cecda24da
2011-04-18 12:05:03 +00:00
dan 80fe2d9310 Further coverage tests for the session module.
FossilOrigin-Name: 69a01c708bf044eacf21a8951fe9e7d9fb4332c5
2011-04-18 07:36:27 +00:00
dan 6734007d75 Improve test coverage of session module.
FossilOrigin-Name: f46d4b641d613c39a80b12106e6a6ac0efc8be83
2011-04-16 19:23:10 +00:00
dan b08a1efae5 Improve coverage of session module.
FossilOrigin-Name: 3dfd1d63bddfa9bd9018eb00bee1d496379630b5
2011-04-15 19:18:57 +00:00
dan 1756ae10e1 Add tests and fixes for OOM handling in sqlite3changeset_concat().
FossilOrigin-Name: df0b2d21dcd81679e55b24866f97568019932983
2011-04-15 16:03:32 +00:00
dan f29123b572 Have sqlite3changeset_concat() return SQLITE_SCHEMA if an attempt is made to concatenate changesets based on incompatible database schemas.
FossilOrigin-Name: 343b64517d244b75097e38342dc273eb5a52915b
2011-04-15 15:04:31 +00:00
dan 29e03e977c Add documentation for sqlite3changeset_concat() to sqlite3session.h.
FossilOrigin-Name: ada9efa53a6ea55f89d237cfd530f1d180343e19
2011-04-15 12:04:50 +00:00
dan 6cda207f5f Add further tests for the sqlite3changeset_concat() function. Also fixes.
FossilOrigin-Name: 1fc3f15d88c160b45642b46d1d54c591af058ba2
2011-04-14 18:01:41 +00:00
dan 5d607a6e06 Start adding the sqlite3changeset_concat() function to the session module.
FossilOrigin-Name: 8927b2260b8d84f53776cb29e1d2fa41b6b0de0e
2011-04-14 11:16:21 +00:00
drh 9e3fbc0157 Merge the latest trunk changes into the sessions branch.
FossilOrigin-Name: 83705e90a54bad462a5b7fbca70cc129998f871c
2011-04-09 18:07:51 +00:00
drh 36828bd9bb Add a missing "extern C" terminator to the end of sqlite3session.h.
FossilOrigin-Name: 29090b695a95feaba1b74f9894997083a060263a
2011-04-06 23:40:28 +00:00
drh cfdbde214b Fix VC++ compiler warnings.
FossilOrigin-Name: 7b7c8d366c51e89aefc6efc9dcffe3f62c7e1d25
2011-04-06 23:39:28 +00:00
drh 22e9c155ae Merge in the latest changes from the trunk.
FossilOrigin-Name: 435b57dc2be7b071270a6cddece297758b8153aa
2011-04-06 22:33:50 +00:00
drh d7162fa64e Merge the latest trunk changes into the sessions branch.
FossilOrigin-Name: 45f20261720dcd73eb887f7e3df100723000418b
2011-04-05 22:13:49 +00:00
drh c94f31236e Pull the latest trunk changes (and hence the schema-parse-refactor changes)
into the sessions branch.

FossilOrigin-Name: 03ca83422f0259ae5525aeecc14171811252a67d
2011-04-05 13:27:30 +00:00
drh b92fce1eae Merge the latest changes of trunk into the session branch.
FossilOrigin-Name: 95d53c44320b9639f2623aa9cc88d0d3e1a3be8f
2011-04-04 13:19:36 +00:00
dan 3d06237770 Merge latest trunk changes.
FossilOrigin-Name: d184cf00574b52b93f1f089025d6a0addca57558
2011-04-01 15:43:40 +00:00
dan 5d8a298495 If the sessions module is being built as part of the amalgamation, do not try to include sqliteInt.h and vdbeInt.h.
FossilOrigin-Name: f87bfe6e12093e5958b658a49d3766fb29562cbb
2011-04-01 15:30:39 +00:00
drh 9b1c62d416 Add the SQLITE_ENABLE_PREUPDATE_HOOK compile-time option.
FossilOrigin-Name: 6634521461e6acff7cc778590e62d57831f9230d
2011-03-30 21:04:43 +00:00
drh 67c495ac20 Disable the truncate optimization if there is a preupdate hook.
FossilOrigin-Name: d051694e024c590e4687cae1368f900799b7442d
2011-03-30 17:25:35 +00:00
drh 930e1b6a5d Add documentation to the sqlite3_preupdate_hook() interface and its relatives.
FossilOrigin-Name: 8180f2881fa970429e28d4f3258a56cfaabbcabd
2011-03-30 17:07:47 +00:00
drh 5847b5f9c3 Merge in all the latest changes from trunk.
FossilOrigin-Name: b11d941e92897663da46160185e6e305d4e28fe6
2011-03-30 02:03:12 +00:00
dan e5754eec26 Improve coverage of session module a bit more.
FossilOrigin-Name: 4255a9f609c4fd43582a0874143eabe211199726
2011-03-25 19:06:09 +00:00
dan f51e5f6c99 Improve coverage of session module code.
FossilOrigin-Name: 666123c8d07be87d477e67b1cebef2b0fba5b4bc
2011-03-25 10:52:01 +00:00
dan a9605b9125 Fix handling of schema changes mid-session.
FossilOrigin-Name: 76d2d2ad3b2a5171393b7894f35f463ff284e53b
2011-03-24 16:53:57 +00:00
dan ca62ad57f0 Fix handling of schema mismatches in sqlite3session.c so that it matches the docs in sqlite3session.h.
FossilOrigin-Name: 506a0d7a710e1ff2f367821e73f5080fcf63fbc5
2011-03-24 16:04:54 +00:00
dan 244593c846 Store primary key definitions for modified tables in changesets. Add the sqlite3changeset_pk() API to extract this data from a changeset iterator.
FossilOrigin-Name: 54298ee5ed183d1f1c49524f25e8ae1407f3d4b5
2011-03-24 11:22:59 +00:00
drh 9a48bf528d Merge in all the latest changes from the trunk, and especially the interface
changes to the SystemCall methods of the VFS.

FossilOrigin-Name: 9c3a6e479988e96086bef00c79dbce508a14da0d
2011-03-23 22:48:46 +00:00
dan b4480e942f Add the "indirect flag" to the changeset blob format. Also the sqlite3session_indirect() API.
FossilOrigin-Name: 1feaf2d35fd9ec777319717ae2c2929d66fe7baa
2011-03-23 16:03:11 +00:00
dan 1e7a2d4315 Add API function sqlite3_preupdate_depth(), for determining the depth of the trigger stack from within a pre-update callback.
FossilOrigin-Name: bdea70895c2c686a4dd3f4bf0a475fd1501d9551
2011-03-22 18:45:29 +00:00
dan 245b49b203 Fix a crash that can follow an OOM when "all tables" are registered with a session module.
FossilOrigin-Name: 183c236e991faaabdc768e52e926c52cf4a7abc9
2011-03-22 16:54:12 +00:00
dan ff4d0f41bb If a NULL pointer is passed to sqlite3session_attach() in place of a table name, attach all database tables to the session object.
FossilOrigin-Name: e9037e4e4ccaa5c633759c4d041b60b631b92c6c
2011-03-22 15:21:03 +00:00
dan 7aa469cdd3 Add OOM tests and related fixes for the session module.
FossilOrigin-Name: 06048a68b351e3eb15a890cb54db8a1d4b345fbc
2011-03-22 12:08:00 +00:00
shaneh 157546f4df Fix a couple typos for consistency in sessions documentation.
FossilOrigin-Name: 510198f171b9f77a4ad49c06c978c5fbb3a5b7f9
2011-03-22 02:03:23 +00:00
dan db04571c79 Remove some unreachable code in sqlite3session.c. Add test cases.
FossilOrigin-Name: 39cdfa5324ae91bfbbac733b1e3e2d33ca883340
2011-03-21 19:41:29 +00:00
drh 8cc9c1aa15 Merge in the sqlite3_db_config() enhancements for enabling and disabling
FKs and triggers from trunk.

FossilOrigin-Name: 2b3c8b9d9aa909f64a29ed8167de24c328c50d85
2011-03-21 17:17:49 +00:00
dan 12ca0b5695 Add start of fault-injection tests for session module. Fix some bugs related to the same.
FossilOrigin-Name: 32e95164d1192b87b1ab019549fd2394642cd3fe
2011-03-21 16:17:42 +00:00
dan 27453faef8 Clarify handling of NULL values in PK columns in sqlite3session.h. Add tests and fixes for the same.
FossilOrigin-Name: aed4273054cbd150c86b36ea951d17c981633ba0
2011-03-21 11:55:06 +00:00
dan 4e895da185 Fix session module problems with real (floating point) values.
FossilOrigin-Name: a192d04f4e3a9e4960a4d96d1d3ee8635bc1034d
2011-03-21 11:03:24 +00:00
dan 77e6500473 Fix some typos in sqlite3session.h.
FossilOrigin-Name: 0853e530cc8d96f025f5160540e8ab3243dea11b
2011-03-21 07:23:09 +00:00
dan a2df3d9f95 Documentation format updates to sqlite3session.h.
FossilOrigin-Name: f227f60210fba3930f3050aebb1facee8bac9c0b
2011-03-20 11:20:41 +00:00
dan d7fb7d24c6 Fix a problem involving session objects and attached databases.
FossilOrigin-Name: ad91d30073a8faa7eb064dd2e1cc4d2297d7b3f8
2011-03-19 19:19:26 +00:00
dan 1f34f8cc71 Fix a bug in changeset generation code.
FossilOrigin-Name: 825df75ba453c853953e17ec29653e11c46f92bb
2011-03-19 18:46:15 +00:00
dan 4565faa990 Move session1.test from test/ to ext/session/.
FossilOrigin-Name: c4436a936ab302aec3b7f41a4552f69ad5815744
2011-03-19 17:07:57 +00:00
dan 4131639c63 Fix a problem with resizing a hash table in sqlite3session.c.
FossilOrigin-Name: 6e5907e14d3316d56313243c4f8ce8f14d0858fc
2011-03-19 16:26:11 +00:00
dan 7cf7df7d35 Fix some bugs in sqlite3changeset_apply().
FossilOrigin-Name: 7250318dda542c5bbf28852c1f1d0f3c52ae8f96
2011-03-19 15:37:02 +00:00
dan 319eeb7b33 Fix a problem with INTEGER PRIMARY KEY columns and the pre-update hook.
FossilOrigin-Name: 24d4d5dd007197a141555bcca6f2ac9ab47cde80
2011-03-19 08:38:50 +00:00
drh 516ae18005 Merge the fix to ticket [f7b4edece25c99485] into the sessions branch.
FossilOrigin-Name: 1b736ac2934f2361dee5062e9033cbf26b41fc3a
2011-03-19 02:37:38 +00:00
dan 4c22025225 Hold the database mutex for the duration of an sqlite3changeset_apply() call. Also for the duration of all sqlite3session_xxx() calls.
FossilOrigin-Name: c615c38c3283e21c33550c093099a793761123a7
2011-03-18 18:03:13 +00:00
drh 304637c026 Fixes for compiler warnings. Minor code cleanup.
FossilOrigin-Name: 9604d13001e0a195718c7f03fc0e73e352226caa
2011-03-18 16:47:27 +00:00
dan 2635a3be20 Further improvements to documentation in sqlite3session.h.
FossilOrigin-Name: 07019bb9e8d8f2445d1e0342f74ab520e9804cb5
2011-03-18 16:13:53 +00:00
drh ea022cffdd Fix a memory allocation issues in the preupdate hook so that the hook.test
script runs clean in valgrind.

FossilOrigin-Name: bd94f4c8b1c4590c437030f0122015f1a37e2582
2011-03-18 15:13:31 +00:00
dan c21111daff Update comments in sqlite3session.h. More to come.
FossilOrigin-Name: e73e9082f3b14088752717193a10dd7657deb8af
2011-03-18 13:05:15 +00:00
drh 0639c34ecd Merge all the latest trunk enhancements into the sessions branch.
FossilOrigin-Name: 94fd5bb6da5ef4d850c2ed4ad38afabc5569dae6
2011-03-18 12:35:36 +00:00
dan e8d5648e16 Change to the session module to use user-defined primary keys instead of rowids when collecting changes.
FossilOrigin-Name: 6614cfcb9c41da71ddec3c44a3de0d4d849e1cdd
2011-03-17 19:20:27 +00:00
dan 37db03bf73 Add the sqlite3_preupdate_new() API, for retrieving the new.* values from within a pre-update callback.
FossilOrigin-Name: 526545c49f64d9063d1b888cfc14ece62fa3c13c
2011-03-16 19:59:18 +00:00
dan 6566ebe1b6 Remove the sqlite3_transaction_hook() API.
FossilOrigin-Name: b0015a1cfe63c924ee5f250aa08460522882009b
2011-03-16 09:49:14 +00:00
dan 296c76589f Fix some bugs and other code issues in the session module.
FossilOrigin-Name: f2930840e4af3d7d9cb199d316502932fcbbb867
2011-03-15 16:37:27 +00:00
dan 0c698471d1 Fix handling of return values from the conflict handler. Document the conflict handler arguments and return codes in sqlite3session.h.
FossilOrigin-Name: cbbb274e500237dbf7155a51d4f9c17583d704ea
2011-03-14 19:49:23 +00:00
dan 37f133ec31 Fix some issues with UPDATE changes in the session module.
FossilOrigin-Name: 57862efe718fdc93401998f9058511292a0e1a50
2011-03-12 17:22:46 +00:00
dan d5f0767c9c Add the sqlite3changeset_apply() function. Does not yet handle all cases.
FossilOrigin-Name: 2b19be7bf753c7dd12e1c3b384981a3ea1bc8145
2011-03-11 19:05:52 +00:00
dan 91ddd5595b Add a function to the session extension invert a changeset.
FossilOrigin-Name: 75d5dff725dbb66d67d56ad042926f1daae56dbe
2011-03-09 11:17:05 +00:00
dan 4fccf43aae Add start of sessions feature.
FossilOrigin-Name: 269a81a37d7dbdcdec3c2322074916af0fbac91c
2011-03-08 19:22:50 +00:00
dan 21e8d0126d Add the experimental sqlite3_transaction_hook() API.
FossilOrigin-Name: 093d8cd8e2f3a6af5d40cf810e396f4919eb5cef
2011-03-03 20:05:59 +00:00
dan 46c47d4677 Add the experimental sqlite3_preupdate_hook() API.
FossilOrigin-Name: 6145d7b89f83500318713779c60f79a7ab2098ba
2011-03-01 18:42:07 +00:00
732 changed files with 111849 additions and 14407 deletions
+87 -31
View File
@@ -30,7 +30,8 @@ BCC = @BUILD_CC@ @BUILD_CFLAGS@
#
CC = @CC@
CFLAGS = @CPPFLAGS@ @CFLAGS@
TCC = $(CC) $(CFLAGS) -I. -I${TOP}/src -I${TOP}/ext/rtree -I${TOP}/ext/fts3
TCC = ${CC} ${CFLAGS} -I. -I${TOP}/src -I${TOP}/ext/rtree -I${TOP}/ext/icu
TCC += -I${TOP}/ext/fts3 -I${TOP}/ext/async -I${TOP}/ext/session
# Define this for the autoconf-based build, so that the code knows it can
# include the generated config.h
@@ -173,13 +174,14 @@ LIBOBJS0 = alter.lo analyze.lo attach.lo auth.lo \
fts3_unicode.lo fts3_unicode2.lo fts3_write.lo \
fts5.lo \
func.lo global.lo hash.lo \
icu.lo insert.lo journal.lo json1.lo legacy.lo loadext.lo \
icu.lo insert.lo json1.lo legacy.lo loadext.lo \
main.lo malloc.lo mem0.lo mem1.lo mem2.lo mem3.lo mem5.lo \
memjournal.lo \
mutex.lo mutex_noop.lo mutex_unix.lo mutex_w32.lo \
notify.lo opcodes.lo os.lo os_unix.lo os_win.lo \
pager.lo parse.lo pcache.lo pcache1.lo pragma.lo prepare.lo printf.lo \
random.lo resolve.lo rowset.lo rtree.lo select.lo sqlite3rbu.lo status.lo \
random.lo resolve.lo rowset.lo rtree.lo \
sqlite3session.lo select.lo sqlite3rbu.lo status.lo stmt.lo \
table.lo threads.lo tokenize.lo treeview.lo trigger.lo \
update.lo util.lo vacuum.lo \
vdbe.lo vdbeapi.lo vdbeaux.lo vdbeblob.lo vdbemem.lo vdbesort.lo \
@@ -224,7 +226,6 @@ SRC = \
$(TOP)/src/hash.h \
$(TOP)/src/hwtime.h \
$(TOP)/src/insert.c \
$(TOP)/src/journal.c \
$(TOP)/src/legacy.c \
$(TOP)/src/loadext.c \
$(TOP)/src/main.c \
@@ -342,13 +343,15 @@ SRC += \
SRC += \
$(TOP)/ext/rtree/rtree.h \
$(TOP)/ext/rtree/rtree.c
SRC += \
$(TOP)/ext/session/sqlite3session.c \
$(TOP)/ext/session/sqlite3session.h
SRC += \
$(TOP)/ext/rbu/sqlite3rbu.h \
$(TOP)/ext/rbu/sqlite3rbu.c
SRC += \
$(TOP)/ext/misc/json1.c
$(TOP)/ext/misc/json1.c \
$(TOP)/ext/misc/stmt.c
# Generated source code files
#
@@ -376,9 +379,11 @@ TESTSRC = \
$(TOP)/src/test_autoext.c \
$(TOP)/src/test_async.c \
$(TOP)/src/test_backup.c \
$(TOP)/src/test_bestindex.c \
$(TOP)/src/test_blob.c \
$(TOP)/src/test_btree.c \
$(TOP)/src/test_config.c \
$(TOP)/src/test_delete.c \
$(TOP)/src/test_demovfs.c \
$(TOP)/src/test_devsym.c \
$(TOP)/src/test_fs.c \
@@ -405,14 +410,17 @@ TESTSRC = \
$(TOP)/src/test_windirent.c \
$(TOP)/src/test_wsd.c \
$(TOP)/ext/fts3/fts3_term.c \
$(TOP)/ext/fts3/fts3_test.c \
$(TOP)/ext/fts3/fts3_test.c \
$(TOP)/ext/session/test_session.c \
$(TOP)/ext/rbu/test_rbu.c
# Statically linked extensions
#
TESTSRC += \
$(TOP)/ext/misc/amatch.c \
$(TOP)/ext/misc/carray.c \
$(TOP)/ext/misc/closure.c \
$(TOP)/ext/misc/csv.c \
$(TOP)/ext/misc/eval.c \
$(TOP)/ext/misc/fileio.c \
$(TOP)/ext/misc/fuzzer.c \
@@ -423,6 +431,7 @@ TESTSRC += \
$(TOP)/ext/misc/nextchar.c \
$(TOP)/ext/misc/percentile.c \
$(TOP)/ext/misc/regexp.c \
$(TOP)/ext/misc/remember.c \
$(TOP)/ext/misc/series.c \
$(TOP)/ext/misc/spellfix.c \
$(TOP)/ext/misc/totype.c \
@@ -474,7 +483,8 @@ TESTSRC2 = \
$(TOP)/ext/fts3/fts3_term.c \
$(TOP)/ext/fts3/fts3_tokenizer.c \
$(TOP)/ext/fts3/fts3_write.c \
$(TOP)/ext/async/sqlite3async.c
$(TOP)/ext/async/sqlite3async.c \
$(TOP)/ext/session/sqlite3session.c
# Header files used by all library source files.
#
@@ -533,7 +543,8 @@ TESTPROGS = \
testfixture$(TEXE) \
sqlite3$(TEXE) \
sqlite3_analyzer$(TEXE) \
sqldiff$(TEXE)
sqldiff$(TEXE) \
dbhash$(TEXE)
# Databases containing fuzzer test cases
#
@@ -541,7 +552,8 @@ FUZZDATA = \
$(TOP)/test/fuzzdata1.db \
$(TOP)/test/fuzzdata2.db \
$(TOP)/test/fuzzdata3.db \
$(TOP)/test/fuzzdata4.db
$(TOP)/test/fuzzdata4.db \
$(TOP)/test/fuzzdata5.db
# Standard options to testfixture
#
@@ -550,9 +562,15 @@ TESTOPTS = --verbose=file --output=test-out.txt
# Extra compiler options for various shell tools
#
SHELL_OPT = -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS4
# SHELL_OPT += -DSQLITE_ENABLE_FTS5
SHELL_OPT += -DSQLITE_ENABLE_EXPLAIN_COMMENTS
SHELL_OPT += -DSQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
SHELL_OPT += -DSQLITE_ENABLE_STMTVTAB
FUZZERSHELL_OPT = -DSQLITE_ENABLE_JSON1
FUZZCHECK_OPT = -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_MEMSYS5
FUZZCHECK_OPT = -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_MEMSYS5 -DSQLITE_OSS_FUZZ
FUZZCHECK_OPT += -DSQLITE_MAX_MEMORY=50000000
FUZZCHECK_SRC = $(TOP)/test/fuzzcheck.c $(TOP)/test/ossfuzz.c
DBFUZZ_OPT =
# This is the default Makefile target. The objects listed here
# are what get build when you type just "make" with no arguments.
@@ -581,8 +599,15 @@ sqlite3$(TEXE): $(TOP)/src/shell.c sqlite3.c
$(TOP)/src/shell.c sqlite3.c \
$(LIBREADLINE) $(TLIBS) -rpath "$(libdir)"
sqldiff$(TEXE): $(TOP)/tool/sqldiff.c sqlite3.c sqlite3.h
$(LTLINK) -o $@ $(TOP)/tool/sqldiff.c sqlite3.c $(TLIBS)
sqldiff$(TEXE): $(TOP)/tool/sqldiff.c sqlite3.lo sqlite3.h
$(LTLINK) -o $@ $(TOP)/tool/sqldiff.c sqlite3.lo $(TLIBS)
dbhash$(TEXE): $(TOP)/tool/dbhash.c sqlite3.lo sqlite3.h
$(LTLINK) -o $@ $(TOP)/tool/dbhash.c sqlite3.lo $(TLIBS)
scrub$(TEXE): $(TOP)/ext/misc/scrub.c sqlite3.lo
$(LTLINK) -o $@ -I. -DSCRUB_STANDALONE \
$(TOP)/ext/misc/scrub.c sqlite3.lo $(TLIBS)
srcck1$(BEXE): $(TOP)/tool/srcck1.c
$(BCC) -o srcck1$(BEXE) $(TOP)/tool/srcck1.c
@@ -594,11 +619,18 @@ fuzzershell$(TEXE): $(TOP)/tool/fuzzershell.c sqlite3.c sqlite3.h
$(LTLINK) -o $@ $(FUZZERSHELL_OPT) \
$(TOP)/tool/fuzzershell.c sqlite3.c $(TLIBS)
fuzzcheck$(TEXE): $(TOP)/test/fuzzcheck.c sqlite3.c sqlite3.h
$(LTLINK) -o $@ $(FUZZCHECK_OPT) $(TOP)/test/fuzzcheck.c sqlite3.c $(TLIBS)
fuzzcheck$(TEXE): $(FUZZCHECK_SRC) sqlite3.c sqlite3.h
$(LTLINK) -o $@ $(FUZZCHECK_OPT) $(FUZZCHECK_SRC) sqlite3.c $(TLIBS)
mptester$(TEXE): sqlite3.c $(TOP)/mptest/mptest.c
$(LTLINK) -o $@ -I. $(TOP)/mptest/mptest.c sqlite3.c \
ossshell$(TEXE): $(TOP)/test/ossfuzz.c $(TOP)/test/ossshell.c sqlite3.c sqlite3.h
$(LTLINK) -o $@ $(FUZZCHECK_OPT) $(TOP)/test/ossshell.c \
$(TOP)/test/ossfuzz.c sqlite3.c $(TLIBS)
dbfuzz$(TEXE): $(TOP)/test/dbfuzz.c sqlite3.c sqlite3.h
$(LTLINK) -o $@ $(DBFUZZ_OPT) $(TOP)/test/dbfuzz.c sqlite3.c $(TLIBS)
mptester$(TEXE): sqlite3.lo $(TOP)/mptest/mptest.c
$(LTLINK) -o $@ -I. $(TOP)/mptest/mptest.c sqlite3.lo \
$(TLIBS) -rpath "$(libdir)"
MPTEST1=./mptester$(TEXE) mptest.db $(TOP)/mptest/crash01.test --repeat 20
@@ -634,6 +666,7 @@ mptest: mptester$(TEXE)
sqlite3.c: .target_source $(TOP)/tool/mksqlite3c.tcl
$(TCLSH_CMD) $(TOP)/tool/mksqlite3c.tcl
cp tsrc/shell.c tsrc/sqlite3ext.h .
cp $(TOP)/ext/session/sqlite3session.h .
sqlite3ext.h: .target_source
cp tsrc/sqlite3ext.h .
@@ -738,9 +771,6 @@ hash.lo: $(TOP)/src/hash.c $(HDR)
insert.lo: $(TOP)/src/insert.c $(HDR)
$(LTCOMPILE) $(TEMP_STORE) -c $(TOP)/src/insert.c
journal.lo: $(TOP)/src/journal.c $(HDR)
$(LTCOMPILE) $(TEMP_STORE) -c $(TOP)/src/journal.c
legacy.lo: $(TOP)/src/legacy.c $(HDR)
$(LTCOMPILE) $(TEMP_STORE) -c $(TOP)/src/legacy.c
@@ -1000,9 +1030,15 @@ fts3_write.lo: $(TOP)/ext/fts3/fts3_write.c $(HDR) $(EXTHDR)
rtree.lo: $(TOP)/ext/rtree/rtree.c $(HDR) $(EXTHDR)
$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)/ext/rtree/rtree.c
sqlite3session.lo: $(TOP)/ext/session/sqlite3session.c $(HDR) $(EXTHDR)
$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)/ext/session/sqlite3session.c
json1.lo: $(TOP)/ext/misc/json1.c
$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)/ext/misc/json1.c
stmt.lo: $(TOP)/ext/misc/stmt.c
$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)/ext/misc/stmt.c
# FTS5 things
#
FTS5_SRC = \
@@ -1025,7 +1061,7 @@ FTS5_SRC = \
fts5parse.c: $(TOP)/ext/fts5/fts5parse.y lemon
cp $(TOP)/ext/fts5/fts5parse.y .
rm -f fts5parse.h
./lemon $(OPTS) fts5parse.y
./lemon$(BEXE) $(OPTS) fts5parse.y
fts5parse.h: fts5parse.c
@@ -1050,6 +1086,9 @@ sqlite3rbu.lo: $(TOP)/ext/rbu/sqlite3rbu.c $(HDR) $(EXTHDR)
TESTFIXTURE_FLAGS = -DTCLSH=1 -DSQLITE_TEST=1 -DSQLITE_CRASH_TEST=1
TESTFIXTURE_FLAGS += -DSQLITE_SERVER=1 -DSQLITE_PRIVATE="" -DSQLITE_CORE
TESTFIXTURE_FLAGS += -DBUILD_sqlite
TESTFIXTURE_FLAGS += -DSQLITE_SERIES_CONSTRAINT_VERIFY=1
TESTFIXTURE_FLAGS += -DSQLITE_DEFAULT_PAGE_SIZE=1024
TESTFIXTURE_FLAGS += -DSQLITE_ENABLE_STMTVTAB
TESTFIXTURE_SRC0 = $(TESTSRC2) libsqlite3.la
TESTFIXTURE_SRC1 = sqlite3.c
@@ -1082,6 +1121,11 @@ fastfuzztest: fuzzcheck$(TEXE) $(FUZZDATA)
valgrindfuzz: fuzzcheck$(TEXT) $(FUZZDATA)
valgrind ./fuzzcheck$(TEXE) --cell-size-check --limit-mem 10M --timeout 600 $(FUZZDATA)
# The veryquick.test TCL tests.
#
tcltest: ./testfixture$(TEXE)
./testfixture$(TEXE) $(TOP)/test/veryquick.test $(TESTOPTS)
# Minimal testing that runs in less than 3 minutes
#
quicktest: ./testfixture$(TEXE)
@@ -1090,8 +1134,7 @@ quicktest: ./testfixture$(TEXE)
# This is the common case. Run many tests that do not take too long,
# including fuzzcheck, sqlite3_analyzer, and sqldiff tests.
#
test: $(TESTPROGS) sourcetest fastfuzztest
./testfixture$(TEXE) $(TOP)/test/veryquick.test $(TESTOPTS)
test: fastfuzztest sourcetest $(TESTPROGS) tcltest
# Run a test using valgrind. This can take a really long time
# because valgrind is so much slower than a native machine.
@@ -1118,6 +1161,10 @@ sqlite3_analyzer.c: sqlite3.c $(TOP)/src/tclsqlite.c $(TOP)/tool/spaceanal.tcl
sqlite3_analyzer$(TEXE): sqlite3_analyzer.c
$(LTLINK) sqlite3_analyzer.c -o $@ $(LIBTCL) $(TLIBS)
dbdump$(TEXE): $(TOP)/ext/misc/dbdump.c sqlite3.lo
$(LTLINK) -DDBDUMP_STANDALONE -o $@ \
$(TOP)/ext/misc/dbdump.c sqlite3.lo $(TLIBS)
showdb$(TEXE): $(TOP)/tool/showdb.c sqlite3.lo
$(LTLINK) -o $@ $(TOP)/tool/showdb.c sqlite3.lo $(TLIBS)
@@ -1130,17 +1177,25 @@ showjournal$(TEXE): $(TOP)/tool/showjournal.c sqlite3.lo
showwal$(TEXE): $(TOP)/tool/showwal.c sqlite3.lo
$(LTLINK) -o $@ $(TOP)/tool/showwal.c sqlite3.lo $(TLIBS)
changeset$(TEXE): $(TOP)/ext/session/changeset.c sqlite3.lo
$(LTLINK) -o $@ $(TOP)/ext/session/changeset.c sqlite3.lo $(TLIBS)
rollback-test$(TEXE): $(TOP)/tool/rollback-test.c sqlite3.lo
$(LTLINK) -o $@ $(TOP)/tool/rollback-test.c sqlite3.lo $(TLIBS)
LogEst$(TEXE): $(TOP)/tool/logest.c sqlite3.h
$(LTLINK) -I. -o $@ $(TOP)/tool/logest.c
wordcount$(TEXE): $(TOP)/test/wordcount.c sqlite3.c
$(LTLINK) -o $@ $(TOP)/test/wordcount.c sqlite3.c $(TLIBS)
wordcount$(TEXE): $(TOP)/test/wordcount.c sqlite3.lo
$(LTLINK) -o $@ $(TOP)/test/wordcount.c sqlite3.lo $(TLIBS)
speedtest1$(TEXE): $(TOP)/test/speedtest1.c sqlite3.lo
$(LTLINK) -o $@ $(TOP)/test/speedtest1.c sqlite3.lo $(TLIBS)
speedtest1$(TEXE): $(TOP)/test/speedtest1.c sqlite3.c
$(LTLINK) $(ST_OPT) -o $@ $(TOP)/test/speedtest1.c sqlite3.c $(TLIBS)
KV_OPT += -DSQLITE_DIRECT_OVERFLOW_READ
kvtest$(TEXE): $(TOP)/test/kvtest.c sqlite3.c
$(LTLINK) $(KV_OPT) -o $@ $(TOP)/test/kvtest.c sqlite3.c $(TLIBS)
rbu$(EXE): $(TOP)/ext/rbu/rbu.c $(TOP)/ext/rbu/sqlite3rbu.c sqlite3.lo
$(LTLINK) -I. -o $@ $(TOP)/ext/rbu/rbu.c sqlite3.lo $(TLIBS)
@@ -1152,8 +1207,9 @@ loadfts$(EXE): $(TOP)/tool/loadfts.c libsqlite3.la
# symbols that do not begin with "sqlite3_". It is run as part of the
# releasetest.tcl script.
#
VALIDIDS=' sqlite3(changeset|changegroup|session)?_'
checksymbols: sqlite3.lo
nm -g --defined-only sqlite3.o | grep -v " sqlite3_" ; test $$? -ne 0
nm -g --defined-only sqlite3.lo | egrep -v $(VALIDIDS); test $$? -ne 0
echo '0 errors out of 1 tests'
# Build the amalgamation-autoconf package. The amalamgation-tarball target builds
@@ -1216,13 +1272,12 @@ clean:
rm -f lemon$(BEXE) lempar.c parse.* sqlite*.tar.gz
rm -f mkkeywordhash$(BEXE) keywordhash.h
rm -f *.da *.bb *.bbg gmon.out
rm -rf quota2a quota2b quota2c
rm -rf tsrc .target_source
rm -f tclsqlite3$(TEXE)
rm -f testfixture$(TEXE) test.db
rm -f LogEst$(TEXE) fts3view$(TEXE) rollback-test$(TEXE) showdb$(TEXE)
rm -f showjournal$(TEXE) showstat4$(TEXE) showwal$(TEXE) speedtest1$(TEXE)
rm -f wordcount$(TEXE)
rm -f wordcount$(TEXE) changeset$(TEXE)
rm -f sqlite3.dll sqlite3.lib sqlite3.exp sqlite3.def
rm -f sqlite3.c
rm -f sqlite3rc.h
@@ -1235,6 +1290,7 @@ clean:
rm -f fuzzershell fuzzershell.exe
rm -f fuzzcheck fuzzcheck.exe
rm -f sqldiff sqldiff.exe
rm -f dbhash dbhash.exe
rm -f fts5.* fts5parse.*
distclean: clean
+412 -186
View File
File diff suppressed because it is too large Load Diff
+89 -35
View File
@@ -8,6 +8,50 @@ If you are reading this on a Git mirror someplace, you are doing it wrong.
The [official repository](https://www.sqlite.org/src/) is better. Go there
now.
## Obtaining The Code
SQLite sources are managed using the
[Fossil](https://www.fossil-scm.org/), a distributed version control system
that was specifically designed to support SQLite development.
If you do not want to use Fossil, you can download tarballs or ZIP
archives as follows:
* Lastest trunk check-in:
<https://www.sqlite.org/src/tarball/sqlite.tar.gz> or
<https://www.sqlite.org/src/zip/sqlite.zip>.
* Latest release:
<https://www.sqlite.org/src/tarball/sqlite.tar.gz?r=release> or
<https://www.sqlite.org/src/zip/sqlite.zip?r=release>.
* For other check-ins, substitute an appropriate branch name or
tag or hash prefix for "release" in the URLs of the previous
bullet. Or browse the [timeline](https://www.sqlite.org/src/timeline)
to locate the check-in desired, click on its information page link,
then click on the "Tarball" or "ZIP Archive" links on the information
page.
If you do want to use Fossil to check out the source tree,
first install Fossil version 2.0 or later.
(Source tarballs and precompiled binaries available
[here](https://www.fossil-scm.org/fossil/uv/download.html). Fossil is
a stand-alone program. To install, simply download or build the single
executable file and put that file someplace on your $PATH.)
Then run commands like this:
mkdir ~/sqlite
cd ~/sqlite
fossil clone https://www.sqlite.org/src sqlite.fossil
fossil open sqlite.fossil
After setting up a repository using the steps above, you can always
update to the lastest version using:
fossil update trunk ;# latest trunk check-in
fossil update release ;# latest official release
Or type "fossil ui" to get a web-based user interface.
## Compiling
First create a directory in which to place
@@ -18,13 +62,13 @@ script found at the root of the source tree. Then run "make".
For example:
tar xzf sqlite.tar.gz ;# Unpack the source tree into "sqlite"
mkdir bld ;# Build will occur in a sibling directory
cd bld ;# Change to the build directory
../sqlite/configure ;# Run the configure script
make ;# Run the makefile.
make sqlite3.c ;# Build the "amalgamation" source file
make test ;# Run some tests (requires Tcl)
tar xzf sqlite.tar.gz ;# Unpack the source tree into "sqlite"
mkdir bld ;# Build will occur in a sibling directory
cd bld ;# Change to the build directory
../sqlite/configure ;# Run the configure script
make ;# Run the makefile.
make sqlite3.c ;# Build the "amalgamation" source file
make test ;# Run some tests (requires Tcl)
See the makefile for additional targets.
@@ -43,13 +87,13 @@ with the provided "Makefile.msc" to build one of the supported targets.
For example:
mkdir bld
cd bld
nmake /f Makefile.msc TOP=..\sqlite
nmake /f Makefile.msc sqlite3.c TOP=..\sqlite
nmake /f Makefile.msc sqlite3.dll TOP=..\sqlite
nmake /f Makefile.msc sqlite3.exe TOP=..\sqlite
nmake /f Makefile.msc test TOP=..\sqlite
mkdir bld
cd bld
nmake /f Makefile.msc TOP=..\sqlite
nmake /f Makefile.msc sqlite3.c TOP=..\sqlite
nmake /f Makefile.msc sqlite3.dll TOP=..\sqlite
nmake /f Makefile.msc sqlite3.exe TOP=..\sqlite
nmake /f Makefile.msc test TOP=..\sqlite
There are several build options that can be set via the NMAKE command
line. For example, to build for WinRT, simply add "FOR_WINRT=1" argument
@@ -64,19 +108,22 @@ The makefiles also require AWK.
## Source Code Tour
Most of the core source files are in the **src/** subdirectory. But
src/ also contains files used to build the "testfixture" test harness;
those file all begin with "test". And src/ contains the "shell.c" file
which is the main program for the "sqlite3.exe" command-line shell and
the "tclsqlite.c" file which implements the bindings to SQLite from the
Tcl programming language. (Historical note: SQLite began as a Tcl
Most of the core source files are in the **src/** subdirectory. The
**src/** folder also contains files used to build the "testfixture" test
harness. The names of the source files used by "testfixture" all begin
with "test".
The **src/** also contains the "shell.c" file
which is the main program for the "sqlite3.exe"
[command-line shell](https://sqlite.org/cli.html) and
the "tclsqlite.c" file which implements the
[TCL bindings](https://sqlite.org/tclsqlite.html) for SQLite.
(Historical note: SQLite began as a Tcl
extension and only later escaped to the wild as an independent library.)
Test scripts and programs are found in the **test/** subdirectory.
There are other test suites for SQLite (see
[How SQLite Is Tested](http://www.sqlite.org/testing.html))
but those other test suites are
in separate source repositories.
Addtional test code is found in other source repositories.
See [How SQLite Is Tested](http://www.sqlite.org/testing.html) for
additional information.
The **ext/** subdirectory contains code for extensions. The
Full-text search engine is in **ext/fts3**. The R-Tree engine is in
@@ -100,7 +147,7 @@ manually-edited files and automatically-generated files.
The SQLite interface is defined by the **sqlite3.h** header file, which is
generated from src/sqlite.h.in, ./manifest.uuid, and ./VERSION. The
[Tcl script](http://www.tcl.tk) at tool/mksqlite3h.tcl does the conversion.
The manifest.uuid file contains the SHA1 hash of the particular check-in
The manifest.uuid file contains the SHA3 hash of the particular check-in
and is used to generate the SQLITE\_SOURCE\_ID macro. The VERSION file
contains the current SQLite version number. The sqlite3.h header is really
just a copy of src/sqlite.h.in with the source-id and version number inserted
@@ -111,9 +158,8 @@ used to generate that documentation are in a separate source repository.
The SQL language parser is **parse.c** which is generate from a grammar in
the src/parse.y file. The conversion of "parse.y" into "parse.c" is done
by the [lemon](./doc/lemon.html) LALR(1) parser generator. The source code
for lemon is at tool/lemon.c. Lemon uses a
template for generating its parser. A generic template is in tool/lempar.c,
but SQLite uses a slightly modified template found in src/lempar.c.
for lemon is at tool/lemon.c. Lemon uses the tool/lempar.c file as a
template for generating its parser.
Lemon also generates the **parse.h** header file, at the same time it
generates parse.c. But the parse.h header file is
@@ -133,6 +179,13 @@ that maps SQL language keywords (ex: "CREATE", "SELECT", "INDEX", etc.) into
the numeric codes used by the parse.c parser. The keywordhash.h file is
generated by a C-language program at tool mkkeywordhash.c.
The **pragma.h** header file contains various definitions used to parse
and implement the PRAGMA statements. The header is generated by a
script **tool/mkpragmatab.tcl**. If you want to add a new PRAGMA, edit
the **tool/mkpragmatab.tcl** file to insert the information needed by the
parser for your new PRAGMA, then run the script to regenerate the
**pragma.h** header file.
### The Amalgamation
All of the individual C source code and header files (both manually-edited
@@ -150,7 +203,7 @@ subdirectory (using the equivalent of "make target_source") then the
tool/mksqlite3c.tcl script is run to copy them all together in just the
right order while resolving internal "#include" references.
The amalgamation source file is more than 100K lines long. Some symbolic
The amalgamation source file is more than 200K lines long. Some symbolic
debuggers (most notably MSVC) are unable to deal with files longer than 64K
lines. To work around this, a separate Tcl script, tool/split-sqlite3c.tcl,
can be run on the amalgamation to break it up into a single small C file
@@ -167,14 +220,15 @@ See the [architectural description](http://www.sqlite.org/arch.html)
for details. Other documents that are useful in
(helping to understand how SQLite works include the
[file format](http://www.sqlite.org/fileformat2.html) description,
the [virtual machine](http://www.sqlite.org/vdbe.html) that runs
the [virtual machine](http://www.sqlite.org/opcode.html) that runs
prepared statements, the description of
[how transactions work](http://www.sqlite.org/atomiccommit.html), and
the [overview of the query planner](http://www.sqlite.org/optoverview.html).
Unfortunately, years of effort have gone into optimizating SQLite, both
Years of effort have gone into optimizating SQLite, both
for small size and high performance. And optimizations tend to result in
complex code. So there is a lot of complexity in the SQLite implementation.
complex code. So there is a lot of complexity in the current SQLite
implementation. It will not be the easiest library in the world to hack.
Key files:
@@ -185,7 +239,7 @@ Key files:
* **sqliteInt.h** - this header file defines many of the data objects
used internally by SQLite.
* **parse.y** - This file describes the LALR(1) grammer that SQLite uses
* **parse.y** - This file describes the LALR(1) grammar that SQLite uses
to parse SQL statements, and the actions that are taken at each step
in the parsing process.
@@ -218,13 +272,13 @@ Key files:
is not part of the core SQLite library. But as most of the tests in this
repository are written in Tcl, the Tcl language bindings are important.
There are many other source files. Each has a suscinct header comment that
There are many other source files. Each has a succinct header comment that
describes its purpose and role within the larger system.
## Contacts
The main SQLite webpage is [http://www.sqlite.org/](http://www.sqlite.org/)
with geographically distributed backup servers at
with geographically distributed backups at
[http://www2.sqlite.org/](http://www2.sqlite.org) and
[http://www3.sqlite.org/](http://www3.sqlite.org).
+1 -1
View File
@@ -1 +1 @@
3.11.0
3.20.0
+5 -4
View File
@@ -1,19 +1,20 @@
AM_CFLAGS = @THREADSAFE_FLAGS@ @DYNAMIC_EXTENSION_FLAGS@ @FTS5_FLAGS@ @JSON1_FLAGS@ -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_RTREE
AM_CFLAGS = @THREADSAFE_FLAGS@ @DYNAMIC_EXTENSION_FLAGS@ @FTS5_FLAGS@ @JSON1_FLAGS@ @SESSION_FLAGS@ -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_RTREE
lib_LTLIBRARIES = libsqlite3.la
libsqlite3_la_SOURCES = sqlite3.c
libsqlite3_la_LDFLAGS = -no-undefined -version-info 8:6:8
bin_PROGRAMS = sqlite3
sqlite3_SOURCES = shell.c sqlite3.c sqlite3.h
sqlite3_LDADD = @READLINE_LIBS@
sqlite3_SOURCES = shell.c sqlite3.h
EXTRA_sqlite3_SOURCES = sqlite3.c
sqlite3_LDADD = @EXTRA_SHELL_OBJ@ @READLINE_LIBS@
sqlite3_DEPENDENCIES = @EXTRA_SHELL_OBJ@
sqlite3_CFLAGS = $(AM_CFLAGS) -DSQLITE_ENABLE_EXPLAIN_COMMENTS
include_HEADERS = sqlite3.h sqlite3ext.h
EXTRA_DIST = sqlite3.1 tea Makefile.msc sqlite3.rc README.txt
EXTRA_DIST = sqlite3.1 tea Makefile.msc sqlite3.rc README.txt Replace.cs
pkgconfigdir = ${libdir}/pkgconfig
pkgconfig_DATA = sqlite3.pc
+106 -29
View File
@@ -21,7 +21,28 @@ TOP = .
# Set this non-0 to enable full warnings (-W4, etc) when compiling.
#
!IFNDEF USE_FULLWARN
USE_FULLWARN = 0
USE_FULLWARN = 1
!ENDIF
# Set this non-0 to enable treating warnings as errors (-WX, etc) when
# compiling.
#
!IFNDEF USE_FATAL_WARN
USE_FATAL_WARN = 0
!ENDIF
# Set this non-0 to enable full runtime error checks (-RTC1, etc). This
# has no effect if (any) optimizations are enabled.
#
!IFNDEF USE_RUNTIME_CHECKS
USE_RUNTIME_CHECKS = 0
!ENDIF
# Set this non-0 to create a SQLite amalgamation file that excludes the
# various built-in extensions.
#
!IFNDEF MINIMAL_AMALGAMATION
MINIMAL_AMALGAMATION = 0
!ENDIF
# Set this non-0 to use "stdcall" calling convention for the core library
@@ -119,12 +140,12 @@ USE_RC = 1
FOR_WINRT = 0
!ENDIF
# Set this non-0 to compile binaries suitable for the UAP environment.
# Set this non-0 to compile binaries suitable for the UWP environment.
# This setting does not apply to any binaries that require Tcl to operate
# properly (i.e. the text fixture, etc).
#
!IFNDEF FOR_UAP
FOR_UAP = 0
!IFNDEF FOR_UWP
FOR_UWP = 0
!ENDIF
# Set this non-0 to compile binaries suitable for the Windows 10 platform.
@@ -183,6 +204,12 @@ DEBUG = 0
OPTIMIZATIONS = 2
!ENDIF
# Set this to non-0 to enable support for the session extension.
#
!IFNDEF SESSION
SESSION = 0
!ENDIF
# Set the source code file to be used by executables and libraries when
# they need the amalgamation.
#
@@ -204,37 +231,64 @@ SQLITE3H = sqlite3.h
# This is the name to use for the SQLite dynamic link library (DLL).
#
!IFNDEF SQLITE3DLL
!IF $(FOR_WIN10)!=0
SQLITE3DLL = winsqlite3.dll
!ELSE
SQLITE3DLL = sqlite3.dll
!ENDIF
!ENDIF
# This is the name to use for the SQLite import library (LIB).
#
!IFNDEF SQLITE3LIB
!IF $(FOR_WIN10)!=0
SQLITE3LIB = winsqlite3.lib
!ELSE
SQLITE3LIB = sqlite3.lib
!ENDIF
!ENDIF
# This is the name to use for the SQLite shell executable (EXE).
#
!IFNDEF SQLITE3EXE
!IF $(FOR_WIN10)!=0
SQLITE3EXE = winsqlite3shell.exe
!ELSE
SQLITE3EXE = sqlite3.exe
!ENDIF
!ENDIF
# This is the argument used to set the program database (PDB) file for the
# SQLite shell executable (EXE).
#
!IFNDEF SQLITE3EXEPDB
!IF $(FOR_WIN10)!=0
SQLITE3EXEPDB =
!ELSE
SQLITE3EXEPDB = /pdb:sqlite3sh.pdb
!ENDIF
!ENDIF
# These are the "standard" SQLite compilation options used when compiling for
# the Windows platform.
#
!IFNDEF OPT_FEATURE_FLAGS
!IF $(MINIMAL_AMALGAMATION)==0
OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_FTS3=1
OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_RTREE=1
!ENDIF
OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_COLUMN_METADATA=1
!ENDIF
# Should the session extension be enabled? If so, add compilation options
# to enable it.
#
!IF $(SESSION)!=0
OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_SESSION=1
OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_PREUPDATE_HOOK=1
!ENDIF
# These are the "extended" SQLite compilation options used when compiling for
# the Windows 10 platform.
#
@@ -275,6 +329,14 @@ PROGRAMFILES_X86 = $(PROGRAMFILES_X86:\\=\)
CC = cl.exe
!ENDIF
# Check for the predefined command macro CSC. This should point to a working
# C Sharp compiler binary. If it is not defined, simply define it to the
# legacy default value 'csc.exe'.
#
!IFNDEF CSC
CSC = csc.exe
!ENDIF
# Check for the command macro LD. This should point to the linker binary for
# the target platform. If it is not defined, simply define it to the legacy
# default value 'link.exe'.
@@ -399,18 +461,15 @@ TCC = $(CC) -nologo -W4 -DINCLUDE_MSVC_H=1 $(CCOPTS) $(TCCOPTS)
TCC = $(CC) -nologo -W3 $(CCOPTS) $(TCCOPTS)
!ENDIF
# Check if warnings should be treated as errors when compiling.
#
!IF $(USE_FATAL_WARN)!=0
TCC = $(TCC) -WX
!ENDIF
TCC = $(TCC) -DSQLITE_OS_WIN=1 -I. -I$(TOP) -fp:precise
RCC = $(RC) -DSQLITE_OS_WIN=1 -I. -I$(TOP) $(RCOPTS) $(RCCOPTS)
# Adjust the names of the primary targets for use with Windows 10.
#
!IF $(FOR_WIN10)!=0
SQLITE3DLL = winsqlite3.dll
SQLITE3LIB = winsqlite3.lib
SQLITE3EXE = winsqlite3shell.exe
SQLITE3EXEPDB =
!ENDIF
# Check if we want to use the "stdcall" calling convention when compiling.
# This is not supported by the compilers for non-x86 platforms. It should
# also be noted here that building any target with these "stdcall" options
@@ -420,12 +479,12 @@ SQLITE3EXEPDB =
#
!IF $(USE_STDCALL)!=0 || $(FOR_WIN10)!=0
!IF "$(PLATFORM)"=="x86"
CORE_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_STDCALL=__stdcall
SHELL_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_STDCALL=__stdcall
CORE_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_APICALL=__stdcall -DSQLITE_CALLBACK=__stdcall -DSQLITE_SYSAPI=__stdcall
SHELL_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_APICALL=__stdcall -DSQLITE_CALLBACK=__stdcall -DSQLITE_SYSAPI=__stdcall
!ELSE
!IFNDEF PLATFORM
CORE_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_STDCALL=__stdcall
SHELL_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_STDCALL=__stdcall
CORE_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_APICALL=__stdcall -DSQLITE_CALLBACK=__stdcall -DSQLITE_SYSAPI=__stdcall
SHELL_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_APICALL=__stdcall -DSQLITE_CALLBACK=__stdcall -DSQLITE_SYSAPI=__stdcall
!ELSE
CORE_CCONV_OPTS =
SHELL_CCONV_OPTS =
@@ -450,8 +509,10 @@ CORE_COMPILE_OPTS = $(CORE_CCONV_OPTS)
# when linking.
#
!IFNDEF CORE_LINK_DEP
!IF $(DYNAMIC_SHELL)!=0 || $(FOR_WIN10)!=0
!IF $(DYNAMIC_SHELL)!=0
CORE_LINK_DEP =
!ELSEIF $(FOR_WIN10)==0 || "$(PLATFORM)"=="x86"
CORE_LINK_DEP = sqlite3.def
!ELSE
CORE_LINK_DEP =
!ENDIF
@@ -460,8 +521,10 @@ CORE_LINK_DEP =
# These are additional linker options used for the core library.
#
!IFNDEF CORE_LINK_OPTS
!IF $(DYNAMIC_SHELL)!=0 || $(FOR_WIN10)!=0
!IF $(DYNAMIC_SHELL)!=0
CORE_LINK_OPTS =
!ELSEIF $(FOR_WIN10)==0 || "$(PLATFORM)"=="x86"
CORE_LINK_OPTS = /DEF:sqlite3.def
!ELSE
CORE_LINK_OPTS =
!ENDIF
@@ -582,6 +645,10 @@ RCC = $(RCC) -DSQLITE_ENABLE_API_ARMOR=1
!IF $(DEBUG)>2
TCC = $(TCC) -DSQLITE_DEBUG=1
RCC = $(RCC) -DSQLITE_DEBUG=1
!IF $(DYNAMIC_SHELL)==0
TCC = $(TCC) -DSQLITE_ENABLE_WHERETRACE -DSQLITE_ENABLE_SELECTTRACE
RCC = $(RCC) -DSQLITE_ENABLE_WHERETRACE -DSQLITE_ENABLE_SELECTTRACE
!ENDIF
!ENDIF
!IF $(DEBUG)>4 || $(OSTRACE)!=0
@@ -707,6 +774,10 @@ RCC = $(RCC) -D_DEBUG
!IF $(DEBUG)>1 || $(OPTIMIZATIONS)==0
TCC = $(TCC) -Od
BCC = $(BCC) -Od
!IF $(USE_RUNTIME_CHECKS)!=0
TCC = $(TCC) -RTC1
BCC = $(BCC) -RTC1
!ENDIF
!ELSEIF $(OPTIMIZATIONS)>=3
TCC = $(TCC) -Ox
BCC = $(BCC) -Ox
@@ -802,10 +873,10 @@ LTLINKOPTS = $(LTLINKOPTS) WindowsPhoneCore.lib RuntimeObject.lib PhoneAppModelH
LTLINKOPTS = $(LTLINKOPTS) /NODEFAULTLIB:kernel32.lib /NODEFAULTLIB:ole32.lib
!ENDIF
# When compiling for UAP or the Windows 10 platform, some extra linker
# When compiling for UWP or the Windows 10 platform, some extra linker
# options are also required.
#
!IF $(FOR_UAP)!=0 || $(FOR_WIN10)!=0
!IF $(FOR_UWP)!=0 || $(FOR_WIN10)!=0
LTLINKOPTS = $(LTLINKOPTS) /DYNAMICBASE /NODEFAULTLIB:kernel32.lib
LTLINKOPTS = $(LTLINKOPTS) mincore.lib
!IFDEF PSDKLIBPATH
@@ -863,23 +934,28 @@ SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_SHELL_JSON1 -DSQLITE_ENABLE_
# This is the default Makefile target. The objects listed here
# are what get build when you type just "make" with no arguments.
#
all: dll libsqlite3.lib shell
all: dll shell
# Dynamic link library section.
#
dll: $(SQLITE3DLL)
dll: $(SQLITE3DLL)
# Shell executable.
#
shell: $(SQLITE3EXE)
libsqlite3.lib: $(LIBOBJ)
$(LTLIB) $(LTLIBOPTS) /OUT:$@ $(LIBOBJ) $(TLIBS)
shell: $(SQLITE3EXE)
$(SQLITE3DLL): $(LIBOBJ) $(LIBRESOBJS) $(CORE_LINK_DEP)
$(SQLITE3DLL): $(LIBOBJ) $(LIBRESOBJS) $(CORE_LINK_DEP)
$(LD) $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) /DLL $(CORE_LINK_OPTS) /OUT:$@ $(LIBOBJ) $(LIBRESOBJS) $(LTLIBS) $(TLIBS)
Replace.exe:
$(CSC) /target:exe $(TOP)\Replace.cs
sqlite3.def: Replace.exe $(LIBOBJ)
echo EXPORTS > sqlite3.def
dumpbin /all $(LIBOBJ) \
| .\Replace.exe "^\s+/EXPORT:_?(sqlite3(?:session|changeset|changegroup)?_[^@,]*)(?:@\d+|,DATA)?$$" $$1 true \
| sort >> sqlite3.def
$(SQLITE3EXE): $(TOP)\shell.c $(SHELL_CORE_DEP) $(LIBRESOBJS) $(SHELL_CORE_SRC) $(SQLITE3H)
$(LTLINK) $(SHELL_COMPILE_OPTS) $(READLINE_FLAGS) $(TOP)\shell.c $(SHELL_CORE_SRC) \
@@ -918,4 +994,5 @@ $(LIBRESOBJS): $(TOP)\sqlite3.rc rcver.vc $(SQLITE3H)
clean:
del /Q *.exp *.lo *.ilk *.lib *.obj *.ncb *.pdb *.sdf *.suo 2>NUL
del /Q *.bsc *.cod *.da *.bb *.bbg *.vc gmon.out 2>NUL
del /Q *.bsc *.def *.cod *.da *.bb *.bbg *.vc gmon.out 2>NUL
del /Q $(SQLITE3EXE) $(SQLITE3DLL) Replace.exe 2>NUL
+4 -4
View File
@@ -6,8 +6,8 @@ This package contains:
* the shell.c file used to build the sqlite3 command-line shell program
* autoconf/automake installation infrastucture for building on POSIX
compliant systems
* a Makefile.msc and sqlite3.rc for building with Microsoft Visual C++ on
Windows
* a Makefile.msc, sqlite3.rc, and Replace.cs for building with Microsoft
Visual C++ on Windows
SUMMARY OF HOW TO BUILD
=======================
@@ -75,10 +75,10 @@ NMAKE command line as well:
"NSDKLIBPATH=%WindowsSdkDir%\..\8.1\lib\winv6.3\um\x86"
Building for UAP 10.0
Building for UWP 10.0
---------------------
FOR_WINRT=1 FOR_UAP=1
FOR_WINRT=1 FOR_UWP=1
Using Microsoft Visual C++ 2015 (or later) is required. When using the
above, something like the following macros will need to be added to the
+59 -34
View File
@@ -30,39 +30,52 @@ AC_FUNC_STRERROR_R
AC_CONFIG_FILES([Makefile sqlite3.pc])
AC_SUBST(BUILD_CFLAGS)
#-----------------------------------------------------------------------
#-------------------------------------------------------------------------
# Two options to enable readline compatible libraries:
#
# --enable-editline
# --enable-readline
#
AC_ARG_ENABLE(editline, [AS_HELP_STRING(
[--enable-editline],
[use BSD libedit])],
[], [enable_editline=yes])
AC_ARG_ENABLE(readline, [AS_HELP_STRING(
[--enable-readline],
[use readline])],
[], [enable_readline=no])
if test x"$enable_editline" != xno ; then
sLIBS=$LIBS
LIBS=""
AC_SEARCH_LIBS([readline],[edit],[enable_readline=no],[enable_editline=no])
READLINE_LIBS=$LIBS
if test x"$LIBS" != "x"; then
AC_DEFINE([HAVE_EDITLINE],1,Define to use BSD editline)
else
unset ac_cv_search_readline
fi
LIBS=$sLIBS
fi
if test x"$enable_readline" != xno ; then
sLIBS=$LIBS
LIBS=""
AC_SEARCH_LIBS(tgetent, curses ncurses ncursesw, [], [])
AC_SEARCH_LIBS(readline, readline, [], [enable_readline=no])
AC_CHECK_FUNCS(readline, [], [])
READLINE_LIBS=$LIBS
LIBS=$sLIBS
fi
# Both are enabled by default. If, after command line processing both are
# still enabled, the script searches for editline first and automatically
# disables readline if it is found. So, to use readline explicitly, the
# user must pass "--disable-editline". To disable command line editing
# support altogether, "--disable-editline --disable-readline".
#
# When searching for either library, check for headers before libraries
# as some distros supply packages that contain libraries but not header
# files, which come as a separate development package.
#
AC_ARG_ENABLE(editline, [AS_HELP_STRING([--enable-editline],[use BSD libedit])])
AC_ARG_ENABLE(readline, [AS_HELP_STRING([--enable-readline],[use readline])])
AS_IF([ test x"$enable_editline" != xno ],[
AC_CHECK_HEADERS([editline/readline.h],[
sLIBS=$LIBS
LIBS=""
AC_SEARCH_LIBS([readline],[edit],[
AC_DEFINE([HAVE_EDITLINE],1,Define to use BSD editline)
READLINE_LIBS="$LIBS -ltinfo"
enable_readline=no
],[],[-ltinfo])
AS_UNSET(ac_cv_search_readline)
LIBS=$sLIBS
])
])
AS_IF([ test x"$enable_readline" != xno ],[
AC_CHECK_HEADERS([readline/readline.h],[
sLIBS=$LIBS
LIBS=""
AC_SEARCH_LIBS(tgetent, termcap curses ncurses ncursesw, [], [])
AC_SEARCH_LIBS(readline,[readline edit], [
AC_DEFINE([HAVE_READLINE],1,Define to use readline or wrapper)
READLINE_LIBS=$LIBS
])
LIBS=$sLIBS
])
])
AC_SUBST(READLINE_LIBS)
#-----------------------------------------------------------------------
@@ -103,7 +116,7 @@ AC_SUBST(DYNAMIC_EXTENSION_FLAGS)
AC_ARG_ENABLE(fts5, [AS_HELP_STRING(
[--enable-fts5], [include fts5 support [default=no]])],
[], [enable_fts5=no])
if test x"$enable_fts5" == "xyes"; then
if test x"$enable_fts5" = "xyes"; then
AC_SEARCH_LIBS(log, m)
FTS5_FLAGS=-DSQLITE_ENABLE_FTS5
fi
@@ -116,12 +129,24 @@ AC_SUBST(FTS5_FLAGS)
AC_ARG_ENABLE(json1, [AS_HELP_STRING(
[--enable-json1], [include json1 support [default=no]])],
[], [enable_json1=no])
if test x"$enable_json1" == "xyes"; then
if test x"$enable_json1" = "xyes"; then
JSON1_FLAGS=-DSQLITE_ENABLE_JSON1
fi
AC_SUBST(JSON1_FLAGS)
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
# --enable-session
#
AC_ARG_ENABLE(session, [AS_HELP_STRING(
[--enable-session], [enable the session extension [default=no]])],
[], [enable_session=no])
if test x"$enable_session" = "xyes"; then
SESSION_FLAGS="-DSQLITE_ENABLE_SESSION -DSQLITE_ENABLE_PREUPDATE_HOOK"
fi
AC_SUBST(SESSION_FLAGS)
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
# --enable-static-shell
#
@@ -129,8 +154,8 @@ AC_ARG_ENABLE(static-shell, [AS_HELP_STRING(
[--enable-static-shell],
[statically link libsqlite3 into shell tool [default=yes]])],
[], [enable_static_shell=yes])
if test x"$enable_static_shell" == "xyes"; then
EXTRA_SHELL_OBJ=sqlite3.$OBJEXT
if test x"$enable_static_shell" = "xyes"; then
EXTRA_SHELL_OBJ=sqlite3-sqlite3.$OBJEXT
else
EXTRA_SHELL_OBJ=libsqlite3.la
fi
-1
View File
@@ -78,7 +78,6 @@ TEA_ADD_LIBS([])
TEA_ADD_CFLAGS([-DSQLITE_ENABLE_FTS3=1])
TEA_ADD_CFLAGS([-DSQLITE_3_SUFFIX_ONLY=1])
TEA_ADD_CFLAGS([-DSQLITE_ENABLE_RTREE=1])
TEA_ADD_CFLAGS([-DSQLITE_OMIT_DEPRECATED=1])
TEA_ADD_STUB_SOURCES([])
TEA_ADD_TCL_SOURCES([])
+12
View File
@@ -45,6 +45,18 @@
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
/* Define to 1 if you have the pread() function. */
#undef HAVE_PREAD
/* Define to 1 if you have the pread64() function. */
#undef HAVE_PREAD64
/* Define to 1 if you have the pwrite() function. */
#undef HAVE_PWRITE
/* Define to 1 if you have the pwrite64() function. */
#undef HAVE_PWRITE64
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
Vendored
+103 -31
View File
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for sqlite 3.11.0.
# Generated by GNU Autoconf 2.69 for sqlite 3.20.0.
#
#
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -726,8 +726,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='sqlite'
PACKAGE_TARNAME='sqlite'
PACKAGE_VERSION='3.11.0'
PACKAGE_STRING='sqlite 3.11.0'
PACKAGE_VERSION='3.20.0'
PACKAGE_STRING='sqlite 3.20.0'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
@@ -903,11 +903,14 @@ with_readline_inc
enable_debug
enable_amalgamation
enable_load_extension
enable_memsys5
enable_memsys3
enable_fts3
enable_fts4
enable_fts5
enable_json1
enable_rtree
enable_session
enable_gcov
'
ac_precious_vars='build_alias
@@ -1460,7 +1463,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures sqlite 3.11.0 to adapt to many kinds of systems.
\`configure' configures sqlite 3.20.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1525,7 +1528,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of sqlite 3.11.0:";;
short | recursive ) echo "Configuration of sqlite 3.20.0:";;
esac
cat <<\_ACEOF
@@ -1551,11 +1554,14 @@ Optional Features:
separately
--disable-load-extension
Disable loading of external extensions
--enable-memsys5 Enable MEMSYS5
--enable-memsys3 Enable MEMSYS3
--enable-fts3 Enable the FTS3 extension
--enable-fts4 Enable the FTS4 extension
--enable-fts5 Enable the FTS5 extension
--enable-json1 Enable the JSON1 extension
--enable-rtree Enable the RTREE extension
--enable-session Enable the SESSION extension
--enable-gcov Enable coverage testing using gcov
Optional Packages:
@@ -1646,7 +1652,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
sqlite configure 3.11.0
sqlite configure 3.20.0
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2065,7 +2071,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by sqlite $as_me 3.11.0, which was
It was created by sqlite $as_me 3.20.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3923,13 +3929,13 @@ if ${lt_cv_nm_interface+:} false; then :
else
lt_cv_nm_interface="BSD nm"
echo "int some_variable = 0;" > conftest.$ac_ext
(eval echo "\"\$as_me:3926: $ac_compile\"" >&5)
(eval echo "\"\$as_me:3932: $ac_compile\"" >&5)
(eval "$ac_compile" 2>conftest.err)
cat conftest.err >&5
(eval echo "\"\$as_me:3929: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
(eval echo "\"\$as_me:3935: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
(eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
cat conftest.err >&5
(eval echo "\"\$as_me:3932: output\"" >&5)
(eval echo "\"\$as_me:3938: output\"" >&5)
cat conftest.out >&5
if $GREP 'External.*some_variable' conftest.out > /dev/null; then
lt_cv_nm_interface="MS dumpbin"
@@ -5135,7 +5141,7 @@ ia64-*-hpux*)
;;
*-*-irix6*)
# Find out which ABI we are using.
echo '#line 5138 "configure"' > conftest.$ac_ext
echo '#line 5144 "configure"' > conftest.$ac_ext
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
(eval $ac_compile) 2>&5
ac_status=$?
@@ -6660,11 +6666,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
(eval echo "\"\$as_me:6663: $lt_compile\"" >&5)
(eval echo "\"\$as_me:6669: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
echo "$as_me:6667: \$? = $ac_status" >&5
echo "$as_me:6673: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -6999,11 +7005,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
(eval echo "\"\$as_me:7002: $lt_compile\"" >&5)
(eval echo "\"\$as_me:7008: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
echo "$as_me:7006: \$? = $ac_status" >&5
echo "$as_me:7012: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -7104,11 +7110,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
(eval echo "\"\$as_me:7107: $lt_compile\"" >&5)
(eval echo "\"\$as_me:7113: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
echo "$as_me:7111: \$? = $ac_status" >&5
echo "$as_me:7117: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -7159,11 +7165,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
(eval echo "\"\$as_me:7162: $lt_compile\"" >&5)
(eval echo "\"\$as_me:7168: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
echo "$as_me:7166: \$? = $ac_status" >&5
echo "$as_me:7172: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -9539,7 +9545,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
#line 9542 "configure"
#line 9548 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -9635,7 +9641,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
#line 9638 "configure"
#line 9644 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -10273,7 +10279,7 @@ done
#########
# Figure out whether or not we have these functions
#
for ac_func in fdatasync gmtime_r isnan localtime_r localtime_s malloc_usable_size strchrnul usleep utime
for ac_func in fdatasync gmtime_r isnan localtime_r localtime_s malloc_usable_size strchrnul usleep utime pread pread64 pwrite pwrite64
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -10755,6 +10761,20 @@ else
fi
fi
# Recent versions of Xcode on Macs hid the tclConfig.sh file
# in a strange place.
if test x"${ac_cv_c_tclconfig}" = x ; then
if test x"$cross_compiling" = xno; then
for i in /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX*.sdk/usr/lib
do
if test -f "$i/tclConfig.sh" ; then
ac_cv_c_tclconfig="$i"
break
fi
done
fi
fi
# then check for a private Tcl installation
if test x"${ac_cv_c_tclconfig}" = x ; then
for i in \
@@ -11232,7 +11252,7 @@ else
fi
if test "${use_debug}" = "yes" ; then
TARGET_DEBUG="-DSQLITE_DEBUG=1"
TARGET_DEBUG="-DSQLITE_DEBUG=1 -DSQLITE_ENABLE_SELECTTRACE -DSQLITE_ENABLE_WHERETRACE -O0"
else
TARGET_DEBUG="-DNDEBUG"
fi
@@ -11323,6 +11343,44 @@ else
OPT_FEATURE_FLAGS="-DSQLITE_OMIT_LOAD_EXTENSION=1"
fi
##########
# Do we want to support memsys3 and/or memsys5
#
# Check whether --enable-memsys5 was given.
if test "${enable_memsys5+set}" = set; then :
enableval=$enable_memsys5; enable_memsys5=yes
else
enable_memsys5=no
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support MEMSYS5" >&5
$as_echo_n "checking whether to support MEMSYS5... " >&6; }
if test "${enable_memsys5}" = "yes"; then
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_MEMSYS5"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
# Check whether --enable-memsys3 was given.
if test "${enable_memsys3+set}" = set; then :
enableval=$enable_memsys3; enable_memsys3=yes
else
enable_memsys3=no
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support MEMSYS3" >&5
$as_echo_n "checking whether to support MEMSYS3... " >&6; }
if test "${enable_memsys3}" = "yes" -a "${enable_memsys5}" = "no"; then
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_MEMSYS3"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
#########
# See whether we should enable Full Text Search extensions
# Check whether --enable-fts3 was given.
@@ -11333,7 +11391,7 @@ else
fi
if test "${enable_fts3}" = "yes" ; then
OPT_FEATURE_FLAGS+=" -DSQLITE_ENABLE_FTS3"
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_FTS3"
fi
# Check whether --enable-fts4 was given.
if test "${enable_fts4+set}" = set; then :
@@ -11343,7 +11401,7 @@ else
fi
if test "${enable_fts4}" = "yes" ; then
OPT_FEATURE_FLAGS+=" -DSQLITE_ENABLE_FTS4"
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_FTS4"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing log" >&5
$as_echo_n "checking for library containing log... " >&6; }
if ${ac_cv_search_log+:} false; then :
@@ -11409,7 +11467,7 @@ else
fi
if test "${enable_fts5}" = "yes" ; then
OPT_FEATURE_FLAGS+=" -DSQLITE_ENABLE_FTS5"
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_FTS5"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing log" >&5
$as_echo_n "checking for library containing log... " >&6; }
if ${ac_cv_search_log+:} false; then :
@@ -11478,7 +11536,7 @@ else
fi
if test "${enable_json1}" = "yes" ; then
OPT_FEATURE_FLAGS+=" -DSQLITE_ENABLE_JSON1"
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_JSON1"
fi
#########
@@ -11491,11 +11549,25 @@ else
fi
if test "${enable_rtree}" = "yes" ; then
OPT_FEATURE_FLAGS+=" -DSQLITE_ENABLE_RTREE"
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_RTREE"
fi
#########
# attempt to duplicate any OMITS and ENABLES into the $(OPT_FEATURE_FLAGS) parameter
# See whether we should enable the SESSION extension
# Check whether --enable-session was given.
if test "${enable_session+set}" = set; then :
enableval=$enable_session; enable_session=yes
else
enable_session=no
fi
if test "${enable_session}" = "yes" ; then
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_SESSION"
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_PREUPDATE_HOOK"
fi
#########
# attempt to duplicate any OMITS and ENABLES into the ${OPT_FEATURE_FLAGS} parameter
for option in $CFLAGS $CPPFLAGS
do
case $option in
@@ -12079,7 +12151,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by sqlite $as_me 3.11.0, which was
This file was extended by sqlite $as_me 3.20.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -12145,7 +12217,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
sqlite config.status 3.11.0
sqlite config.status 3.20.0
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
+56 -8
View File
@@ -108,7 +108,7 @@ AC_CHECK_HEADERS([sys/types.h stdlib.h stdint.h inttypes.h malloc.h])
#########
# Figure out whether or not we have these functions
#
AC_CHECK_FUNCS([fdatasync gmtime_r isnan localtime_r localtime_s malloc_usable_size strchrnul usleep utime])
AC_CHECK_FUNCS([fdatasync gmtime_r isnan localtime_r localtime_s malloc_usable_size strchrnul usleep utime pread pread64 pwrite pwrite64])
#########
# By default, we use the amalgamation (this may be changed below...)
@@ -334,6 +334,20 @@ if test "${use_tcl}" = "yes" ; then
fi
fi
# Recent versions of Xcode on Macs hid the tclConfig.sh file
# in a strange place.
if test x"${ac_cv_c_tclconfig}" = x ; then
if test x"$cross_compiling" = xno; then
for i in /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX*.sdk/usr/lib
do
if test -f "$i/tclConfig.sh" ; then
ac_cv_c_tclconfig="$i"
break
fi
done
fi
fi
# then check for a private Tcl installation
if test x"${ac_cv_c_tclconfig}" = x ; then
for i in \
@@ -546,7 +560,7 @@ AC_SEARCH_LIBS(fdatasync, [rt])
AC_ARG_ENABLE(debug, AC_HELP_STRING([--enable-debug],[enable debugging & verbose explain]),
[use_debug=$enableval],[use_debug=no])
if test "${use_debug}" = "yes" ; then
TARGET_DEBUG="-DSQLITE_DEBUG=1"
TARGET_DEBUG="-DSQLITE_DEBUG=1 -DSQLITE_ENABLE_SELECTTRACE -DSQLITE_ENABLE_WHERETRACE -O0"
else
TARGET_DEBUG="-DNDEBUG"
fi
@@ -574,26 +588,50 @@ else
OPT_FEATURE_FLAGS="-DSQLITE_OMIT_LOAD_EXTENSION=1"
fi
##########
# Do we want to support memsys3 and/or memsys5
#
AC_ARG_ENABLE(memsys5,
AC_HELP_STRING([--enable-memsys5],[Enable MEMSYS5]),
[enable_memsys5=yes],[enable_memsys5=no])
AC_MSG_CHECKING([whether to support MEMSYS5])
if test "${enable_memsys5}" = "yes"; then
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_MEMSYS5"
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
fi
AC_ARG_ENABLE(memsys3,
AC_HELP_STRING([--enable-memsys3],[Enable MEMSYS3]),
[enable_memsys3=yes],[enable_memsys3=no])
AC_MSG_CHECKING([whether to support MEMSYS3])
if test "${enable_memsys3}" = "yes" -a "${enable_memsys5}" = "no"; then
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_MEMSYS3"
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
fi
#########
# See whether we should enable Full Text Search extensions
AC_ARG_ENABLE(fts3, AC_HELP_STRING([--enable-fts3],
[Enable the FTS3 extension]),
[enable_fts3=yes],[enable_fts3=no])
if test "${enable_fts3}" = "yes" ; then
OPT_FEATURE_FLAGS+=" -DSQLITE_ENABLE_FTS3"
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_FTS3"
fi
AC_ARG_ENABLE(fts4, AC_HELP_STRING([--enable-fts4],
[Enable the FTS4 extension]),
[enable_fts4=yes],[enable_fts4=no])
if test "${enable_fts4}" = "yes" ; then
OPT_FEATURE_FLAGS+=" -DSQLITE_ENABLE_FTS4"
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_FTS4"
AC_SEARCH_LIBS([log],[m])
fi
AC_ARG_ENABLE(fts5, AC_HELP_STRING([--enable-fts5],
[Enable the FTS5 extension]),
[enable_fts5=yes],[enable_fts5=no])
if test "${enable_fts5}" = "yes" ; then
OPT_FEATURE_FLAGS+=" -DSQLITE_ENABLE_FTS5"
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_FTS5"
AC_SEARCH_LIBS([log],[m])
fi
@@ -603,7 +641,7 @@ AC_ARG_ENABLE(json1, AC_HELP_STRING([--enable-json1],
[Enable the JSON1 extension]),
[enable_json1=yes],[enable_json1=no])
if test "${enable_json1}" = "yes" ; then
OPT_FEATURE_FLAGS+=" -DSQLITE_ENABLE_JSON1"
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_JSON1"
fi
#########
@@ -612,11 +650,21 @@ AC_ARG_ENABLE(rtree, AC_HELP_STRING([--enable-rtree],
[Enable the RTREE extension]),
[enable_rtree=yes],[enable_rtree=no])
if test "${enable_rtree}" = "yes" ; then
OPT_FEATURE_FLAGS+=" -DSQLITE_ENABLE_RTREE"
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_RTREE"
fi
#########
# attempt to duplicate any OMITS and ENABLES into the $(OPT_FEATURE_FLAGS) parameter
# See whether we should enable the SESSION extension
AC_ARG_ENABLE(session, AC_HELP_STRING([--enable-session],
[Enable the SESSION extension]),
[enable_session=yes],[enable_session=no])
if test "${enable_session}" = "yes" ; then
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_SESSION"
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_PREUPDATE_HOOK"
fi
#########
# attempt to duplicate any OMITS and ENABLES into the ${OPT_FEATURE_FLAGS} parameter
for option in $CFLAGS $CPPFLAGS
do
case $option in
+213 -98
View File
@@ -5,14 +5,17 @@
<body bgcolor=white>
<h1 align=center>The Lemon Parser Generator</h1>
<p>Lemon is an LALR(1) parser generator for C or C++.
It does the same job as ``bison'' and ``yacc''.
But lemon is not another bison or yacc clone. It
<p>Lemon is an LALR(1) parser generator for C.
It does the same job as "bison" and "yacc".
But lemon is not a bison or yacc clone. Lemon
uses a different grammar syntax which is designed to
reduce the number of coding errors. Lemon also uses a more
sophisticated parsing engine that is faster than yacc and
bison and which is both reentrant and thread-safe.
Furthermore, Lemon implements features that can be used
reduce the number of coding errors. Lemon also uses a
parsing engine that is faster than yacc and
bison and which is both reentrant and threadsafe.
(Update: Since the previous sentence was written, bison
has also been updated so that it too can generate a
reentrant and threadsafe parser.)
Lemon also implements features that can be used
to eliminate resource leaks, making is suitable for use
in long-running programs such as graphical user interfaces
or embedded controllers.</p>
@@ -20,6 +23,26 @@ or embedded controllers.</p>
<p>This document is an introduction to the Lemon
parser generator.</p>
<h2>Security Note</h2>
<p>The language parser code created by Lemon is very robust and
is well-suited for use in internet-facing applications that need to
safely process maliciously crafted inputs.
<p>The "lemon.exe" command-line tool itself works great when given a valid
input grammar file and almost always gives helpful
error messages for malformed inputs. However, it is possible for
a malicious user to craft a grammar file that will cause
lemon.exe to crash.
We do not see this as a problem, as lemon.exe is not intended to be used
with hostile inputs.
To summarize:</p>
<ul>
<li>Parser code generated by lemon &rarr; Robust and secure
<li>The "lemon.exe" command line tool itself &rarr; Not so much
</ul>
<h2>Theory of Operation</h2>
<p>The main goal of Lemon is to translate a context free grammar (CFG)
@@ -44,18 +67,18 @@ one and three files of outputs.
automaton.
</ul>
By default, all three of these output files are generated.
The header file is suppressed if the ``-m'' command-line option is
used and the report file is omitted when ``-q'' is selected.</p>
The header file is suppressed if the "-m" command-line option is
used and the report file is omitted when "-q" is selected.</p>
<p>The grammar specification file uses a ``.y'' suffix, by convention.
<p>The grammar specification file uses a ".y" suffix, by convention.
In the examples used in this document, we'll assume the name of the
grammar file is ``gram.y''. A typical use of Lemon would be the
grammar file is "gram.y". A typical use of Lemon would be the
following command:
<pre>
lemon gram.y
</pre>
This command will generate three output files named ``gram.c'',
``gram.h'' and ``gram.out''.
This command will generate three output files named "gram.c",
"gram.h" and "gram.out".
The first is C code to implement the parser. The second
is the header file that defines numerical values for all
terminal symbols, and the last is the report that explains
@@ -71,39 +94,35 @@ with a brief explanation of what each does by typing
</pre>
As of this writing, the following command-line options are supported:
<ul>
<li><tt>-b</tt>
<li><tt>-c</tt>
<li><tt>-g</tt>
<li><tt>-m</tt>
<li><tt>-q</tt>
<li><tt>-s</tt>
<li><tt>-x</tt>
<li><b>-b</b>
Show only the basis for each parser state in the report file.
<li><b>-c</b>
Do not compress the generated action tables.
<li><b>-D<i>name</i></b>
Define C preprocessor macro <i>name</i>. This macro is useable by
"%ifdef" lines in the grammar file.
<li><b>-g</b>
Do not generate a parser. Instead write the input grammar to standard
output with all comments, actions, and other extraneous text removed.
<li><b>-l</b>
Omit "#line" directives in the generated parser C code.
<li><b>-m</b>
Cause the output C source code to be compatible with the "makeheaders"
program.
<li><b>-p</b>
Display all conflicts that are resolved by
<a href='#precrules'>precedence rules</a>.
<li><b>-q</b>
Suppress generation of the report file.
<li><b>-r</b>
Do not sort or renumber the parser states as part of optimization.
<li><b>-s</b>
Show parser statistics before existing.
<li><b>-T<i>file</i></b>
Use <i>file</i> as the template for the generated C-code parser implementation.
<li><b>-x</b>
Print the Lemon version number.
</ul>
The ``-b'' option reduces the amount of text in the report file by
printing only the basis of each parser state, rather than the full
configuration.
The ``-c'' option suppresses action table compression. Using -c
will make the parser a little larger and slower but it will detect
syntax errors sooner.
The ``-g'' option causes no output files to be generated at all.
Instead, the input grammar file is printed on standard output but
with all comments, actions and other extraneous text deleted. This
is a useful way to get a quick summary of a grammar.
The ``-m'' option causes the output C source file to be compatible
with the ``makeheaders'' program.
Makeheaders is a program that automatically generates header files
from C source code. When the ``-m'' option is used, the header
file is not output since the makeheaders program will take care
of generated all header files automatically.
The ``-q'' option suppresses the report file.
Using ``-s'' causes a brief summary of parser statistics to be
printed. Like this:
<pre>
Parser statistics: 74 terminals, 70 nonterminals, 179 rules
340 states, 2026 parser table entries, 0 conflicts
</pre>
Finally, the ``-x'' option causes Lemon to print its version number
and then stops without attempting to read the grammar or generate a parser.</p>
<h3>The Parser Interface</h3>
@@ -121,12 +140,12 @@ A new parser is created as follows:
</pre>
The ParseAlloc() routine allocates and initializes a new parser and
returns a pointer to it.
The actual data structure used to represent a parser is opaque --
The actual data structure used to represent a parser is opaque &mdash;
its internal structure is not visible or usable by the calling routine.
For this reason, the ParseAlloc() routine returns a pointer to void
rather than a pointer to some particular structure.
The sole argument to the ParseAlloc() routine is a pointer to the
subroutine used to allocate memory. Typically this means ``malloc()''.</p>
subroutine used to allocate memory. Typically this means malloc().</p>
<p>After a program is finished using a parser, it can reclaim all
memory allocated by that parser by calling
@@ -151,18 +170,19 @@ type of the next token in the data stream.
There is one token type for each terminal symbol in the grammar.
The gram.h file generated by Lemon contains #define statements that
map symbolic terminal symbol names into appropriate integer values.
(A value of 0 for the second argument is a special flag to the
parser to indicate that the end of input has been reached.)
A value of 0 for the second argument is a special flag to the
parser to indicate that the end of input has been reached.
The third argument is the value of the given token. By default,
the type of the third argument is integer, but the grammar will
usually redefine this type to be some kind of structure.
Typically the second argument will be a broad category of tokens
such as ``identifier'' or ``number'' and the third argument will
such as "identifier" or "number" and the third argument will
be the name of the identifier or the value of the number.</p>
<p>The Parse() function may have either three or four arguments,
depending on the grammar. If the grammar specification file request
it, the Parse() function will have a fourth parameter that can be
depending on the grammar. If the grammar specification file requests
it (via the <a href='#extraarg'><tt>extra_argument</tt> directive</a>),
the Parse() function will have a fourth parameter that can be
of any type chosen by the programmer. The parser doesn't do anything
with this argument except to pass it through to action routines.
This is a convenient mechanism for passing state information down
@@ -192,7 +212,7 @@ following:
</pre>
This example shows a user-written routine that parses a file of
text and returns a pointer to the parse tree.
(We've omitted all error-handling from this example to keep it
(All error-handling code is omitted from this example to keep it
simple.)
We assume the existence of some kind of tokenizer which is created
using TokenizerCreate() on line 8 and deleted by TokenizerFree()
@@ -263,6 +283,12 @@ with prior yacc and bison experience.
But after years of experience using Lemon, I firmly
believe that the Lemon way of doing things is better.</p>
<p><i>Updated as of 2016-02-16:</i>
The text above was written in the 1990s.
We are told that Bison has lately been enhanced to support the
tokenizer-calls-parser paradigm used by Lemon, and to obviate the
need for global variables.</p>
<h2>Input File Syntax</h2>
<p>The main purpose of the grammar specification file for Lemon is
@@ -280,7 +306,7 @@ tokens) and it honors the same commenting conventions as C and C++.</p>
<h3>Terminals and Nonterminals</h3>
<p>A terminal symbol (token) is any string of alphanumeric
and underscore characters
and/or underscore characters
that begins with an upper case letter.
A terminal can contain lowercase letters after the first character,
but the usual convention is to make terminals all upper case.
@@ -307,7 +333,7 @@ must have alphanumeric names.</p>
<p>The main component of a Lemon grammar file is a sequence of grammar
rules.
Each grammar rule consists of a nonterminal symbol followed by
the special symbol ``::='' and then a list of terminals and/or nonterminals.
the special symbol "::=" and then a list of terminals and/or nonterminals.
The rule is terminated by a period.
The list of terminals and nonterminals on the right-hand side of the
rule can be empty.
@@ -323,9 +349,9 @@ A typical sequence of grammar rules might look something like this:
</pre>
</p>
<p>There is one non-terminal in this example, ``expr'', and five
terminal symbols or tokens: ``PLUS'', ``TIMES'', ``LPAREN'',
``RPAREN'' and ``VALUE''.</p>
<p>There is one non-terminal in this example, "expr", and five
terminal symbols or tokens: "PLUS", "TIMES", "LPAREN",
"RPAREN" and "VALUE".</p>
<p>Like yacc and bison, Lemon allows the grammar to specify a block
of C code that will be executed whenever a grammar rule is reduced
@@ -341,15 +367,15 @@ For example:
<p>In order to be useful, grammar actions must normally be linked to
their associated grammar rules.
In yacc and bison, this is accomplished by embedding a ``$$'' in the
In yacc and bison, this is accomplished by embedding a "$$" in the
action to stand for the value of the left-hand side of the rule and
symbols ``$1'', ``$2'', and so forth to stand for the value of
symbols "$1", "$2", and so forth to stand for the value of
the terminal or nonterminal at position 1, 2 and so forth on the
right-hand side of the rule.
This idea is very powerful, but it is also very error-prone. The
single most common source of errors in a yacc or bison grammar is
to miscount the number of symbols on the right-hand side of a grammar
rule and say ``$7'' when you really mean ``$8''.</p>
rule and say "$7" when you really mean "$8".</p>
<p>Lemon avoids the need to count grammar symbols by assigning symbolic
names to each symbol in a grammar rule and then using those symbolic
@@ -379,7 +405,7 @@ For example, the rule
<pre>
expr(A) ::= expr(B) PLUS expr(C). { A = B; }
</pre>
will generate an error because the linking symbol ``C'' is used
will generate an error because the linking symbol "C" is used
in the grammar rule but not in the reduce action.</p>
<p>The Lemon notation for linking grammar rules to reduce actions
@@ -387,6 +413,7 @@ also facilitates the use of destructors for reclaiming memory
allocated by the values of terminals and nonterminals on the
right-hand side of a rule.</p>
<a name='precrules'></a>
<h3>Precedence Rules</h3>
<p>Lemon resolves parsing ambiguities in exactly the same way as
@@ -398,7 +425,10 @@ whichever rule comes first in the grammar file.</p>
yacc and bison, Lemon allows a measure of control
over the resolution of paring conflicts using precedence rules.
A precedence value can be assigned to any terminal symbol
using the %left, %right or %nonassoc directives. Terminal symbols
using the
<a href='#pleft'>%left</a>,
<a href='#pright'>%right</a> or
<a href='#pnonassoc'>%nonassoc</a> directives. Terminal symbols
mentioned in earlier directives have a lower precedence that
terminal symbols mentioned in later directives. For example:</p>
@@ -518,7 +548,11 @@ other than that, the order of directives in Lemon is arbitrary.</p>
<li><tt>%default_destructor</tt>
<li><tt>%default_type</tt>
<li><tt>%destructor</tt>
<li><tt>%endif</tt>
<li><tt>%extra_argument</tt>
<li><tt>%fallback</tt>
<li><tt>%ifdef</tt>
<li><tt>%ifndef</tt>
<li><tt>%include</tt>
<li><tt>%left</tt>
<li><tt>%name</tt>
@@ -530,49 +564,57 @@ other than that, the order of directives in Lemon is arbitrary.</p>
<li><tt>%stack_size</tt>
<li><tt>%start_symbol</tt>
<li><tt>%syntax_error</tt>
<li><tt>%token_class</tt>
<li><tt>%token_destructor</tt>
<li><tt>%token_prefix</tt>
<li><tt>%token_type</tt>
<li><tt>%type</tt>
<li><tt>%wildcard</tt>
</ul>
Each of these directives will be described separately in the
following sections:</p>
<a name='pcode'></a>
<h4>The <tt>%code</tt> directive</h4>
<p>The %code directive is used to specify addition C/C++ code that
<p>The %code directive is used to specify addition C code that
is added to the end of the main output file. This is similar to
the %include directive except that %include is inserted at the
beginning of the main output file.</p>
the <a href='#pinclude'>%include</a> directive except that %include
is inserted at the beginning of the main output file.</p>
<p>%code is typically used to include some action routines or perhaps
a tokenizer as part of the output file.</p>
a tokenizer or even the "main()" function
as part of the output file.</p>
<a name='default_destructor'></a>
<h4>The <tt>%default_destructor</tt> directive</h4>
<p>The %default_destructor directive specifies a destructor to
use for non-terminals that do not have their own destructor
specified by a separate %destructor directive. See the documentation
on the %destructor directive below for additional information.</p>
on the <a name='#destructor'>%destructor</a> directive below for
additional information.</p>
<p>In some grammers, many different non-terminal symbols have the
same datatype and hence the same destructor. This directive is
a convenience way to specify the same destructor for all those
non-terminals using a single statement.</p>
<a name='default_type'></a>
<h4>The <tt>%default_type</tt> directive</h4>
<p>The %default_type directive specifies the datatype of non-terminal
symbols that do no have their own datatype defined using a separate
%type directive. See the documentation on %type below for addition
information.</p>
<a href='#ptype'>%type</a> directive.
</p>
<a name='destructor'></a>
<h4>The <tt>%destructor</tt> directive</h4>
<p>The %destructor directive is used to specify a destructor for
a non-terminal symbol.
(See also the %token_destructor directive which is used to
specify a destructor for terminal symbols.)</p>
(See also the <a href='#token_destructor'>%token_destructor</a>
directive which is used to specify a destructor for terminal symbols.)</p>
<p>A non-terminal's destructor is called to dispose of the
non-terminal's value whenever the non-terminal is popped from
@@ -595,28 +637,28 @@ or other resources held by that non-terminal.</p>
</pre>
This example is a bit contrived but it serves to illustrate how
destructors work. The example shows a non-terminal named
``nt'' that holds values of type ``void*''. When the rule for
an ``nt'' reduces, it sets the value of the non-terminal to
"nt" that holds values of type "void*". When the rule for
an "nt" reduces, it sets the value of the non-terminal to
space obtained from malloc(). Later, when the nt non-terminal
is popped from the stack, the destructor will fire and call
free() on this malloced space, thus avoiding a memory leak.
(Note that the symbol ``$$'' in the destructor code is replaced
(Note that the symbol "$$" in the destructor code is replaced
by the value of the non-terminal.)</p>
<p>It is important to note that the value of a non-terminal is passed
to the destructor whenever the non-terminal is removed from the
stack, unless the non-terminal is used in a C-code action. If
the non-terminal is used by C-code, then it is assumed that the
C-code will take care of destroying it if it should really
be destroyed. More commonly, the value is used to build some
C-code will take care of destroying it.
More commonly, the value is used to build some
larger structure and we don't want to destroy it, which is why
the destructor is not called in this circumstance.</p>
<p>By appropriate use of destructors, it is possible to
build a parser using Lemon that can be used within a long-running
program, such as a GUI, that will not leak memory or other resources.
<p>Destructors help avoid memory leaks by automatically freeing
allocated objects when they go out of scope.
To do the same using yacc or bison is much more difficult.</p>
<a name="extraarg"></a>
<h4>The <tt>%extra_argument</tt> directive</h4>
The %extra_argument directive instructs Lemon to add a 4th parameter
@@ -630,17 +672,66 @@ and so forth. For example, if the grammar file contains:</p>
</pre></p>
<p>Then the Parse() function generated will have an 4th parameter
of type ``MyStruct*'' and all action routines will have access to
a variable named ``pAbc'' that is the value of the 4th parameter
of type "MyStruct*" and all action routines will have access to
a variable named "pAbc" that is the value of the 4th parameter
in the most recent call to Parse().</p>
<a name='pfallback'></a>
<h4>The <tt>%fallback</tt> directive</h4>
<p>The %fallback directive specifies an alternative meaning for one
or more tokens. The alternative meaning is tried if the original token
would have generated a syntax error.
<p>The %fallback directive was added to support robust parsing of SQL
syntax in <a href="https://www.sqlite.org/">SQLite</a>.
The SQL language contains a large assortment of keywords, each of which
appears as a different token to the language parser. SQL contains so
many keywords, that it can be difficult for programmers to keep up with
them all. Programmers will, therefore, sometimes mistakenly use an
obscure language keyword for an identifier. The %fallback directive
provides a mechanism to tell the parser: "If you are unable to parse
this keyword, try treating it as an identifier instead."
<p>The syntax of %fallback is as follows:
<blockquote>
<tt>%fallback</tt> <i>ID</i> <i>TOKEN...</i> <b>.</b>
</blockquote>
<p>In words, the %fallback directive is followed by a list of token names
terminated by a period. The first token name is the fallback token - the
token to which all the other tokens fall back to. The second and subsequent
arguments are tokens which fall back to the token identified by the first
argument.
<a name='pifdef'></a>
<h4>The <tt>%ifdef</tt>, <tt>%ifndef</tt>, and <tt>%endif</tt> directives.</h4>
<p>The %ifdef, %ifndef, and %endif directives are similar to
#ifdef, #ifndef, and #endif in the C-preprocessor, just not as general.
Each of these directives must begin at the left margin. No whitespace
is allowed between the "%" and the directive name.
<p>Grammar text in between "%ifdef MACRO" and the next nested "%endif" is
ignored unless the "-DMACRO" command-line option is used. Grammar text
betwen "%ifndef MACRO" and the next nested "%endif" is included except when
the "-DMACRO" command-line option is used.
<p>Note that the argument to %ifdef and %ifndef must be a single
preprocessor symbol name, not a general expression. There is no "%else"
directive.
<a name='pinclude'></a>
<h4>The <tt>%include</tt> directive</h4>
<p>The %include directive specifies C code that is included at the
top of the generated parser. You can include any text you want --
the Lemon parser generator copies it blindly. If you have multiple
%include directives in your grammar file the value of the last
%include directive overwrites all the others.</p.
%include directives in your grammar file, their values are concatenated
so that all %include code ultimately appears near the top of the
generated parser, in the same order as it appeared in the grammer.</p>
<p>The %include directive is very handy for getting some extra #include
preprocessor statements at the beginning of the generated parser.
@@ -653,12 +744,13 @@ For example:</p>
<p>This might be needed, for example, if some of the C actions in the
grammar call functions that are prototyed in unistd.h.</p>
<a name='pleft'></a>
<h4>The <tt>%left</tt> directive</h4>
The %left directive is used (along with the %right and
%nonassoc directives) to declare precedences of terminal
symbols. Every terminal symbol whose name appears after
a %left directive but before the next period (``.'') is
The %left directive is used (along with the <a href='#pright'>%right</a> and
<a href='#pnonassoc'>%nonassoc</a> directives) to declare precedences of
terminal symbols. Every terminal symbol whose name appears after
a %left directive but before the next period (".") is
given the same left-associative precedence value. Subsequent
%left directives have higher precedence. For example:</p>
@@ -679,10 +771,11 @@ a large amount of stack space if you make heavy use or right-associative
operators. For this reason, it is recommended that you use %left
rather than %right whenever possible.</p>
<a name='pname'></a>
<h4>The <tt>%name</tt> directive</h4>
<p>By default, the functions generated by Lemon all begin with the
five-character string ``Parse''. You can change this string to something
five-character string "Parse". You can change this string to something
different using the %name directive. For instance:</p>
<p><pre>
@@ -701,16 +794,19 @@ The %name directive allows you to generator two or more different
parsers and link them all into the same executable.
</p>
<a name='pnonassoc'></a>
<h4>The <tt>%nonassoc</tt> directive</h4>
<p>This directive is used to assign non-associative precedence to
one or more terminal symbols. See the section on precedence rules
or on the %left directive for additional information.</p>
one or more terminal symbols. See the section on
<a href='#precrules'>precedence rules</a>
or on the <a href='#pleft'>%left</a> directive for additional information.</p>
<a name='parse_accept'></a>
<h4>The <tt>%parse_accept</tt> directive</h4>
<p>The %parse_accept directive specifies a block of C code that is
executed whenever the parser accepts its input string. To ``accept''
executed whenever the parser accepts its input string. To "accept"
an input string means that the parser was able to process all tokens
without error.</p>
@@ -722,7 +818,7 @@ without error.</p>
}
</pre></p>
<a name='parse_failure'></a>
<h4>The <tt>%parse_failure</tt> directive</h4>
<p>The %parse_failure directive specifies a block of C code that
@@ -737,12 +833,15 @@ only invoked when parsing is unable to continue.</p>
}
</pre></p>
<a name='pright'></a>
<h4>The <tt>%right</tt> directive</h4>
<p>This directive is used to assign right-associative precedence to
one or more terminal symbols. See the section on precedence rules
or on the %left directive for additional information.</p>
one or more terminal symbols. See the section on
<a href='#precrules'>precedence rules</a>
or on the <a href='#pleft'>%left</a> directive for additional information.</p>
<a name='stack_overflow'></a>
<h4>The <tt>%stack_overflow</tt> directive</h4>
<p>The %stack_overflow directive specifies a block of C code that
@@ -771,6 +870,7 @@ Not like this:
list ::= .
</pre>
<a name='stack_size'></a>
<h4>The <tt>%stack_size</tt> directive</h4>
<p>If stack overflow is a problem and you can't resolve the trouble
@@ -783,6 +883,7 @@ with a stack of the requested size. The default value is 100.</p>
%stack_size 2000
</pre></p>
<a name='start_symbol'></a>
<h4>The <tt>%start_symbol</tt> directive</h4>
<p>By default, the start-symbol for the grammar that Lemon generates
@@ -793,6 +894,7 @@ can choose a different start-symbol using the %start_symbol directive.</p>
%start_symbol prog
</pre></p>
<a name='token_destructor'></a>
<h4>The <tt>%token_destructor</tt> directive</h4>
<p>The %destructor directive assigns a destructor to a non-terminal
@@ -805,6 +907,7 @@ the %token_type directive) and so they use a common destructor. Other
than that, the token destructor works just like the non-terminal
destructors.</p>
<a name='token_prefix'></a>
<h4>The <tt>%token_prefix</tt> directive</h4>
<p>Lemon generates #defines that assign small integer constants
@@ -830,6 +933,7 @@ to cause Lemon to produce these symbols instead:
#define TOKEN_PLUS 4
</pre>
<a name='token_type'></a><a name='ptype'></a>
<h4>The <tt>%token_type</tt> and <tt>%type</tt> directives</h4>
<p>These directives are used to specify the data types for values
@@ -845,7 +949,7 @@ token structure. Like this:</p>
</pre></p>
<p>If the data type of terminals is not specified, the default value
is ``int''.</p>
is "void*".</p>
<p>Non-terminal symbols can each have their own data types. Typically
the data type of a non-terminal is a pointer to the root of a parse-tree
@@ -866,6 +970,17 @@ non-terminal whose data type requires 1K of storage, then your 100
entry parser stack will require 100K of heap space. If you are willing
and able to pay that price, fine. You just need to know.</p>
<a name='pwildcard'></a>
<h4>The <tt>%wildcard</tt> directive</h4>
<p>The %wildcard directive is followed by a single token name and a
period. This directive specifies that the identified token should
match any input token.
<p>When the generated parser has the choice of matching an input against
the wildcard token and some other token, the other token is always used.
The wildcard token is only matched if there are no other alternatives.
<h3>Error Processing</h3>
<p>After extensive experimentation over several years, it has been
@@ -877,7 +992,7 @@ first invokes the code specified by the %syntax_error directive, if
any. It then enters its error recovery strategy. The error recovery
strategy is to begin popping the parsers stack until it enters a
state where it is permitted to shift a special non-terminal symbol
named ``error''. It then shifts this non-terminal and continues
named "error". It then shifts this non-terminal and continues
parsing. But the %syntax_error routine will not be called again
until at least three new tokens have been successfully shifted.</p>
@@ -886,7 +1001,7 @@ is unable to shift the error symbol, then the %parse_failed routine
is invoked and the parser resets itself to its start state, ready
to begin parsing a new file. This is what will happen at the very
first syntax error, of course, if there are no instances of the
``error'' non-terminal in your grammar.</p>
"error" non-terminal in your grammar.</p>
</body>
</html>
+8
View File
@@ -0,0 +1,8 @@
## Loadable Extensions
Various [loadable extensions](https://www.sqlite.org/loadext.html) for
SQLite are found in subfolders.
Most subfolders are dedicated to a single loadable extension (for
example FTS5, or RTREE). But the misc/ subfolder contains a collection
of smaller single-file extensions.
-2
View File
@@ -1,2 +0,0 @@
Version loadable extensions to SQLite are found in subfolders
of this folder.
+5 -1
View File
@@ -99,7 +99,11 @@ static void scalarFunc(
#ifdef SQLITE_TEST
#include <tcl.h>
#if defined(INCLUDE_SQLITE_TCL_H)
# include "sqlite_tcl.h"
#else
# include "tcl.h"
#endif
#include <string.h>
/*
+201 -166
View File
@@ -349,8 +349,9 @@ int sqlite3Fts3PutVarint(char *p, sqlite_int64 v){
** Return the number of bytes read, or 0 on error.
** The value is stored in *v.
*/
int sqlite3Fts3GetVarint(const char *p, sqlite_int64 *v){
const char *pStart = p;
int sqlite3Fts3GetVarint(const char *pBuf, sqlite_int64 *v){
const unsigned char *p = (const unsigned char*)pBuf;
const unsigned char *pStart = p;
u32 a;
u64 b;
int shift;
@@ -371,8 +372,8 @@ int sqlite3Fts3GetVarint(const char *p, sqlite_int64 *v){
}
/*
** Similar to sqlite3Fts3GetVarint(), except that the output is truncated to a
** 32-bit integer before it is returned.
** Similar to sqlite3Fts3GetVarint(), except that the output is truncated to
** a non-negative 32-bit integer before it is returned.
*/
int sqlite3Fts3GetVarint32(const char *p, int *pi){
u32 a;
@@ -388,7 +389,9 @@ int sqlite3Fts3GetVarint32(const char *p, int *pi){
GETVARINT_STEP(a, p, 14, 0x3FFF, 0x200000, *pi, 3);
GETVARINT_STEP(a, p, 21, 0x1FFFFF, 0x10000000, *pi, 4);
a = (a & 0x0FFFFFFF );
*pi = (int)(a | ((u32)(*p & 0x0F) << 28));
*pi = (int)(a | ((u32)(*p & 0x07) << 28));
assert( 0==(a & 0x80000000) );
assert( *pi>=0 );
return 5;
}
@@ -492,6 +495,7 @@ static int fts3DisconnectMethod(sqlite3_vtab *pVtab){
assert( p->pSegments==0 );
/* Free any prepared statements held */
sqlite3_finalize(p->pSeekStmt);
for(i=0; i<SizeofArray(p->aStmt); i++){
sqlite3_finalize(p->aStmt[i]);
}
@@ -1217,65 +1221,66 @@ static int fts3InitVtab(
break;
}
}
if( iOpt==SizeofArray(aFts4Opt) ){
sqlite3Fts3ErrMsg(pzErr, "unrecognized parameter: %s", z);
rc = SQLITE_ERROR;
}else{
switch( iOpt ){
case 0: /* MATCHINFO */
if( strlen(zVal)!=4 || sqlite3_strnicmp(zVal, "fts3", 4) ){
sqlite3Fts3ErrMsg(pzErr, "unrecognized matchinfo: %s", zVal);
rc = SQLITE_ERROR;
}
bNoDocsize = 1;
break;
switch( iOpt ){
case 0: /* MATCHINFO */
if( strlen(zVal)!=4 || sqlite3_strnicmp(zVal, "fts3", 4) ){
sqlite3Fts3ErrMsg(pzErr, "unrecognized matchinfo: %s", zVal);
rc = SQLITE_ERROR;
}
bNoDocsize = 1;
break;
case 1: /* PREFIX */
sqlite3_free(zPrefix);
zPrefix = zVal;
zVal = 0;
break;
case 1: /* PREFIX */
sqlite3_free(zPrefix);
zPrefix = zVal;
zVal = 0;
break;
case 2: /* COMPRESS */
sqlite3_free(zCompress);
zCompress = zVal;
zVal = 0;
break;
case 2: /* COMPRESS */
sqlite3_free(zCompress);
zCompress = zVal;
zVal = 0;
break;
case 3: /* UNCOMPRESS */
sqlite3_free(zUncompress);
zUncompress = zVal;
zVal = 0;
break;
case 3: /* UNCOMPRESS */
sqlite3_free(zUncompress);
zUncompress = zVal;
zVal = 0;
break;
case 4: /* ORDER */
if( (strlen(zVal)!=3 || sqlite3_strnicmp(zVal, "asc", 3))
&& (strlen(zVal)!=4 || sqlite3_strnicmp(zVal, "desc", 4))
){
sqlite3Fts3ErrMsg(pzErr, "unrecognized order: %s", zVal);
rc = SQLITE_ERROR;
}
bDescIdx = (zVal[0]=='d' || zVal[0]=='D');
break;
case 4: /* ORDER */
if( (strlen(zVal)!=3 || sqlite3_strnicmp(zVal, "asc", 3))
&& (strlen(zVal)!=4 || sqlite3_strnicmp(zVal, "desc", 4))
){
sqlite3Fts3ErrMsg(pzErr, "unrecognized order: %s", zVal);
rc = SQLITE_ERROR;
}
bDescIdx = (zVal[0]=='d' || zVal[0]=='D');
break;
case 5: /* CONTENT */
sqlite3_free(zContent);
zContent = zVal;
zVal = 0;
break;
case 5: /* CONTENT */
sqlite3_free(zContent);
zContent = zVal;
zVal = 0;
break;
case 6: /* LANGUAGEID */
assert( iOpt==6 );
sqlite3_free(zLanguageid);
zLanguageid = zVal;
zVal = 0;
break;
case 6: /* LANGUAGEID */
assert( iOpt==6 );
sqlite3_free(zLanguageid);
zLanguageid = zVal;
zVal = 0;
break;
case 7: /* NOTINDEXED */
azNotindexed[nNotindexed++] = zVal;
zVal = 0;
break;
}
case 7: /* NOTINDEXED */
azNotindexed[nNotindexed++] = zVal;
zVal = 0;
break;
default:
assert( iOpt==SizeofArray(aFts4Opt) );
sqlite3Fts3ErrMsg(pzErr, "unrecognized parameter: %s", z);
rc = SQLITE_ERROR;
break;
}
sqlite3_free(zVal);
}
@@ -1363,9 +1368,9 @@ static int fts3InitVtab(
p->pTokenizer = pTokenizer;
p->nMaxPendingData = FTS3_MAX_PENDING_DATA;
p->bHasDocsize = (isFts4 && bNoDocsize==0);
p->bHasStat = isFts4;
p->bFts4 = isFts4;
p->bDescIdx = bDescIdx;
p->bHasStat = (u8)isFts4;
p->bFts4 = (u8)isFts4;
p->bDescIdx = (u8)bDescIdx;
p->nAutoincrmerge = 0xff; /* 0xff means setting unknown */
p->zContentTbl = zContent;
p->zLanguageid = zLanguageid;
@@ -1396,7 +1401,9 @@ static int fts3InitVtab(
char *z;
int n = 0;
z = (char *)sqlite3Fts3NextToken(aCol[iCol], &n);
memcpy(zCsr, z, n);
if( n>0 ){
memcpy(zCsr, z, n);
}
zCsr[n] = '\0';
sqlite3Fts3Dequote(zCsr);
p->azColumn[iCol] = zCsr;
@@ -1680,6 +1687,39 @@ static int fts3OpenMethod(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCsr){
return SQLITE_OK;
}
/*
** Finalize the statement handle at pCsr->pStmt.
**
** Or, if that statement handle is one created by fts3CursorSeekStmt(),
** and the Fts3Table.pSeekStmt slot is currently NULL, save the statement
** pointer there instead of finalizing it.
*/
static void fts3CursorFinalizeStmt(Fts3Cursor *pCsr){
if( pCsr->bSeekStmt ){
Fts3Table *p = (Fts3Table *)pCsr->base.pVtab;
if( p->pSeekStmt==0 ){
p->pSeekStmt = pCsr->pStmt;
sqlite3_reset(pCsr->pStmt);
pCsr->pStmt = 0;
}
pCsr->bSeekStmt = 0;
}
sqlite3_finalize(pCsr->pStmt);
}
/*
** Free all resources currently held by the cursor passed as the only
** argument.
*/
static void fts3ClearCursor(Fts3Cursor *pCsr){
fts3CursorFinalizeStmt(pCsr);
sqlite3Fts3FreeDeferredTokens(pCsr);
sqlite3_free(pCsr->aDoclist);
sqlite3Fts3MIBufferFree(pCsr->pMIBuffer);
sqlite3Fts3ExprFree(pCsr->pExpr);
memset(&(&pCsr->base)[1], 0, sizeof(Fts3Cursor)-sizeof(sqlite3_vtab_cursor));
}
/*
** Close the cursor. For additional information see the documentation
** on the xClose method of the virtual table interface.
@@ -1687,11 +1727,7 @@ static int fts3OpenMethod(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCsr){
static int fts3CloseMethod(sqlite3_vtab_cursor *pCursor){
Fts3Cursor *pCsr = (Fts3Cursor *)pCursor;
assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 );
sqlite3_finalize(pCsr->pStmt);
sqlite3Fts3ExprFree(pCsr->pExpr);
sqlite3Fts3FreeDeferredTokens(pCsr);
sqlite3_free(pCsr->aDoclist);
sqlite3Fts3MIBufferFree(pCsr->pMIBuffer);
fts3ClearCursor(pCsr);
assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 );
sqlite3_free(pCsr);
return SQLITE_OK;
@@ -1705,20 +1741,23 @@ static int fts3CloseMethod(sqlite3_vtab_cursor *pCursor){
**
** (or the equivalent for a content=xxx table) and set pCsr->pStmt to
** it. If an error occurs, return an SQLite error code.
**
** Otherwise, set *ppStmt to point to pCsr->pStmt and return SQLITE_OK.
*/
static int fts3CursorSeekStmt(Fts3Cursor *pCsr, sqlite3_stmt **ppStmt){
static int fts3CursorSeekStmt(Fts3Cursor *pCsr){
int rc = SQLITE_OK;
if( pCsr->pStmt==0 ){
Fts3Table *p = (Fts3Table *)pCsr->base.pVtab;
char *zSql;
zSql = sqlite3_mprintf("SELECT %s WHERE rowid = ?", p->zReadExprlist);
if( !zSql ) return SQLITE_NOMEM;
rc = sqlite3_prepare_v2(p->db, zSql, -1, &pCsr->pStmt, 0);
sqlite3_free(zSql);
if( p->pSeekStmt ){
pCsr->pStmt = p->pSeekStmt;
p->pSeekStmt = 0;
}else{
zSql = sqlite3_mprintf("SELECT %s WHERE rowid = ?", p->zReadExprlist);
if( !zSql ) return SQLITE_NOMEM;
rc = sqlite3_prepare_v3(p->db, zSql,-1,SQLITE_PREPARE_PERSISTENT,&pCsr->pStmt,0);
sqlite3_free(zSql);
}
if( rc==SQLITE_OK ) pCsr->bSeekStmt = 1;
}
*ppStmt = pCsr->pStmt;
return rc;
}
@@ -1730,9 +1769,7 @@ static int fts3CursorSeekStmt(Fts3Cursor *pCsr, sqlite3_stmt **ppStmt){
static int fts3CursorSeek(sqlite3_context *pContext, Fts3Cursor *pCsr){
int rc = SQLITE_OK;
if( pCsr->isRequireSeek ){
sqlite3_stmt *pStmt = 0;
rc = fts3CursorSeekStmt(pCsr, &pStmt);
rc = fts3CursorSeekStmt(pCsr);
if( rc==SQLITE_OK ){
sqlite3_bind_int64(pCsr->pStmt, 1, pCsr->iPrevId);
pCsr->isRequireSeek = 0;
@@ -1821,7 +1858,8 @@ static int fts3ScanInteriorNode(
isFirstTerm = 0;
zCsr += fts3GetVarint32(zCsr, &nSuffix);
if( nPrefix<0 || nSuffix<0 || &zCsr[nSuffix]>zEnd ){
assert( nPrefix>=0 && nSuffix>=0 );
if( &zCsr[nSuffix]>zEnd ){
rc = FTS_CORRUPT_VTAB;
goto finish_scan;
}
@@ -2631,7 +2669,7 @@ int sqlite3Fts3FirstFilter(
fts3ColumnlistCopy(0, &p);
}
while( p<pEnd && *p==0x01 ){
while( p<pEnd ){
sqlite3_int64 iCol;
p++;
p += sqlite3Fts3GetVarint(p, &iCol);
@@ -3190,11 +3228,7 @@ static int fts3FilterMethod(
assert( iIdx==nVal );
/* In case the cursor has been used before, clear it now. */
sqlite3_finalize(pCsr->pStmt);
sqlite3_free(pCsr->aDoclist);
sqlite3Fts3MIBufferFree(pCsr->pMIBuffer);
sqlite3Fts3ExprFree(pCsr->pExpr);
memset(&pCursor[1], 0, sizeof(Fts3Cursor)-sizeof(sqlite3_vtab_cursor));
fts3ClearCursor(pCsr);
/* Set the lower and upper bounds on docids to return */
pCsr->iMinDocid = fts3DocidRange(pDocidGe, SMALLEST_INT64);
@@ -3252,13 +3286,13 @@ static int fts3FilterMethod(
);
}
if( zSql ){
rc = sqlite3_prepare_v2(p->db, zSql, -1, &pCsr->pStmt, 0);
rc = sqlite3_prepare_v3(p->db,zSql,-1,SQLITE_PREPARE_PERSISTENT,&pCsr->pStmt,0);
sqlite3_free(zSql);
}else{
rc = SQLITE_NOMEM;
}
}else if( eSearch==FTS3_DOCID_SEARCH ){
rc = fts3CursorSeekStmt(pCsr, &pCsr->pStmt);
rc = fts3CursorSeekStmt(pCsr);
if( rc==SQLITE_OK ){
rc = sqlite3_bind_value(pCsr->pStmt, 1, pCons);
}
@@ -3273,7 +3307,12 @@ static int fts3FilterMethod(
** routine to find out if it has reached the end of a result set.
*/
static int fts3EofMethod(sqlite3_vtab_cursor *pCursor){
return ((Fts3Cursor *)pCursor)->isEof;
Fts3Cursor *pCsr = (Fts3Cursor*)pCursor;
if( pCsr->isEof ){
fts3ClearCursor(pCsr);
pCsr->isEof = 1;
}
return pCsr->isEof;
}
/*
@@ -3311,33 +3350,37 @@ static int fts3ColumnMethod(
/* The column value supplied by SQLite must be in range. */
assert( iCol>=0 && iCol<=p->nColumn+2 );
if( iCol==p->nColumn+1 ){
/* This call is a request for the "docid" column. Since "docid" is an
** alias for "rowid", use the xRowid() method to obtain the value.
*/
sqlite3_result_int64(pCtx, pCsr->iPrevId);
}else if( iCol==p->nColumn ){
/* The extra column whose name is the same as the table.
** Return a blob which is a pointer to the cursor. */
sqlite3_result_blob(pCtx, &pCsr, sizeof(pCsr), SQLITE_TRANSIENT);
}else if( iCol==p->nColumn+2 && pCsr->pExpr ){
sqlite3_result_int64(pCtx, pCsr->iLangid);
}else{
/* The requested column is either a user column (one that contains
** indexed data), or the language-id column. */
rc = fts3CursorSeek(0, pCsr);
switch( iCol-p->nColumn ){
case 0:
/* The special 'table-name' column */
sqlite3_result_pointer(pCtx, pCsr);
break;
if( rc==SQLITE_OK ){
if( iCol==p->nColumn+2 ){
int iLangid = 0;
if( p->zLanguageid ){
iLangid = sqlite3_column_int(pCsr->pStmt, p->nColumn+1);
}
sqlite3_result_int(pCtx, iLangid);
}else if( sqlite3_data_count(pCsr->pStmt)>(iCol+1) ){
case 1:
/* The docid column */
sqlite3_result_int64(pCtx, pCsr->iPrevId);
break;
case 2:
if( pCsr->pExpr ){
sqlite3_result_int64(pCtx, pCsr->iLangid);
break;
}else if( p->zLanguageid==0 ){
sqlite3_result_int(pCtx, 0);
break;
}else{
iCol = p->nColumn;
/* fall-through */
}
default:
/* A user column. Or, if this is a full-table scan, possibly the
** language-id column. Seek the cursor. */
rc = fts3CursorSeek(0, pCsr);
if( rc==SQLITE_OK && sqlite3_data_count(pCsr->pStmt)-1>iCol ){
sqlite3_result_value(pCtx, sqlite3_column_value(pCsr->pStmt, iCol+1));
}
}
break;
}
assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 );
@@ -3386,8 +3429,10 @@ static int fts3SyncMethod(sqlite3_vtab *pVtab){
const u32 nMinMerge = 64; /* Minimum amount of incr-merge work to do */
Fts3Table *p = (Fts3Table*)pVtab;
int rc = sqlite3Fts3PendingTermsFlush(p);
int rc;
i64 iLastRowid = sqlite3_last_insert_rowid(p->db);
rc = sqlite3Fts3PendingTermsFlush(p);
if( rc==SQLITE_OK
&& p->nLeafAdd>(nMinMerge/16)
&& p->nAutoincrmerge && p->nAutoincrmerge!=0xff
@@ -3402,6 +3447,7 @@ static int fts3SyncMethod(sqlite3_vtab *pVtab){
if( A>(int)nMinMerge ) rc = sqlite3Fts3Incrmerge(p, A, p->nAutoincrmerge);
}
sqlite3Fts3SegmentsClose(p);
sqlite3_set_last_insert_rowid(p->db, iLastRowid);
return rc;
}
@@ -3414,17 +3460,11 @@ static int fts3SyncMethod(sqlite3_vtab *pVtab){
static int fts3SetHasStat(Fts3Table *p){
int rc = SQLITE_OK;
if( p->bHasStat==2 ){
const char *zFmt ="SELECT 1 FROM %Q.sqlite_master WHERE tbl_name='%q_stat'";
char *zSql = sqlite3_mprintf(zFmt, p->zDb, p->zName);
if( zSql ){
sqlite3_stmt *pStmt = 0;
rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0);
if( rc==SQLITE_OK ){
int bHasStat = (sqlite3_step(pStmt)==SQLITE_ROW);
rc = sqlite3_finalize(pStmt);
if( rc==SQLITE_OK ) p->bHasStat = bHasStat;
}
sqlite3_free(zSql);
char *zTbl = sqlite3_mprintf("%s_stat", p->zName);
if( zTbl ){
int res = sqlite3_table_column_metadata(p->db, p->zDb, zTbl, 0,0,0,0,0,0);
sqlite3_free(zTbl);
p->bHasStat = (res==SQLITE_OK);
}else{
rc = SQLITE_NOMEM;
}
@@ -3531,18 +3571,17 @@ static int fts3FunctionArg(
sqlite3_value *pVal, /* argv[0] passed to function */
Fts3Cursor **ppCsr /* OUT: Store cursor handle here */
){
Fts3Cursor *pRet;
if( sqlite3_value_type(pVal)!=SQLITE_BLOB
|| sqlite3_value_bytes(pVal)!=sizeof(Fts3Cursor *)
){
int rc;
*ppCsr = (Fts3Cursor*)sqlite3_value_pointer(pVal);
if( (*ppCsr)!=0 ){
rc = SQLITE_OK;
}else{
char *zErr = sqlite3_mprintf("illegal first argument to %s", zFunc);
sqlite3_result_error(pContext, zErr, -1);
sqlite3_free(zErr);
return SQLITE_ERROR;
rc = SQLITE_ERROR;
}
memcpy(&pRet, sqlite3_value_blob(pVal), sizeof(Fts3Cursor *));
*ppCsr = pRet;
return SQLITE_OK;
return rc;
}
/*
@@ -3929,7 +3968,7 @@ int sqlite3Fts3Init(sqlite3 *db){
#endif
/* Create the virtual table wrapper around the hash-table and overload
** the two scalar functions. If this is successful, register the
** the four scalar functions. If this is successful, register the
** module with sqlite.
*/
if( SQLITE_OK==rc
@@ -4512,7 +4551,7 @@ static int fts3EvalIncrPhraseNext(
** one incremental token. In which case the bIncr flag is set. */
assert( p->bIncr==1 );
if( p->nToken==1 && p->bIncr ){
if( p->nToken==1 ){
rc = sqlite3Fts3MsrIncrNext(pTab, p->aToken[0].pSegcsr,
&pDL->iDocid, &pDL->pList, &pDL->nList
);
@@ -4745,6 +4784,7 @@ static void fts3EvalTokenCosts(
** the number of overflow pages consumed by a record B bytes in size.
*/
static int fts3EvalAverageDocsize(Fts3Cursor *pCsr, int *pnPage){
int rc = SQLITE_OK;
if( pCsr->nRowAvg==0 ){
/* The average document size, which is required to calculate the cost
** of each doclist, has not yet been determined. Read the required
@@ -4757,7 +4797,6 @@ static int fts3EvalAverageDocsize(Fts3Cursor *pCsr, int *pnPage){
** data stored in all rows of each column of the table, from left
** to right.
*/
int rc;
Fts3Table *p = (Fts3Table*)pCsr->base.pVtab;
sqlite3_stmt *pStmt;
sqlite3_int64 nDoc = 0;
@@ -4784,11 +4823,10 @@ static int fts3EvalAverageDocsize(Fts3Cursor *pCsr, int *pnPage){
pCsr->nRowAvg = (int)(((nByte / nDoc) + p->nPgsz) / p->nPgsz);
assert( pCsr->nRowAvg>0 );
rc = sqlite3_reset(pStmt);
if( rc!=SQLITE_OK ) return rc;
}
*pnPage = pCsr->nRowAvg;
return SQLITE_OK;
return rc;
}
/*
@@ -5138,7 +5176,8 @@ static void fts3EvalNextRow(
pExpr->iDocid = pLeft->iDocid;
pExpr->bEof = (pLeft->bEof || pRight->bEof);
if( pExpr->eType==FTSQUERY_NEAR && pExpr->bEof ){
if( pRight->pPhrase && pRight->pPhrase->doclist.aAll ){
assert( pRight->eType==FTSQUERY_PHRASE );
if( pRight->pPhrase->doclist.aAll ){
Fts3Doclist *pDl = &pRight->pPhrase->doclist;
while( *pRc==SQLITE_OK && pRight->bEof==0 ){
memset(pDl->pList, 0, pDl->nList);
@@ -5167,7 +5206,7 @@ static void fts3EvalNextRow(
if( pRight->bEof || (pLeft->bEof==0 && iCmp<0) ){
fts3EvalNextRow(pCsr, pLeft, pRc);
}else if( pLeft->bEof || (pRight->bEof==0 && iCmp>0) ){
}else if( pLeft->bEof || iCmp>0 ){
fts3EvalNextRow(pCsr, pRight, pRc);
}else{
fts3EvalNextRow(pCsr, pLeft, pRc);
@@ -5259,7 +5298,6 @@ static int fts3EvalNearTest(Fts3Expr *pExpr, int *pRc){
*/
if( *pRc==SQLITE_OK
&& pExpr->eType==FTSQUERY_NEAR
&& pExpr->bEof==0
&& (pExpr->pParent==0 || pExpr->pParent->eType!=FTSQUERY_NEAR)
){
Fts3Expr *p;
@@ -5268,42 +5306,39 @@ static int fts3EvalNearTest(Fts3Expr *pExpr, int *pRc){
/* Allocate temporary working space. */
for(p=pExpr; p->pLeft; p=p->pLeft){
assert( p->pRight->pPhrase->doclist.nList>0 );
nTmp += p->pRight->pPhrase->doclist.nList;
}
nTmp += p->pPhrase->doclist.nList;
if( nTmp==0 ){
aTmp = sqlite3_malloc(nTmp*2);
if( !aTmp ){
*pRc = SQLITE_NOMEM;
res = 0;
}else{
aTmp = sqlite3_malloc(nTmp*2);
if( !aTmp ){
*pRc = SQLITE_NOMEM;
res = 0;
}else{
char *aPoslist = p->pPhrase->doclist.pList;
int nToken = p->pPhrase->nToken;
char *aPoslist = p->pPhrase->doclist.pList;
int nToken = p->pPhrase->nToken;
for(p=p->pParent;res && p && p->eType==FTSQUERY_NEAR; p=p->pParent){
Fts3Phrase *pPhrase = p->pRight->pPhrase;
int nNear = p->nNear;
res = fts3EvalNearTrim(nNear, aTmp, &aPoslist, &nToken, pPhrase);
}
aPoslist = pExpr->pRight->pPhrase->doclist.pList;
nToken = pExpr->pRight->pPhrase->nToken;
for(p=pExpr->pLeft; p && res; p=p->pLeft){
int nNear;
Fts3Phrase *pPhrase;
assert( p->pParent && p->pParent->pLeft==p );
nNear = p->pParent->nNear;
pPhrase = (
p->eType==FTSQUERY_NEAR ? p->pRight->pPhrase : p->pPhrase
);
res = fts3EvalNearTrim(nNear, aTmp, &aPoslist, &nToken, pPhrase);
}
for(p=p->pParent;res && p && p->eType==FTSQUERY_NEAR; p=p->pParent){
Fts3Phrase *pPhrase = p->pRight->pPhrase;
int nNear = p->nNear;
res = fts3EvalNearTrim(nNear, aTmp, &aPoslist, &nToken, pPhrase);
}
sqlite3_free(aTmp);
aPoslist = pExpr->pRight->pPhrase->doclist.pList;
nToken = pExpr->pRight->pPhrase->nToken;
for(p=pExpr->pLeft; p && res; p=p->pLeft){
int nNear;
Fts3Phrase *pPhrase;
assert( p->pParent && p->pParent->pLeft==p );
nNear = p->pParent->nNear;
pPhrase = (
p->eType==FTSQUERY_NEAR ? p->pRight->pPhrase : p->pPhrase
);
res = fts3EvalNearTrim(nNear, aTmp, &aPoslist, &nToken, pPhrase);
}
}
sqlite3_free(aTmp);
}
return res;
+8
View File
@@ -18,6 +18,12 @@
# define NDEBUG 1
#endif
/* FTS3/FTS4 require virtual tables */
#ifdef SQLITE_OMIT_VIRTUALTABLE
# undef SQLITE_ENABLE_FTS3
# undef SQLITE_ENABLE_FTS4
#endif
/*
** FTS4 is really an extension for FTS3. It is enabled using the
** SQLITE_ENABLE_FTS3 macro. But to avoid confusion we also all
@@ -224,6 +230,7 @@ struct Fts3Table {
** statements is run and reset within a single virtual table API call.
*/
sqlite3_stmt *aStmt[40];
sqlite3_stmt *pSeekStmt; /* Cache for fts3CursorSeekStmt() */
char *zReadExprlist;
char *zWriteExprlist;
@@ -293,6 +300,7 @@ struct Fts3Cursor {
i16 eSearch; /* Search strategy (see below) */
u8 isEof; /* True if at End Of Results */
u8 isRequireSeek; /* True if must seek pStmt to %_content row */
u8 bSeekStmt; /* True if pStmt is a seek */
sqlite3_stmt *pStmt; /* Prepared statement in use by the cursor */
Fts3Expr *pExpr; /* Parsed MATCH query string */
int iLangid; /* Language being queried for */
+15 -7
View File
@@ -18,7 +18,14 @@
** that the sqlite3_tokenizer_module.xLanguage() method is invoked correctly.
*/
#include <tcl.h>
#if defined(INCLUDE_SQLITE_TCL_H)
# include "sqlite_tcl.h"
#else
# include "tcl.h"
# ifndef SQLITE_TCLAPI
# define SQLITE_TCLAPI
# endif
#endif
#include <string.h>
#include <assert.h>
@@ -143,7 +150,7 @@ static int nm_match_count(
/*
** Tclcmd: fts3_near_match DOCUMENT EXPR ?OPTIONS?
*/
static int fts3_near_match_cmd(
static int SQLITE_TCLAPI fts3_near_match_cmd(
ClientData clientData,
Tcl_Interp *interp,
int objc,
@@ -278,7 +285,7 @@ static int fts3_near_match_cmd(
** # Restore initial incr-load settings:
** eval fts3_configure_incr_load $cfg
*/
static int fts3_configure_incr_load_cmd(
static int SQLITE_TCLAPI fts3_configure_incr_load_cmd(
ClientData clientData,
Tcl_Interp *interp,
int objc,
@@ -458,7 +465,7 @@ static int testTokenizerNext(
if( pCsr->iLangid & 0x00000001 ){
for(i=0; i<nToken; i++) pCsr->aBuffer[i] = pToken[i];
}else{
for(i=0; i<nToken; i++) pCsr->aBuffer[i] = testTolower(pToken[i]);
for(i=0; i<nToken; i++) pCsr->aBuffer[i] = (char)testTolower(pToken[i]);
}
pCsr->iToken++;
pCsr->iInput = (int)(p - pCsr->aInput);
@@ -488,7 +495,7 @@ static int testTokenizerLanguage(
}
#endif
static int fts3_test_tokenizer_cmd(
static int SQLITE_TCLAPI fts3_test_tokenizer_cmd(
ClientData clientData,
Tcl_Interp *interp,
int objc,
@@ -517,7 +524,7 @@ static int fts3_test_tokenizer_cmd(
return TCL_OK;
}
static int fts3_test_varint_cmd(
static int SQLITE_TCLAPI fts3_test_varint_cmd(
ClientData clientData,
Tcl_Interp *interp,
int objc,
@@ -526,7 +533,8 @@ static int fts3_test_varint_cmd(
#ifdef SQLITE_ENABLE_FTS3
char aBuf[24];
int rc;
Tcl_WideInt w, w2;
Tcl_WideInt w;
sqlite3_int64 w2;
int nByte, nByte2;
if( objc!=2 ){
+43 -34
View File
@@ -29,6 +29,18 @@
#include <assert.h>
#include <string.h>
/*
** Return true if the two-argument version of fts3_tokenizer()
** has been activated via a prior call to sqlite3_db_config(db,
** SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER, 1, 0);
*/
static int fts3TokenizerEnabled(sqlite3_context *context){
sqlite3 *db = sqlite3_context_db_handle(context);
int isEnabled = 0;
sqlite3_db_config(db,SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER,-1,&isEnabled);
return isEnabled;
}
/*
** Implementation of the SQL scalar function for accessing the underlying
** hash table. This function may be called as follows:
@@ -49,7 +61,7 @@
** is a blob containing the pointer stored as the hash data corresponding
** to string <key-name> (after the hash-table is updated, if applicable).
*/
static void scalarFunc(
static void fts3TokenizerFunc(
sqlite3_context *context,
int argc,
sqlite3_value **argv
@@ -67,27 +79,23 @@ static void scalarFunc(
nName = sqlite3_value_bytes(argv[0])+1;
if( argc==2 ){
#ifdef SQLITE_ENABLE_FTS3_TOKENIZER
void *pOld;
int n = sqlite3_value_bytes(argv[1]);
if( zName==0 || n!=sizeof(pPtr) ){
sqlite3_result_error(context, "argument type mismatch", -1);
if( fts3TokenizerEnabled(context) ){
void *pOld;
int n = sqlite3_value_bytes(argv[1]);
if( zName==0 || n!=sizeof(pPtr) ){
sqlite3_result_error(context, "argument type mismatch", -1);
return;
}
pPtr = *(void **)sqlite3_value_blob(argv[1]);
pOld = sqlite3Fts3HashInsert(pHash, (void *)zName, nName, pPtr);
if( pOld==pPtr ){
sqlite3_result_error(context, "out of memory", -1);
}
}else{
sqlite3_result_error(context, "fts3tokenize disabled", -1);
return;
}
pPtr = *(void **)sqlite3_value_blob(argv[1]);
pOld = sqlite3Fts3HashInsert(pHash, (void *)zName, nName, pPtr);
if( pOld==pPtr ){
sqlite3_result_error(context, "out of memory", -1);
return;
}
#else
sqlite3_result_error(context, "fts3tokenize: "
"disabled - rebuild with -DSQLITE_ENABLE_FTS3_TOKENIZER", -1
);
return;
#endif /* SQLITE_ENABLE_FTS3_TOKENIZER */
}else
{
}else{
if( zName ){
pPtr = sqlite3Fts3HashFind(pHash, zName, nName);
}
@@ -98,7 +106,6 @@ static void scalarFunc(
return;
}
}
sqlite3_result_blob(context, (void *)&pPtr, sizeof(pPtr), SQLITE_TRANSIENT);
}
@@ -217,7 +224,11 @@ int sqlite3Fts3InitTokenizer(
#ifdef SQLITE_TEST
#include <tcl.h>
#if defined(INCLUDE_SQLITE_TCL_H)
# include "sqlite_tcl.h"
#else
# include "tcl.h"
#endif
#include <string.h>
/*
@@ -336,7 +347,6 @@ finish:
Tcl_DecrRefCount(pRet);
}
#ifdef SQLITE_ENABLE_FTS3_TOKENIZER
static
int registerTokenizer(
sqlite3 *db,
@@ -358,7 +368,6 @@ int registerTokenizer(
return sqlite3_finalize(pStmt);
}
#endif /* SQLITE_ENABLE_FTS3_TOKENIZER */
static
@@ -431,13 +440,13 @@ static void intTestFunc(
assert( 0==strcmp(sqlite3_errmsg(db), "unknown tokenizer: nosuchtokenizer") );
/* Test the storage function */
#ifdef SQLITE_ENABLE_FTS3_TOKENIZER
rc = registerTokenizer(db, "nosuchtokenizer", p1);
assert( rc==SQLITE_OK );
rc = queryTokenizer(db, "nosuchtokenizer", &p2);
assert( rc==SQLITE_OK );
assert( p2==p1 );
#endif
if( fts3TokenizerEnabled(context) ){
rc = registerTokenizer(db, "nosuchtokenizer", p1);
assert( rc==SQLITE_OK );
rc = queryTokenizer(db, "nosuchtokenizer", &p2);
assert( rc==SQLITE_OK );
assert( p2==p1 );
}
sqlite3_result_text(context, "ok", -1, SQLITE_STATIC);
}
@@ -453,7 +462,7 @@ static void intTestFunc(
** sqlite3Fts3HashInit(pHash, FTS3_HASH_STRING, 1);
**
** This function adds a scalar function (see header comment above
** scalarFunc() in this file for details) and, if ENABLE_TABLE is
** fts3TokenizerFunc() in this file for details) and, if ENABLE_TABLE is
** defined at compilation time, a temporary virtual table (see header
** comment above struct HashTableVtab) to the database schema. Both
** provide read/write access to the contents of *pHash.
@@ -482,10 +491,10 @@ int sqlite3Fts3InitHashTable(
#endif
if( SQLITE_OK==rc ){
rc = sqlite3_create_function(db, zName, 1, any, p, scalarFunc, 0, 0);
rc = sqlite3_create_function(db, zName, 1, any, p, fts3TokenizerFunc, 0, 0);
}
if( SQLITE_OK==rc ){
rc = sqlite3_create_function(db, zName, 2, any, p, scalarFunc, 0, 0);
rc = sqlite3_create_function(db, zName, 2, any, p, fts3TokenizerFunc, 0, 0);
}
#ifdef SQLITE_TEST
if( SQLITE_OK==rc ){
+13 -13
View File
@@ -136,16 +136,16 @@ static int unicodeAddExceptions(
){
const unsigned char *z = (const unsigned char *)zIn;
const unsigned char *zTerm = &z[nIn];
int iCode;
unsigned int iCode;
int nEntry = 0;
assert( bAlnum==0 || bAlnum==1 );
while( z<zTerm ){
READ_UTF8(z, zTerm, iCode);
assert( (sqlite3FtsUnicodeIsalnum(iCode) & 0xFFFFFFFE)==0 );
if( sqlite3FtsUnicodeIsalnum(iCode)!=bAlnum
&& sqlite3FtsUnicodeIsdiacritic(iCode)==0
assert( (sqlite3FtsUnicodeIsalnum((int)iCode) & 0xFFFFFFFE)==0 );
if( sqlite3FtsUnicodeIsalnum((int)iCode)!=bAlnum
&& sqlite3FtsUnicodeIsdiacritic((int)iCode)==0
){
nEntry++;
}
@@ -162,13 +162,13 @@ static int unicodeAddExceptions(
z = (const unsigned char *)zIn;
while( z<zTerm ){
READ_UTF8(z, zTerm, iCode);
if( sqlite3FtsUnicodeIsalnum(iCode)!=bAlnum
&& sqlite3FtsUnicodeIsdiacritic(iCode)==0
if( sqlite3FtsUnicodeIsalnum((int)iCode)!=bAlnum
&& sqlite3FtsUnicodeIsdiacritic((int)iCode)==0
){
int i, j;
for(i=0; i<nNew && aNew[i]<iCode; i++);
for(i=0; i<nNew && aNew[i]<(int)iCode; i++);
for(j=nNew; j>i; j--) aNew[j] = aNew[j-1];
aNew[i] = iCode;
aNew[i] = (int)iCode;
nNew++;
}
}
@@ -318,7 +318,7 @@ static int unicodeNext(
){
unicode_cursor *pCsr = (unicode_cursor *)pC;
unicode_tokenizer *p = ((unicode_tokenizer *)pCsr->base.pTokenizer);
int iCode = 0;
unsigned int iCode = 0;
char *zOut;
const unsigned char *z = &pCsr->aInput[pCsr->iOff];
const unsigned char *zStart = z;
@@ -330,7 +330,7 @@ static int unicodeNext(
** the input. */
while( z<zTerm ){
READ_UTF8(z, zTerm, iCode);
if( unicodeIsAlnum(p, iCode) ) break;
if( unicodeIsAlnum(p, (int)iCode) ) break;
zStart = z;
}
if( zStart>=zTerm ) return SQLITE_DONE;
@@ -350,7 +350,7 @@ static int unicodeNext(
/* Write the folded case of the last character read to the output */
zEnd = z;
iOut = sqlite3FtsUnicodeFold(iCode, p->bRemoveDiacritic);
iOut = sqlite3FtsUnicodeFold((int)iCode, p->bRemoveDiacritic);
if( iOut ){
WRITE_UTF8(zOut, iOut);
}
@@ -358,8 +358,8 @@ static int unicodeNext(
/* If the cursor is not at EOF, read the next character */
if( z>=zTerm ) break;
READ_UTF8(z, zTerm, iCode);
}while( unicodeIsAlnum(p, iCode)
|| sqlite3FtsUnicodeIsdiacritic(iCode)
}while( unicodeIsAlnum(p, (int)iCode)
|| sqlite3FtsUnicodeIsdiacritic((int)iCode)
);
/* Set the output variables and return. */
+10 -11
View File
@@ -127,9 +127,9 @@ int sqlite3FtsUnicodeIsalnum(int c){
0xFFFFFFFF, 0xFC00FFFF, 0xF8000001, 0xF8000001,
};
if( c<128 ){
return ( (aAscii[c >> 5] & (1 << (c & 0x001F)))==0 );
}else if( c<(1<<22) ){
if( (unsigned int)c<128 ){
return ( (aAscii[c >> 5] & ((unsigned int)1 << (c & 0x001F)))==0 );
}else if( (unsigned int)c<(1<<22) ){
unsigned int key = (((unsigned int)c)<<10) | 0x000003FF;
int iRes = 0;
int iHi = sizeof(aEntry)/sizeof(aEntry[0]) - 1;
@@ -322,16 +322,17 @@ int sqlite3FtsUnicodeFold(int c, int bRemoveDiacritic){
int ret = c;
assert( c>=0 );
assert( sizeof(unsigned short)==2 && sizeof(unsigned char)==1 );
if( c<128 ){
if( c>='A' && c<='Z' ) ret = c + ('a' - 'A');
}else if( c<65536 ){
const struct TableEntry *p;
int iHi = sizeof(aEntry)/sizeof(aEntry[0]) - 1;
int iLo = 0;
int iRes = -1;
assert( c>aEntry[0].iCode );
while( iHi>=iLo ){
int iTest = (iHi + iLo) / 2;
int cmp = (c - aEntry[iTest].iCode);
@@ -342,14 +343,12 @@ int sqlite3FtsUnicodeFold(int c, int bRemoveDiacritic){
iHi = iTest-1;
}
}
assert( iRes<0 || c>=aEntry[iRes].iCode );
if( iRes>=0 ){
const struct TableEntry *p = &aEntry[iRes];
if( c<(p->iCode + p->nRange) && 0==(0x01 & p->flags & (p->iCode ^ c)) ){
ret = (c + (aiOff[p->flags>>1])) & 0x0000FFFF;
assert( ret>0 );
}
assert( iRes>=0 && c>=aEntry[iRes].iCode );
p = &aEntry[iRes];
if( c<(p->iCode + p->nRange) && 0==(0x01 & p->flags & (p->iCode ^ c)) ){
ret = (c + (aiOff[p->flags>>1])) & 0x0000FFFF;
assert( ret>0 );
}
if( bRemoveDiacritic ) ret = remove_diacritic(ret);
+12 -6
View File
@@ -333,7 +333,8 @@ static int fts3SqlStmt(
** of the oldest level in the db that contains at least ? segments. Or,
** if no level in the FTS index contains more than ? segments, the statement
** returns zero rows. */
/* 28 */ "SELECT level FROM %Q.'%q_segdir' GROUP BY level HAVING count(*)>=?"
/* 28 */ "SELECT level, count(*) AS cnt FROM %Q.'%q_segdir' "
" GROUP BY level HAVING cnt>=?"
" ORDER BY (level %% 1024) ASC LIMIT 1",
/* Estimate the upper limit on the number of leaf nodes in a new segment
@@ -406,7 +407,8 @@ static int fts3SqlStmt(
if( !zSql ){
rc = SQLITE_NOMEM;
}else{
rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, NULL);
rc = sqlite3_prepare_v3(p->db, zSql, -1, SQLITE_PREPARE_PERSISTENT,
&pStmt, NULL);
sqlite3_free(zSql);
assert( rc==SQLITE_OK || pStmt==0 );
p->aStmt[eStmt] = pStmt;
@@ -3194,7 +3196,7 @@ static int fts3SegmentMerge(
** segment. The level of the new segment is equal to the numerically
** greatest segment level currently present in the database for this
** index. The idx of the new segment is always 0. */
if( csr.nSegment==1 ){
if( csr.nSegment==1 && 0==fts3SegReaderIsPending(csr.apSegment[0]) ){
rc = SQLITE_DONE;
goto finished;
}
@@ -4836,10 +4838,11 @@ int sqlite3Fts3Incrmerge(Fts3Table *p, int nMerge, int nMin){
** set nSeg to -1.
*/
rc = fts3SqlStmt(p, SQL_FIND_MERGE_LEVEL, &pFindLevel, 0);
sqlite3_bind_int(pFindLevel, 1, nMin);
sqlite3_bind_int(pFindLevel, 1, MAX(2, nMin));
if( sqlite3_step(pFindLevel)==SQLITE_ROW ){
iAbsLevel = sqlite3_column_int64(pFindLevel, 0);
nSeg = nMin;
nSeg = sqlite3_column_int(pFindLevel, 1);
assert( nSeg>=2 );
}else{
nSeg = -1;
}
@@ -4954,11 +4957,14 @@ int sqlite3Fts3Incrmerge(Fts3Table *p, int nMerge, int nMin){
** Convert the text beginning at *pz into an integer and return
** its value. Advance *pz to point to the first character past
** the integer.
**
** This function used for parameters to merge= and incrmerge=
** commands.
*/
static int fts3Getint(const char **pz){
const char *z = *pz;
int i = 0;
while( (*z)>='0' && (*z)<='9' ) i = 10*i + *(z++) - '0';
while( (*z)>='0' && (*z)<='9' && i<214748363 ) i = 10*i + *(z++) - '0';
*pz = z;
return i;
}
+16
View File
@@ -0,0 +1,16 @@
#!/bin/sh
set -e
srcdir=`dirname $(dirname $(dirname $(dirname $0)))`
./testfixture $srcdir/test/fts3.test --output=fts3cov-out.txt
echo ""
for f in `ls $srcdir/ext/fts3/*.c`
do
f=`basename $f`
echo -ne "$f: "
gcov -b $f | grep Taken | sed 's/Taken at least once://'
done
+1 -1
View File
@@ -398,8 +398,8 @@ static void showSegmentStats(sqlite3 *db, const char *zTab){
if( sqlite3_step(pStmt)==SQLITE_ROW
&& (nLeaf = sqlite3_column_int(pStmt, 0))>0
){
nIdx = sqlite3_column_int(pStmt, 5);
sqlite3_int64 sz;
nIdx = sqlite3_column_int(pStmt, 5);
printf("For level %d:\n", i);
printf(" Number of indexes...................... %9d\n", nIdx);
printf(" Number of leaf segments................ %9d\n", nLeaf);
+3 -3
View File
@@ -226,9 +226,9 @@ proc print_isalnum {zFunc lRange} {
an_print_range_array $lRange
an_print_ascii_bitmap $lRange
puts {
if( c<128 ){
return ( (aAscii[c >> 5] & (1 << (c & 0x001F)))==0 );
}else if( c<(1<<22) ){
if( (unsigned int)c<128 ){
return ( (aAscii[c >> 5] & ((unsigned int)1 << (c & 0x001F)))==0 );
}else if( (unsigned int)c<(1<<22) ){
unsigned int key = (((unsigned int)c)<<10) | 0x000003FF;
int iRes = 0;
int iHi = sizeof(aEntry)/sizeof(aEntry[0]) - 1;
+8 -7
View File
@@ -143,11 +143,13 @@ struct Fts5PhraseIter {
** ... FROM ftstable WHERE ftstable MATCH $p ORDER BY rowid
**
** with $p set to a phrase equivalent to the phrase iPhrase of the
** current query is executed. For each row visited, the callback function
** passed as the fourth argument is invoked. The context and API objects
** passed to the callback function may be used to access the properties of
** each matched row. Invoking Api.xUserData() returns a copy of the pointer
** passed as the third argument to pUserData.
** current query is executed. Any column filter that applies to
** phrase iPhrase of the current query is included in $p. For each
** row visited, the callback function passed as the fourth argument
** is invoked. The context and API objects passed to the callback
** function may be used to access the properties of each matched row.
** Invoking Api.xUserData() returns a copy of the pointer passed as
** the third argument to pUserData.
**
** If the callback function returns any value other than SQLITE_OK, the
** query is abandoned and the xQueryPhrase function returns immediately.
@@ -316,7 +318,7 @@ struct Fts5ExtensionApi {
** behaviour. The structure methods are expected to function as follows:
**
** xCreate:
** This function is used to allocate and inititalize a tokenizer instance.
** This function is used to allocate and initialize a tokenizer instance.
** A tokenizer instance is required to actually tokenize text.
**
** The first argument passed to this function is a copy of the (void*)
@@ -575,4 +577,3 @@ struct fts5_api {
#endif
#endif /* _FTS5_H */
+34 -18
View File
@@ -26,10 +26,13 @@ SQLITE_EXTENSION_INIT1
typedef unsigned char u8;
typedef unsigned int u32;
typedef unsigned short u16;
typedef short i16;
typedef sqlite3_int64 i64;
typedef sqlite3_uint64 u64;
#define ArraySize(x) ((int)(sizeof(x) / sizeof(x[0])))
#ifndef ArraySize
# define ArraySize(x) ((int)(sizeof(x) / sizeof(x[0])))
#endif
#define testcase(x)
#define ALWAYS(x) 1
@@ -46,6 +49,10 @@ typedef sqlite3_uint64 u64;
#endif
/* Truncate very long tokens to this many bytes. Hard limit is
** (65536-1-1-4-9)==65521 bytes. The limiting factor is the 16-bit offset
** field that occurs at the start of each leaf page (see fts5_index.c). */
#define FTS5_MAX_TOKEN_SIZE 32768
/*
** Maximum number of prefix indexes on single FTS5 table. This must be
@@ -80,6 +87,16 @@ extern int sqlite3_fts5_may_be_corrupt;
# define assert_nc(x) assert(x)
#endif
/* Mark a function parameter as unused, to suppress nuisance compiler
** warnings. */
#ifndef UNUSED_PARAM
# define UNUSED_PARAM(X) (void)(X)
#endif
#ifndef UNUSED_PARAM2
# define UNUSED_PARAM2(X, Y) (void)(X), (void)(Y)
#endif
typedef struct Fts5Global Fts5Global;
typedef struct Fts5Colset Fts5Colset;
@@ -161,6 +178,7 @@ struct Fts5Config {
int pgsz; /* Approximate page size used in %_data */
int nAutomerge; /* 'automerge' setting */
int nCrisisMerge; /* Maximum allowed segments per level */
int nUsermerge; /* 'usermerge' setting */
int nHashSize; /* Bytes of memory for in-memory hash */
char *zRank; /* Name of rank function */
char *zRankArgs; /* Arguments to rank function */
@@ -345,16 +363,6 @@ struct Fts5IndexIter {
int sqlite3Fts5IndexOpen(Fts5Config *pConfig, int bCreate, Fts5Index**, char**);
int sqlite3Fts5IndexClose(Fts5Index *p);
/*
** for(
** sqlite3Fts5IndexQuery(p, "token", 5, 0, 0, &pIter);
** 0==sqlite3Fts5IterEof(pIter);
** sqlite3Fts5IterNext(pIter)
** ){
** i64 iRowid = sqlite3Fts5IterRowid(pIter);
** }
*/
/*
** Return a simple checksum value based on the arguments.
*/
@@ -396,7 +404,6 @@ int sqlite3Fts5IndexQuery(
*/
int sqlite3Fts5IterNext(Fts5IndexIter*);
int sqlite3Fts5IterNextFrom(Fts5IndexIter*, i64 iMatch);
i64 sqlite3Fts5IterRowid(Fts5IndexIter*);
/*
** Close an iterator opened by sqlite3Fts5IndexQuery().
@@ -439,9 +446,9 @@ int sqlite3Fts5IndexBeginWrite(
/*
** Flush any data stored in the in-memory hash tables to the database.
** If the bCommit flag is true, also close any open blob handles.
** Also close any open blob handles.
*/
int sqlite3Fts5IndexSync(Fts5Index *p, int bCommit);
int sqlite3Fts5IndexSync(Fts5Index *p);
/*
** Discard any data stored in the in-memory hash tables. Do not write it
@@ -479,6 +486,7 @@ int sqlite3Fts5IndexReads(Fts5Index *p);
int sqlite3Fts5IndexReinit(Fts5Index *p);
int sqlite3Fts5IndexOptimize(Fts5Index *p);
int sqlite3Fts5IndexMerge(Fts5Index *p, int nMerge);
int sqlite3Fts5IndexReset(Fts5Index *p);
int sqlite3Fts5IndexLoadConfig(Fts5Index *p);
@@ -610,7 +618,7 @@ int sqlite3Fts5StorageDocsize(Fts5Storage *p, i64 iRowid, int *aCol);
int sqlite3Fts5StorageSize(Fts5Storage *p, int iCol, i64 *pnAvg);
int sqlite3Fts5StorageRowCount(Fts5Storage *p, i64 *pnRow);
int sqlite3Fts5StorageSync(Fts5Storage *p, int bCommit);
int sqlite3Fts5StorageSync(Fts5Storage *p);
int sqlite3Fts5StorageRollback(Fts5Storage *p);
int sqlite3Fts5StorageConfigValue(
@@ -621,6 +629,7 @@ int sqlite3Fts5StorageDeleteAll(Fts5Storage *p);
int sqlite3Fts5StorageRebuild(Fts5Storage *p);
int sqlite3Fts5StorageOptimize(Fts5Storage *p);
int sqlite3Fts5StorageMerge(Fts5Storage *p, int nMerge);
int sqlite3Fts5StorageReset(Fts5Storage *p);
/*
** End of interface to code in fts5_storage.c.
@@ -645,6 +654,7 @@ struct Fts5Token {
/* Parse a MATCH expression. */
int sqlite3Fts5ExprNew(
Fts5Config *pConfig,
int iCol, /* Column on LHS of MATCH operator */
const char *zExpr,
Fts5Expr **ppNew,
char **pzErr
@@ -679,9 +689,8 @@ int sqlite3Fts5ExprPopulatePoslists(
Fts5Config*, Fts5Expr*, Fts5PoslistPopulator*, int, const char*, int
);
void sqlite3Fts5ExprCheckPoslists(Fts5Expr*, i64);
void sqlite3Fts5ExprClearEof(Fts5Expr*);
int sqlite3Fts5ExprClonePhrase(Fts5Config*, Fts5Expr*, int, Fts5Expr**);
int sqlite3Fts5ExprClonePhrase(Fts5Expr*, int, Fts5Expr**);
int sqlite3Fts5ExprPhraseCollist(Fts5Expr *, int, const u8 **, int *);
@@ -700,6 +709,12 @@ Fts5ExprNode *sqlite3Fts5ParseNode(
Fts5ExprNearset *pNear
);
Fts5ExprNode *sqlite3Fts5ParseImplicitAnd(
Fts5Parse *pParse,
Fts5ExprNode *pLeft,
Fts5ExprNode *pRight
);
Fts5ExprPhrase *sqlite3Fts5ParseTerm(
Fts5Parse *pParse,
Fts5ExprPhrase *pPhrase,
@@ -724,7 +739,8 @@ void sqlite3Fts5ParseNearsetFree(Fts5ExprNearset*);
void sqlite3Fts5ParseNodeFree(Fts5ExprNode*);
void sqlite3Fts5ParseSetDistance(Fts5Parse*, Fts5ExprNearset*, Fts5Token*);
void sqlite3Fts5ParseSetColset(Fts5Parse*, Fts5ExprNearset*, Fts5Colset*);
void sqlite3Fts5ParseSetColset(Fts5Parse*, Fts5ExprNode*, Fts5Colset*);
Fts5Colset *sqlite3Fts5ParseColsetInvert(Fts5Parse*, Fts5Colset*);
void sqlite3Fts5ParseFinished(Fts5Parse *pParse, Fts5ExprNode *p);
void sqlite3Fts5ParseNear(Fts5Parse *pParse, Fts5Token*);
+190 -45
View File
@@ -158,6 +158,8 @@ static int fts5HighlightCb(
int rc = SQLITE_OK;
int iPos;
UNUSED_PARAM2(pToken, nToken);
if( tflags & FTS5_TOKEN_COLOCATED ) return SQLITE_OK;
iPos = p->iPos++;
@@ -187,7 +189,7 @@ static int fts5HighlightCb(
if( p->iRangeEnd>0 && iPos==p->iRangeEnd ){
fts5HighlightAppend(&rc, p, &p->zIn[p->iOff], iEndOff - p->iOff);
p->iOff = iEndOff;
if( iPos<p->iter.iEnd ){
if( iPos>=p->iter.iStart && iPos<p->iter.iEnd ){
fts5HighlightAppend(&rc, p, p->zClose, -1);
}
}
@@ -244,6 +246,118 @@ static void fts5HighlightFunction(
** End of highlight() implementation.
**************************************************************************/
/*
** Context object passed to the fts5SentenceFinderCb() function.
*/
typedef struct Fts5SFinder Fts5SFinder;
struct Fts5SFinder {
int iPos; /* Current token position */
int nFirstAlloc; /* Allocated size of aFirst[] */
int nFirst; /* Number of entries in aFirst[] */
int *aFirst; /* Array of first token in each sentence */
const char *zDoc; /* Document being tokenized */
};
/*
** Add an entry to the Fts5SFinder.aFirst[] array. Grow the array if
** necessary. Return SQLITE_OK if successful, or SQLITE_NOMEM if an
** error occurs.
*/
static int fts5SentenceFinderAdd(Fts5SFinder *p, int iAdd){
if( p->nFirstAlloc==p->nFirst ){
int nNew = p->nFirstAlloc ? p->nFirstAlloc*2 : 64;
int *aNew;
aNew = (int*)sqlite3_realloc(p->aFirst, nNew*sizeof(int));
if( aNew==0 ) return SQLITE_NOMEM;
p->aFirst = aNew;
p->nFirstAlloc = nNew;
}
p->aFirst[p->nFirst++] = iAdd;
return SQLITE_OK;
}
/*
** This function is an xTokenize() callback used by the auxiliary snippet()
** function. Its job is to identify tokens that are the first in a sentence.
** For each such token, an entry is added to the SFinder.aFirst[] array.
*/
static int fts5SentenceFinderCb(
void *pContext, /* Pointer to HighlightContext object */
int tflags, /* Mask of FTS5_TOKEN_* flags */
const char *pToken, /* Buffer containing token */
int nToken, /* Size of token in bytes */
int iStartOff, /* Start offset of token */
int iEndOff /* End offset of token */
){
int rc = SQLITE_OK;
UNUSED_PARAM2(pToken, nToken);
UNUSED_PARAM(iEndOff);
if( (tflags & FTS5_TOKEN_COLOCATED)==0 ){
Fts5SFinder *p = (Fts5SFinder*)pContext;
if( p->iPos>0 ){
int i;
char c = 0;
for(i=iStartOff-1; i>=0; i--){
c = p->zDoc[i];
if( c!=' ' && c!='\t' && c!='\n' && c!='\r' ) break;
}
if( i!=iStartOff-1 && (c=='.' || c==':') ){
rc = fts5SentenceFinderAdd(p, p->iPos);
}
}else{
rc = fts5SentenceFinderAdd(p, 0);
}
p->iPos++;
}
return rc;
}
static int fts5SnippetScore(
const Fts5ExtensionApi *pApi, /* API offered by current FTS version */
Fts5Context *pFts, /* First arg to pass to pApi functions */
int nDocsize, /* Size of column in tokens */
unsigned char *aSeen, /* Array with one element per query phrase */
int iCol, /* Column to score */
int iPos, /* Starting offset to score */
int nToken, /* Max tokens per snippet */
int *pnScore, /* OUT: Score */
int *piPos /* OUT: Adjusted offset */
){
int rc;
int i;
int ip = 0;
int ic = 0;
int iOff = 0;
int iFirst = -1;
int nInst;
int nScore = 0;
int iLast = 0;
rc = pApi->xInstCount(pFts, &nInst);
for(i=0; i<nInst && rc==SQLITE_OK; i++){
rc = pApi->xInst(pFts, i, &ip, &ic, &iOff);
if( rc==SQLITE_OK && ic==iCol && iOff>=iPos && iOff<(iPos+nToken) ){
nScore += (aSeen[ip] ? 1 : 1000);
aSeen[ip] = 1;
if( iFirst<0 ) iFirst = iOff;
iLast = iOff + pApi->xPhraseSize(pFts, ip);
}
}
*pnScore = nScore;
if( piPos ){
int iAdj = iFirst - (nToken - (iLast-iFirst)) / 2;
if( (iAdj+nToken)>nDocsize ) iAdj = nDocsize - nToken;
if( iAdj<0 ) iAdj = 0;
*piPos = iAdj;
}
return rc;
}
/*
** Implementation of snippet() function.
*/
@@ -265,9 +379,10 @@ static void fts5SnippetFunction(
unsigned char *aSeen; /* Array of "seen instance" flags */
int iBestCol; /* Column containing best snippet */
int iBestStart = 0; /* First token of best snippet */
int iBestLast; /* Last token of best snippet */
int nBestScore = 0; /* Score of best snippet */
int nColSize = 0; /* Total size of iBestCol in tokens */
Fts5SFinder sFinder; /* Used to find the beginnings of sentences */
int nCol;
if( nVal!=5 ){
const char *zErr = "wrong number of arguments to function snippet()";
@@ -275,13 +390,13 @@ static void fts5SnippetFunction(
return;
}
nCol = pApi->xColumnCount(pFts);
memset(&ctx, 0, sizeof(HighlightContext));
iCol = sqlite3_value_int(apVal[0]);
ctx.zOpen = (const char*)sqlite3_value_text(apVal[1]);
ctx.zClose = (const char*)sqlite3_value_text(apVal[2]);
zEllips = (const char*)sqlite3_value_text(apVal[3]);
nToken = sqlite3_value_int(apVal[4]);
iBestLast = nToken-1;
iBestCol = (iCol>=0 ? iCol : 0);
nPhrase = pApi->xPhraseCount(pFts);
@@ -289,65 +404,94 @@ static void fts5SnippetFunction(
if( aSeen==0 ){
rc = SQLITE_NOMEM;
}
if( rc==SQLITE_OK ){
rc = pApi->xInstCount(pFts, &nInst);
}
for(i=0; rc==SQLITE_OK && i<nInst; i++){
int ip, iSnippetCol, iStart;
memset(aSeen, 0, nPhrase);
rc = pApi->xInst(pFts, i, &ip, &iSnippetCol, &iStart);
if( rc==SQLITE_OK && (iCol<0 || iSnippetCol==iCol) ){
int nScore = 1000;
int iLast = iStart - 1 + pApi->xPhraseSize(pFts, ip);
int j;
aSeen[ip] = 1;
for(j=i+1; rc==SQLITE_OK && j<nInst; j++){
int ic; int io; int iFinal;
rc = pApi->xInst(pFts, j, &ip, &ic, &io);
iFinal = io + pApi->xPhraseSize(pFts, ip) - 1;
if( rc==SQLITE_OK && ic==iSnippetCol && iLast<iStart+nToken ){
nScore += aSeen[ip] ? 1000 : 1;
aSeen[ip] = 1;
if( iFinal>iLast ) iLast = iFinal;
memset(&sFinder, 0, sizeof(Fts5SFinder));
for(i=0; i<nCol; i++){
if( iCol<0 || iCol==i ){
int nDoc;
int nDocsize;
int ii;
sFinder.iPos = 0;
sFinder.nFirst = 0;
rc = pApi->xColumnText(pFts, i, &sFinder.zDoc, &nDoc);
if( rc!=SQLITE_OK ) break;
rc = pApi->xTokenize(pFts,
sFinder.zDoc, nDoc, (void*)&sFinder,fts5SentenceFinderCb
);
if( rc!=SQLITE_OK ) break;
rc = pApi->xColumnSize(pFts, i, &nDocsize);
if( rc!=SQLITE_OK ) break;
for(ii=0; rc==SQLITE_OK && ii<nInst; ii++){
int ip, ic, io;
int iAdj;
int nScore;
int jj;
rc = pApi->xInst(pFts, ii, &ip, &ic, &io);
if( ic!=i || rc!=SQLITE_OK ) continue;
memset(aSeen, 0, nPhrase);
rc = fts5SnippetScore(pApi, pFts, nDocsize, aSeen, i,
io, nToken, &nScore, &iAdj
);
if( rc==SQLITE_OK && nScore>nBestScore ){
nBestScore = nScore;
iBestCol = i;
iBestStart = iAdj;
nColSize = nDocsize;
}
}
if( rc==SQLITE_OK && nScore>nBestScore ){
iBestCol = iSnippetCol;
iBestStart = iStart;
iBestLast = iLast;
nBestScore = nScore;
if( rc==SQLITE_OK && sFinder.nFirst && nDocsize>nToken ){
for(jj=0; jj<(sFinder.nFirst-1); jj++){
if( sFinder.aFirst[jj+1]>io ) break;
}
if( sFinder.aFirst[jj]<io ){
memset(aSeen, 0, nPhrase);
rc = fts5SnippetScore(pApi, pFts, nDocsize, aSeen, i,
sFinder.aFirst[jj], nToken, &nScore, 0
);
nScore += (sFinder.aFirst[jj]==0 ? 120 : 100);
if( rc==SQLITE_OK && nScore>nBestScore ){
nBestScore = nScore;
iBestCol = i;
iBestStart = sFinder.aFirst[jj];
nColSize = nDocsize;
}
}
}
}
}
}
if( rc==SQLITE_OK ){
rc = pApi->xColumnSize(pFts, iBestCol, &nColSize);
}
if( rc==SQLITE_OK ){
rc = pApi->xColumnText(pFts, iBestCol, &ctx.zIn, &ctx.nIn);
}
if( rc==SQLITE_OK && nColSize==0 ){
rc = pApi->xColumnSize(pFts, iBestCol, &nColSize);
}
if( ctx.zIn ){
if( rc==SQLITE_OK ){
rc = fts5CInstIterInit(pApi, pFts, iBestCol, &ctx.iter);
}
if( (iBestStart+nToken-1)>iBestLast ){
iBestStart -= (iBestStart+nToken-1-iBestLast) / 2;
}
if( iBestStart+nToken>nColSize ){
iBestStart = nColSize - nToken;
}
if( iBestStart<0 ) iBestStart = 0;
ctx.iRangeStart = iBestStart;
ctx.iRangeEnd = iBestStart + nToken - 1;
if( iBestStart>0 ){
fts5HighlightAppend(&rc, &ctx, zEllips, -1);
}
/* Advance iterator ctx.iter so that it points to the first coalesced
** phrase instance at or following position iBestStart. */
while( ctx.iter.iStart>=0 && ctx.iter.iStart<iBestStart && rc==SQLITE_OK ){
rc = fts5CInstIterNext(&ctx.iter);
}
if( rc==SQLITE_OK ){
rc = pApi->xTokenize(pFts, ctx.zIn, ctx.nIn, (void*)&ctx,fts5HighlightCb);
}
@@ -356,15 +500,15 @@ static void fts5SnippetFunction(
}else{
fts5HighlightAppend(&rc, &ctx, zEllips, -1);
}
if( rc==SQLITE_OK ){
sqlite3_result_text(pCtx, (const char*)ctx.zOut, -1, SQLITE_TRANSIENT);
}else{
sqlite3_result_error_code(pCtx, rc);
}
sqlite3_free(ctx.zOut);
}
if( rc==SQLITE_OK ){
sqlite3_result_text(pCtx, (const char*)ctx.zOut, -1, SQLITE_TRANSIENT);
}else{
sqlite3_result_error_code(pCtx, rc);
}
sqlite3_free(ctx.zOut);
sqlite3_free(aSeen);
sqlite3_free(sFinder.aFirst);
}
/************************************************************************/
@@ -391,6 +535,7 @@ static int fts5CountCb(
void *pUserData /* Pointer to sqlite3_int64 variable */
){
sqlite3_int64 *pn = (sqlite3_int64*)pUserData;
UNUSED_PARAM2(pApi, pFts);
(*pn)++;
return SQLITE_OK;
}
+8 -9
View File
@@ -67,9 +67,11 @@ void sqlite3Fts5BufferAppendBlob(
const u8 *pData
){
assert_nc( *pRc || nData>=0 );
if( fts5BufferGrow(pRc, pBuf, nData) ) return;
memcpy(&pBuf->p[pBuf->n], pData, nData);
pBuf->n += nData;
if( nData ){
if( fts5BufferGrow(pRc, pBuf, nData) ) return;
memcpy(&pBuf->p[pBuf->n], pData, nData);
pBuf->n += nData;
}
}
/*
@@ -236,7 +238,7 @@ int sqlite3Fts5PoslistWriterAppend(
Fts5PoslistWriter *pWriter,
i64 iPos
){
int rc;
int rc = 0; /* Initialized only to suppress erroneous warning from Clang */
if( fts5BufferGrow(&rc, pBuf, 5+5+5) ) return rc;
sqlite3Fts5PoslistSafeAppend(pBuf, &pWriter->iPrev, iPos);
return SQLITE_OK;
@@ -246,8 +248,8 @@ void *sqlite3Fts5MallocZero(int *pRc, int nByte){
void *pRet = 0;
if( *pRc==SQLITE_OK ){
pRet = sqlite3_malloc(nByte);
if( pRet==0 && nByte>0 ){
*pRc = SQLITE_NOMEM;
if( pRet==0 ){
if( nByte>0 ) *pRc = SQLITE_NOMEM;
}else{
memset(pRet, 0, nByte);
}
@@ -390,6 +392,3 @@ void sqlite3Fts5TermsetFree(Fts5Termset *p){
sqlite3_free(p);
}
}
+18 -3
View File
@@ -18,6 +18,7 @@
#define FTS5_DEFAULT_PAGE_SIZE 4050
#define FTS5_DEFAULT_AUTOMERGE 4
#define FTS5_DEFAULT_USERMERGE 4
#define FTS5_DEFAULT_CRISISMERGE 16
#define FTS5_DEFAULT_HASHSIZE (1024*1024)
@@ -206,7 +207,7 @@ static int fts5ConfigSetEnum(
const char *zEnum,
int *peVal
){
int nEnum = strlen(zEnum);
int nEnum = (int)strlen(zEnum);
int i;
int iVal = -1;
@@ -441,7 +442,9 @@ static const char *fts5ConfigGobbleWord(
*pbQuoted = 1;
}else{
zRet = fts5ConfigSkipBareword(zIn);
zOut[zRet-zIn] = '\0';
if( zRet ){
zOut[zRet-zIn] = '\0';
}
}
}
@@ -857,6 +860,18 @@ int sqlite3Fts5ConfigSetValue(
}
}
else if( 0==sqlite3_stricmp(zKey, "usermerge") ){
int nUsermerge = -1;
if( SQLITE_INTEGER==sqlite3_value_numeric_type(pVal) ){
nUsermerge = sqlite3_value_int(pVal);
}
if( nUsermerge<2 || nUsermerge>16 ){
*pbBadkey = 1;
}else{
pConfig->nUsermerge = nUsermerge;
}
}
else if( 0==sqlite3_stricmp(zKey, "crisismerge") ){
int nCrisisMerge = -1;
if( SQLITE_INTEGER==sqlite3_value_numeric_type(pVal) ){
@@ -903,6 +918,7 @@ int sqlite3Fts5ConfigLoad(Fts5Config *pConfig, int iCookie){
/* Set default values */
pConfig->pgsz = FTS5_DEFAULT_PAGE_SIZE;
pConfig->nAutomerge = FTS5_DEFAULT_AUTOMERGE;
pConfig->nUsermerge = FTS5_DEFAULT_USERMERGE;
pConfig->nCrisisMerge = FTS5_DEFAULT_CRISISMERGE;
pConfig->nHashSize = FTS5_DEFAULT_HASHSIZE;
@@ -943,4 +959,3 @@ int sqlite3Fts5ConfigLoad(Fts5Config *pConfig, int iCookie){
}
return rc;
}
+365 -115
View File
@@ -167,6 +167,7 @@ static int fts5ExprGetToken(
case ',': tok = FTS5_COMMA; break;
case '+': tok = FTS5_PLUS; break;
case '*': tok = FTS5_STAR; break;
case '-': tok = FTS5_MINUS; break;
case '\0': tok = FTS5_EOF; break;
case '"': {
@@ -212,6 +213,7 @@ static void fts5ParseFree(void *p){ sqlite3_free(p); }
int sqlite3Fts5ExprNew(
Fts5Config *pConfig, /* FTS5 Configuration */
int iCol,
const char *zExpr, /* Expression text */
Fts5Expr **ppNew,
char **pzErr
@@ -236,6 +238,18 @@ int sqlite3Fts5ExprNew(
}while( sParse.rc==SQLITE_OK && t!=FTS5_EOF );
sqlite3Fts5ParserFree(pEngine, fts5ParseFree);
/* If the LHS of the MATCH expression was a user column, apply the
** implicit column-filter. */
if( iCol<pConfig->nCol && sParse.pExpr && sParse.rc==SQLITE_OK ){
int n = sizeof(Fts5Colset);
Fts5Colset *pColset = (Fts5Colset*)sqlite3Fts5MallocZero(&sParse.rc, n);
if( pColset ){
pColset->nCol = 1;
pColset->aiCol[0] = iCol;
sqlite3Fts5ParseSetColset(&sParse, sParse.pExpr, pColset);
}
}
assert( sParse.rc!=SQLITE_OK || sParse.zErr==0 );
if( sParse.rc==SQLITE_OK ){
*ppNew = pNew = sqlite3_malloc(sizeof(Fts5Expr));
@@ -258,6 +272,8 @@ int sqlite3Fts5ExprNew(
pNew->nPhrase = sParse.nPhrase;
sParse.apPhrase = 0;
}
}else{
sqlite3Fts5ParseNodeFree(sParse.pExpr);
}
sqlite3_free(sParse.apPhrase);
@@ -320,8 +336,6 @@ static i64 fts5ExprSynonymRowid(Fts5ExprTerm *pTerm, int bDesc, int *pbEof){
*/
static int fts5ExprSynonymList(
Fts5ExprTerm *pTerm,
int bCollist,
Fts5Colset *pColset,
i64 iRowid,
Fts5Buffer *pBuf, /* Use this buffer for space if required */
u8 **pa, int *pn
@@ -405,7 +419,6 @@ static int fts5ExprSynonymList(
*/
static int fts5ExprPhraseIsMatch(
Fts5ExprNode *pNode, /* Node pPhrase belongs to */
Fts5Colset *pColset, /* Restrict matches to these columns */
Fts5ExprPhrase *pPhrase, /* Phrase object to initialize */
int *pbMatch /* OUT: Set to true if really a match */
){
@@ -434,9 +447,7 @@ static int fts5ExprPhraseIsMatch(
u8 *a = 0;
if( pTerm->pSynonym ){
Fts5Buffer buf = {0, 0, 0};
rc = fts5ExprSynonymList(
pTerm, 0, pColset, pNode->iRowid, &buf, &a, &n
);
rc = fts5ExprSynonymList(pTerm, pNode->iRowid, &buf, &a, &n);
if( rc ){
sqlite3_free(a);
goto ismatch_out;
@@ -727,7 +738,7 @@ static int fts5ExprNearTest(
Fts5ExprPhrase *pPhrase = pNear->apPhrase[i];
if( pPhrase->nTerm>1 || pPhrase->aTerm[0].pSynonym || pNear->pColset ){
int bMatch = 0;
rc = fts5ExprPhraseIsMatch(pNode, pNear->pColset, pPhrase, &bMatch);
rc = fts5ExprPhraseIsMatch(pNode, pPhrase, &bMatch);
if( bMatch==0 ) break;
}else{
Fts5IndexIter *pIter = pPhrase->aTerm[0].pIter;
@@ -748,49 +759,61 @@ static int fts5ExprNearTest(
** Initialize all term iterators in the pNear object. If any term is found
** to match no documents at all, return immediately without initializing any
** further iterators.
**
** If an error occurs, return an SQLite error code. Otherwise, return
** SQLITE_OK. It is not considered an error if some term matches zero
** documents.
*/
static int fts5ExprNearInitAll(
Fts5Expr *pExpr,
Fts5ExprNode *pNode
){
Fts5ExprNearset *pNear = pNode->pNear;
int i, j;
int rc = SQLITE_OK;
int i;
assert( pNode->bNomatch==0 );
for(i=0; rc==SQLITE_OK && i<pNear->nPhrase; i++){
for(i=0; i<pNear->nPhrase; i++){
Fts5ExprPhrase *pPhrase = pNear->apPhrase[i];
for(j=0; j<pPhrase->nTerm; j++){
Fts5ExprTerm *pTerm = &pPhrase->aTerm[j];
Fts5ExprTerm *p;
int bEof = 1;
if( pPhrase->nTerm==0 ){
pNode->bEof = 1;
return SQLITE_OK;
}else{
int j;
for(j=0; j<pPhrase->nTerm; j++){
Fts5ExprTerm *pTerm = &pPhrase->aTerm[j];
Fts5ExprTerm *p;
int bHit = 0;
for(p=pTerm; p && rc==SQLITE_OK; p=p->pSynonym){
if( p->pIter ){
sqlite3Fts5IterClose(p->pIter);
p->pIter = 0;
for(p=pTerm; p; p=p->pSynonym){
int rc;
if( p->pIter ){
sqlite3Fts5IterClose(p->pIter);
p->pIter = 0;
}
rc = sqlite3Fts5IndexQuery(
pExpr->pIndex, p->zTerm, (int)strlen(p->zTerm),
(pTerm->bPrefix ? FTS5INDEX_QUERY_PREFIX : 0) |
(pExpr->bDesc ? FTS5INDEX_QUERY_DESC : 0),
pNear->pColset,
&p->pIter
);
assert( (rc==SQLITE_OK)==(p->pIter!=0) );
if( rc!=SQLITE_OK ) return rc;
if( 0==sqlite3Fts5IterEof(p->pIter) ){
bHit = 1;
}
}
rc = sqlite3Fts5IndexQuery(
pExpr->pIndex, p->zTerm, (int)strlen(p->zTerm),
(pTerm->bPrefix ? FTS5INDEX_QUERY_PREFIX : 0) |
(pExpr->bDesc ? FTS5INDEX_QUERY_DESC : 0),
pNear->pColset,
&p->pIter
);
assert( rc==SQLITE_OK || p->pIter==0 );
if( p->pIter && 0==sqlite3Fts5IterEof(p->pIter) ){
bEof = 0;
}
}
if( bEof ){
pNode->bEof = 1;
return rc;
if( bHit==0 ){
pNode->bEof = 1;
return SQLITE_OK;
}
}
}
}
return rc;
pNode->bEof = 0;
return SQLITE_OK;
}
/*
@@ -923,7 +946,7 @@ static int fts5ExprNodeTest_STRING(
}
}else{
Fts5IndexIter *pIter = pPhrase->aTerm[j].pIter;
if( pIter->iRowid==iLast ) continue;
if( pIter->iRowid==iLast || pIter->bEof ) continue;
bMatch = 0;
if( fts5ExprAdvanceto(pIter, bDesc, &iLast, &rc, &pNode->bEof) ){
return rc;
@@ -1100,7 +1123,10 @@ static int fts5ExprNodeNext_OR(
|| (bFromValid && fts5RowidCmp(pExpr, p1->iRowid, iFrom)<0)
){
int rc = fts5ExprNodeNext(pExpr, p1, bFromValid, iFrom);
if( rc!=SQLITE_OK ) return rc;
if( rc!=SQLITE_OK ){
pNode->bNomatch = 0;
return rc;
}
}
}
}
@@ -1131,7 +1157,10 @@ static int fts5ExprNodeTest_AND(
if( cmp>0 ){
/* Advance pChild until it points to iLast or laster */
rc = fts5ExprNodeNext(pExpr, pChild, 1, iLast);
if( rc!=SQLITE_OK ) return rc;
if( rc!=SQLITE_OK ){
pAnd->bNomatch = 0;
return rc;
}
}
/* If the child node is now at EOF, so is the parent AND node. Otherwise,
@@ -1170,6 +1199,8 @@ static int fts5ExprNodeNext_AND(
int rc = fts5ExprNodeNext(pExpr, pNode->apChild[0], bFromValid, iFrom);
if( rc==SQLITE_OK ){
rc = fts5ExprNodeTest_AND(pExpr, pNode);
}else{
pNode->bNomatch = 0;
}
return rc;
}
@@ -1212,6 +1243,9 @@ static int fts5ExprNodeNext_NOT(
if( rc==SQLITE_OK ){
rc = fts5ExprNodeTest_NOT(pExpr, pNode);
}
if( rc!=SQLITE_OK ){
pNode->bNomatch = 0;
}
return rc;
}
@@ -1273,6 +1307,8 @@ static int fts5ExprNodeFirst(Fts5Expr *pExpr, Fts5ExprNode *pNode){
if( Fts5NodeIsString(pNode) ){
/* Initialize all term iterators in the NEAR object. */
rc = fts5ExprNearInitAll(pExpr, pNode);
}else if( pNode->xNext==0 ){
pNode->bEof = 1;
}else{
int i;
int nEof = 0;
@@ -1324,23 +1360,25 @@ static int fts5ExprNodeFirst(Fts5Expr *pExpr, Fts5ExprNode *pNode){
*/
int sqlite3Fts5ExprFirst(Fts5Expr *p, Fts5Index *pIdx, i64 iFirst, int bDesc){
Fts5ExprNode *pRoot = p->pRoot;
int rc = SQLITE_OK;
if( pRoot->xNext ){
p->pIndex = pIdx;
p->bDesc = bDesc;
rc = fts5ExprNodeFirst(p, pRoot);
int rc; /* Return code */
/* If not at EOF but the current rowid occurs earlier than iFirst in
** the iteration order, move to document iFirst or later. */
if( pRoot->bEof==0 && fts5RowidCmp(p, pRoot->iRowid, iFirst)<0 ){
rc = fts5ExprNodeNext(p, pRoot, 1, iFirst);
}
p->pIndex = pIdx;
p->bDesc = bDesc;
rc = fts5ExprNodeFirst(p, pRoot);
/* If the iterator is not at a real match, skip forward until it is. */
while( pRoot->bNomatch ){
assert( pRoot->bEof==0 && rc==SQLITE_OK );
rc = fts5ExprNodeNext(p, pRoot, 0, 0);
}
/* If not at EOF but the current rowid occurs earlier than iFirst in
** the iteration order, move to document iFirst or later. */
if( rc==SQLITE_OK
&& 0==pRoot->bEof
&& fts5RowidCmp(p, pRoot->iRowid, iFirst)<0
){
rc = fts5ExprNodeNext(p, pRoot, 1, iFirst);
}
/* If the iterator is not at a real match, skip forward until it is. */
while( pRoot->bNomatch ){
assert( pRoot->bEof==0 && rc==SQLITE_OK );
rc = fts5ExprNodeNext(p, pRoot, 0, 0);
}
return rc;
}
@@ -1449,6 +1487,21 @@ Fts5ExprNearset *sqlite3Fts5ParseNearset(
sqlite3Fts5ParseNearsetFree(pNear);
sqlite3Fts5ParsePhraseFree(pPhrase);
}else{
if( pRet->nPhrase>0 ){
Fts5ExprPhrase *pLast = pRet->apPhrase[pRet->nPhrase-1];
assert( pLast==pParse->apPhrase[pParse->nPhrase-2] );
if( pPhrase->nTerm==0 ){
fts5ExprPhraseFree(pPhrase);
pRet->nPhrase--;
pParse->nPhrase--;
pPhrase = pLast;
}else if( pLast->nTerm==0 ){
fts5ExprPhraseFree(pLast);
pParse->apPhrase[pParse->nPhrase-2] = pPhrase;
pParse->nPhrase--;
pRet->nPhrase--;
}
}
pRet->apPhrase[pRet->nPhrase++] = pPhrase;
}
return pRet;
@@ -1476,11 +1529,13 @@ static int fts5ParseTokenize(
TokenCtx *pCtx = (TokenCtx*)pContext;
Fts5ExprPhrase *pPhrase = pCtx->pPhrase;
UNUSED_PARAM2(iUnused1, iUnused2);
/* If an error has already occurred, this is a no-op */
if( pCtx->rc!=SQLITE_OK ) return pCtx->rc;
if( nToken>FTS5_MAX_TOKEN_SIZE ) nToken = FTS5_MAX_TOKEN_SIZE;
assert( pPhrase==0 || pPhrase->nTerm>0 );
if( pPhrase && (tflags & FTS5_TOKEN_COLOCATED) ){
if( pPhrase && pPhrase->nTerm>0 && (tflags & FTS5_TOKEN_COLOCATED) ){
Fts5ExprTerm *pSyn;
int nByte = sizeof(Fts5ExprTerm) + sizeof(Fts5Buffer) + nToken+1;
pSyn = (Fts5ExprTerm*)sqlite3_malloc(nByte);
@@ -1570,7 +1625,7 @@ Fts5ExprPhrase *sqlite3Fts5ParseTerm(
rc = fts5ParseStringFromToken(pToken, &z);
if( rc==SQLITE_OK ){
int flags = FTS5_TOKENIZE_QUERY | (bPrefix ? FTS5_TOKENIZE_QUERY : 0);
int flags = FTS5_TOKENIZE_QUERY | (bPrefix ? FTS5_TOKENIZE_PREFIX : 0);
int n;
sqlite3Fts5Dequote(z);
n = (int)strlen(z);
@@ -1581,7 +1636,7 @@ Fts5ExprPhrase *sqlite3Fts5ParseTerm(
pParse->rc = rc;
fts5ExprPhraseFree(sCtx.pPhrase);
sCtx.pPhrase = 0;
}else if( sCtx.pPhrase ){
}else{
if( pAppend==0 ){
if( (pParse->nPhrase % 8)==0 ){
@@ -1598,9 +1653,14 @@ Fts5ExprPhrase *sqlite3Fts5ParseTerm(
pParse->nPhrase++;
}
if( sCtx.pPhrase==0 ){
/* This happens when parsing a token or quoted phrase that contains
** no token characters at all. (e.g ... MATCH '""'). */
sCtx.pPhrase = sqlite3Fts5MallocZero(&pParse->rc, sizeof(Fts5ExprPhrase));
}else if( sCtx.pPhrase->nTerm ){
sCtx.pPhrase->aTerm[sCtx.pPhrase->nTerm-1].bPrefix = bPrefix;
}
pParse->apPhrase[pParse->nPhrase-1] = sCtx.pPhrase;
assert( sCtx.pPhrase->nTerm>0 );
sCtx.pPhrase->aTerm[sCtx.pPhrase->nTerm-1].bPrefix = bPrefix;
}
return sCtx.pPhrase;
@@ -1611,22 +1671,16 @@ Fts5ExprPhrase *sqlite3Fts5ParseTerm(
** expression passed as the second argument.
*/
int sqlite3Fts5ExprClonePhrase(
Fts5Config *pConfig,
Fts5Expr *pExpr,
int iPhrase,
Fts5Expr **ppNew
){
int rc = SQLITE_OK; /* Return code */
Fts5ExprPhrase *pOrig; /* The phrase extracted from pExpr */
int i; /* Used to iterate through phrase terms */
Fts5Expr *pNew = 0; /* Expression to return via *ppNew */
TokenCtx sCtx = {0,0}; /* Context object for fts5ParseTokenize */
pOrig = pExpr->apExprPhrase[iPhrase];
pNew = (Fts5Expr*)sqlite3Fts5MallocZero(&rc, sizeof(Fts5Expr));
if( rc==SQLITE_OK ){
pNew->apExprPhrase = (Fts5ExprPhrase**)sqlite3Fts5MallocZero(&rc,
@@ -1640,19 +1694,37 @@ int sqlite3Fts5ExprClonePhrase(
pNew->pRoot->pNear = (Fts5ExprNearset*)sqlite3Fts5MallocZero(&rc,
sizeof(Fts5ExprNearset) + sizeof(Fts5ExprPhrase*));
}
if( rc==SQLITE_OK ){
Fts5Colset *pColsetOrig = pOrig->pNode->pNear->pColset;
if( pColsetOrig ){
int nByte = sizeof(Fts5Colset) + (pColsetOrig->nCol-1) * sizeof(int);
Fts5Colset *pColset = (Fts5Colset*)sqlite3Fts5MallocZero(&rc, nByte);
if( pColset ){
memcpy(pColset, pColsetOrig, nByte);
}
pNew->pRoot->pNear->pColset = pColset;
}
}
for(i=0; rc==SQLITE_OK && i<pOrig->nTerm; i++){
int tflags = 0;
Fts5ExprTerm *p;
for(p=&pOrig->aTerm[i]; p && rc==SQLITE_OK; p=p->pSynonym){
const char *zTerm = p->zTerm;
rc = fts5ParseTokenize((void*)&sCtx, tflags, zTerm, (int)strlen(zTerm),
0, 0);
tflags = FTS5_TOKEN_COLOCATED;
}
if( rc==SQLITE_OK ){
sCtx.pPhrase->aTerm[i].bPrefix = pOrig->aTerm[i].bPrefix;
if( pOrig->nTerm ){
int i; /* Used to iterate through phrase terms */
for(i=0; rc==SQLITE_OK && i<pOrig->nTerm; i++){
int tflags = 0;
Fts5ExprTerm *p;
for(p=&pOrig->aTerm[i]; p && rc==SQLITE_OK; p=p->pSynonym){
const char *zTerm = p->zTerm;
rc = fts5ParseTokenize((void*)&sCtx, tflags, zTerm, (int)strlen(zTerm),
0, 0);
tflags = FTS5_TOKEN_COLOCATED;
}
if( rc==SQLITE_OK ){
sCtx.pPhrase->aTerm[i].bPrefix = pOrig->aTerm[i].bPrefix;
}
}
}else{
/* This happens when parsing a token or quoted phrase that contains
** no token characters at all. (e.g ... MATCH '""'). */
sCtx.pPhrase = sqlite3Fts5MallocZero(&rc, sizeof(Fts5ExprPhrase));
}
if( rc==SQLITE_OK ){
@@ -1701,23 +1773,25 @@ void sqlite3Fts5ParseSetDistance(
Fts5ExprNearset *pNear,
Fts5Token *p
){
int nNear = 0;
int i;
if( p->n ){
for(i=0; i<p->n; i++){
char c = (char)p->p[i];
if( c<'0' || c>'9' ){
sqlite3Fts5ParseError(
pParse, "expected integer, got \"%.*s\"", p->n, p->p
);
return;
if( pNear ){
int nNear = 0;
int i;
if( p->n ){
for(i=0; i<p->n; i++){
char c = (char)p->p[i];
if( c<'0' || c>'9' ){
sqlite3Fts5ParseError(
pParse, "expected integer, got \"%.*s\"", p->n, p->p
);
return;
}
nNear = nNear * 10 + (p->p[i] - '0');
}
nNear = nNear * 10 + (p->p[i] - '0');
}else{
nNear = FTS5_DEFAULT_NEARDIST;
}
}else{
nNear = FTS5_DEFAULT_NEARDIST;
pNear->nNear = nNear;
}
pNear->nNear = nNear;
}
/*
@@ -1765,6 +1839,34 @@ static Fts5Colset *fts5ParseColset(
return pNew;
}
/*
** Allocate and return an Fts5Colset object specifying the inverse of
** the colset passed as the second argument. Free the colset passed
** as the second argument before returning.
*/
Fts5Colset *sqlite3Fts5ParseColsetInvert(Fts5Parse *pParse, Fts5Colset *p){
Fts5Colset *pRet;
int nCol = pParse->pConfig->nCol;
pRet = (Fts5Colset*)sqlite3Fts5MallocZero(&pParse->rc,
sizeof(Fts5Colset) + sizeof(int)*nCol
);
if( pRet ){
int i;
int iOld = 0;
for(i=0; i<nCol; i++){
if( iOld>=p->nCol || p->aiCol[iOld]!=i ){
pRet->aiCol[pRet->nCol++] = i;
}else{
iOld++;
}
}
}
sqlite3_free(p);
return pRet;
}
Fts5Colset *sqlite3Fts5ParseColset(
Fts5Parse *pParse, /* Store SQLITE_NOMEM here if required */
Fts5Colset *pColset, /* Existing colset object */
@@ -1797,25 +1899,110 @@ Fts5Colset *sqlite3Fts5ParseColset(
return pRet;
}
/*
** If argument pOrig is NULL, or if (*pRc) is set to anything other than
** SQLITE_OK when this function is called, NULL is returned.
**
** Otherwise, a copy of (*pOrig) is made into memory obtained from
** sqlite3Fts5MallocZero() and a pointer to it returned. If the allocation
** fails, (*pRc) is set to SQLITE_NOMEM and NULL is returned.
*/
static Fts5Colset *fts5CloneColset(int *pRc, Fts5Colset *pOrig){
Fts5Colset *pRet;
if( pOrig ){
int nByte = sizeof(Fts5Colset) + (pOrig->nCol-1) * sizeof(int);
pRet = (Fts5Colset*)sqlite3Fts5MallocZero(pRc, nByte);
if( pRet ){
memcpy(pRet, pOrig, nByte);
}
}else{
pRet = 0;
}
return pRet;
}
/*
** Remove from colset pColset any columns that are not also in colset pMerge.
*/
static void fts5MergeColset(Fts5Colset *pColset, Fts5Colset *pMerge){
int iIn = 0; /* Next input in pColset */
int iMerge = 0; /* Next input in pMerge */
int iOut = 0; /* Next output slot in pColset */
while( iIn<pColset->nCol && iMerge<pMerge->nCol ){
int iDiff = pColset->aiCol[iIn] - pMerge->aiCol[iMerge];
if( iDiff==0 ){
pColset->aiCol[iOut++] = pMerge->aiCol[iMerge];
iMerge++;
iIn++;
}else if( iDiff>0 ){
iMerge++;
}else{
iIn++;
}
}
pColset->nCol = iOut;
}
/*
** Recursively apply colset pColset to expression node pNode and all of
** its decendents. If (*ppFree) is not NULL, it contains a spare copy
** of pColset. This function may use the spare copy and set (*ppFree) to
** zero, or it may create copies of pColset using fts5CloneColset().
*/
static void fts5ParseSetColset(
Fts5Parse *pParse,
Fts5ExprNode *pNode,
Fts5Colset *pColset,
Fts5Colset **ppFree
){
if( pParse->rc==SQLITE_OK ){
assert( pNode->eType==FTS5_TERM || pNode->eType==FTS5_STRING
|| pNode->eType==FTS5_AND || pNode->eType==FTS5_OR
|| pNode->eType==FTS5_NOT || pNode->eType==FTS5_EOF
);
if( pNode->eType==FTS5_STRING || pNode->eType==FTS5_TERM ){
Fts5ExprNearset *pNear = pNode->pNear;
if( pNear->pColset ){
fts5MergeColset(pNear->pColset, pColset);
if( pNear->pColset->nCol==0 ){
pNode->eType = FTS5_EOF;
pNode->xNext = 0;
}
}else if( *ppFree ){
pNear->pColset = pColset;
*ppFree = 0;
}else{
pNear->pColset = fts5CloneColset(&pParse->rc, pColset);
}
}else{
int i;
assert( pNode->eType!=FTS5_EOF || pNode->nChild==0 );
for(i=0; i<pNode->nChild; i++){
fts5ParseSetColset(pParse, pNode->apChild[i], pColset, ppFree);
}
}
}
}
/*
** Apply colset pColset to expression node pExpr and all of its descendents.
*/
void sqlite3Fts5ParseSetColset(
Fts5Parse *pParse,
Fts5ExprNearset *pNear,
Fts5ExprNode *pExpr,
Fts5Colset *pColset
){
Fts5Colset *pFree = pColset;
if( pParse->pConfig->eDetail==FTS5_DETAIL_NONE ){
pParse->rc = SQLITE_ERROR;
pParse->zErr = sqlite3_mprintf(
"fts5: column queries are not supported (detail=none)"
);
sqlite3_free(pColset);
return;
}
if( pNear ){
pNear->pColset = pColset;
}else{
sqlite3_free(pColset);
fts5ParseSetColset(pParse, pExpr, pColset, &pFree);
}
sqlite3_free(pFree);
}
static void fts5ExprAssignXNext(Fts5ExprNode *pNode){
@@ -1904,10 +2091,14 @@ Fts5ExprNode *sqlite3Fts5ParseNode(
int iPhrase;
for(iPhrase=0; iPhrase<pNear->nPhrase; iPhrase++){
pNear->apPhrase[iPhrase]->pNode = pRet;
if( pNear->apPhrase[iPhrase]->nTerm==0 ){
pRet->xNext = 0;
pRet->eType = FTS5_EOF;
}
}
if( pParse->pConfig->eDetail!=FTS5_DETAIL_FULL
&& (pNear->nPhrase!=1 || pNear->apPhrase[0]->nTerm!=1)
&& (pNear->nPhrase!=1 || pNear->apPhrase[0]->nTerm>1)
){
assert( pParse->rc==SQLITE_OK );
pParse->rc = SQLITE_ERROR;
@@ -1936,6 +2127,70 @@ Fts5ExprNode *sqlite3Fts5ParseNode(
return pRet;
}
Fts5ExprNode *sqlite3Fts5ParseImplicitAnd(
Fts5Parse *pParse, /* Parse context */
Fts5ExprNode *pLeft, /* Left hand child expression */
Fts5ExprNode *pRight /* Right hand child expression */
){
Fts5ExprNode *pRet = 0;
Fts5ExprNode *pPrev;
if( pParse->rc ){
sqlite3Fts5ParseNodeFree(pLeft);
sqlite3Fts5ParseNodeFree(pRight);
}else{
assert( pLeft->eType==FTS5_STRING
|| pLeft->eType==FTS5_TERM
|| pLeft->eType==FTS5_EOF
|| pLeft->eType==FTS5_AND
);
assert( pRight->eType==FTS5_STRING
|| pRight->eType==FTS5_TERM
|| pRight->eType==FTS5_EOF
);
if( pLeft->eType==FTS5_AND ){
pPrev = pLeft->apChild[pLeft->nChild-1];
}else{
pPrev = pLeft;
}
assert( pPrev->eType==FTS5_STRING
|| pPrev->eType==FTS5_TERM
|| pPrev->eType==FTS5_EOF
);
if( pRight->eType==FTS5_EOF ){
assert( pParse->apPhrase[pParse->nPhrase-1]==pRight->pNear->apPhrase[0] );
sqlite3Fts5ParseNodeFree(pRight);
pRet = pLeft;
pParse->nPhrase--;
}
else if( pPrev->eType==FTS5_EOF ){
Fts5ExprPhrase **ap;
if( pPrev==pLeft ){
pRet = pRight;
}else{
pLeft->apChild[pLeft->nChild-1] = pRight;
pRet = pLeft;
}
ap = &pParse->apPhrase[pParse->nPhrase-1-pRight->pNear->nPhrase];
assert( ap[0]==pPrev->pNear->apPhrase[0] );
memmove(ap, &ap[1], sizeof(Fts5ExprPhrase*)*pRight->pNear->nPhrase);
pParse->nPhrase--;
sqlite3Fts5ParseNodeFree(pPrev);
}
else{
pRet = sqlite3Fts5ParseNode(pParse, FTS5_AND, pLeft, pRight, 0);
}
}
return pRet;
}
static char *fts5ExprTermPrint(Fts5ExprTerm *pTerm){
int nByte = 0;
Fts5ExprTerm *p;
@@ -2070,6 +2325,9 @@ static char *fts5ExprPrintTcl(
static char *fts5ExprPrint(Fts5Config *pConfig, Fts5ExprNode *pExpr){
char *zRet = 0;
if( pExpr->eType==0 ){
return sqlite3_mprintf("\"\"");
}else
if( pExpr->eType==FTS5_STRING || pExpr->eType==FTS5_TERM ){
Fts5ExprNearset *pNear = pExpr->pNear;
int i;
@@ -2130,7 +2388,7 @@ static char *fts5ExprPrint(Fts5Config *pConfig, Fts5ExprNode *pExpr){
zRet = 0;
}else{
int e = pExpr->apChild[i]->eType;
int b = (e!=FTS5_STRING && e!=FTS5_TERM);
int b = (e!=FTS5_STRING && e!=FTS5_TERM && e!=FTS5_EOF);
zRet = fts5PrintfAppend(zRet, "%s%s%z%s",
(i==0 ? "" : zOp),
(b?"(":""), z, (b?")":"")
@@ -2198,7 +2456,7 @@ static void fts5ExprFunction(
rc = sqlite3Fts5ConfigParse(pGlobal, db, nConfig, azConfig, &pConfig, &zErr);
if( rc==SQLITE_OK ){
rc = sqlite3Fts5ExprNew(pConfig, zExpr, &pExpr, &zErr);
rc = sqlite3Fts5ExprNew(pConfig, pConfig->nCol, zExpr, &pExpr, &zErr);
}
if( rc==SQLITE_OK ){
char *zText;
@@ -2399,19 +2657,22 @@ static int fts5ExprPopulatePoslistsCb(
int tflags, /* Mask of FTS5_TOKEN_* flags */
const char *pToken, /* Pointer to buffer containing token */
int nToken, /* Size of token in bytes */
int iStart, /* Byte offset of token within input text */
int iEnd /* Byte offset of end of token within input text */
int iUnused1, /* Byte offset of token within input text */
int iUnused2 /* Byte offset of end of token within input text */
){
Fts5ExprCtx *p = (Fts5ExprCtx*)pCtx;
Fts5Expr *pExpr = p->pExpr;
int i;
UNUSED_PARAM2(iUnused1, iUnused2);
if( nToken>FTS5_MAX_TOKEN_SIZE ) nToken = FTS5_MAX_TOKEN_SIZE;
if( (tflags & FTS5_TOKEN_COLOCATED)==0 ) p->iOff++;
for(i=0; i<pExpr->nPhrase; i++){
Fts5ExprTerm *pTerm;
if( p->aPopulator[i].bOk==0 ) continue;
for(pTerm=&pExpr->apExprPhrase[i]->aTerm[0]; pTerm; pTerm=pTerm->pSynonym){
int nTerm = strlen(pTerm->zTerm);
int nTerm = (int)strlen(pTerm->zTerm);
if( (nTerm==nToken || (nTerm<nToken && pTerm->bPrefix))
&& memcmp(pTerm->zTerm, pToken, nTerm)==0
){
@@ -2515,17 +2776,6 @@ void sqlite3Fts5ExprCheckPoslists(Fts5Expr *pExpr, i64 iRowid){
fts5ExprCheckPoslists(pExpr->pRoot, iRowid);
}
static void fts5ExprClearEof(Fts5ExprNode *pNode){
int i;
for(i=0; i<pNode->nChild; i++){
fts5ExprClearEof(pNode->apChild[i]);
}
pNode->bEof = 0;
}
void sqlite3Fts5ExprClearEof(Fts5Expr *pExpr){
fts5ExprClearEof(pExpr->pRoot);
}
/*
** This function is only called for detail=columns tables.
*/
@@ -2550,7 +2800,7 @@ int sqlite3Fts5ExprPhraseCollist(
if( pTerm->pSynonym ){
Fts5Buffer *pBuf = (Fts5Buffer*)&pTerm->pSynonym[1];
rc = fts5ExprSynonymList(
pTerm, 1, 0, pNode->iRowid, pBuf, (u8**)ppCollist, pnCollist
pTerm, pNode->iRowid, pBuf, (u8**)ppCollist, pnCollist
);
}else{
*ppCollist = pPhrase->aTerm[0].pIter->pData;
+44 -33
View File
@@ -36,9 +36,10 @@ struct Fts5Hash {
/*
** Each entry in the hash table is represented by an object of the
** following type. Each object, its key (zKey[]) and its current data
** are stored in a single memory allocation. The position list data
** immediately follows the key data in memory.
** following type. Each object, its key (a nul-terminated string) and
** its current data are stored in a single memory allocation. The
** key immediately follows the object in memory. The position list
** data immediately follows the key data in memory.
**
** The data that follows the key is in a similar, but not identical format
** to the doclist data stored in the database. It is:
@@ -62,20 +63,20 @@ struct Fts5HashEntry {
int nAlloc; /* Total size of allocation */
int iSzPoslist; /* Offset of space for 4-byte poslist size */
int nData; /* Total bytes of data (incl. structure) */
int nKey; /* Length of key in bytes */
u8 bDel; /* Set delete-flag @ iSzPoslist */
u8 bContent; /* Set content-flag (detail=none mode) */
int iCol; /* Column of last value written */
i16 iCol; /* Column of last value written */
int iPos; /* Position of last value written */
i64 iRowid; /* Rowid of last value written */
char zKey[8]; /* Nul-terminated entry key */
};
/*
** Size of Fts5HashEntry without the zKey[] array.
** Eqivalent to:
**
** char *fts5EntryKey(Fts5HashEntry *pEntry){ return zKey; }
*/
#define FTS5_HASHENTRYSIZE (sizeof(Fts5HashEntry)-8)
#define fts5EntryKey(p) ( ((char *)(&(p)[1])) )
/*
@@ -170,10 +171,11 @@ static int fts5HashResize(Fts5Hash *pHash){
for(i=0; i<pHash->nSlot; i++){
while( apOld[i] ){
int iHash;
unsigned int iHash;
Fts5HashEntry *p = apOld[i];
apOld[i] = p->pHashNext;
iHash = fts5HashKey(nNew, (u8*)p->zKey, (int)strlen(p->zKey));
iHash = fts5HashKey(nNew, (u8*)fts5EntryKey(p),
(int)strlen(fts5EntryKey(p)));
p->pHashNext = apNew[iHash];
apNew[iHash] = p;
}
@@ -244,9 +246,10 @@ int sqlite3Fts5HashWrite(
/* Attempt to locate an existing hash entry */
iHash = fts5HashKey2(pHash->nSlot, (u8)bByte, (const u8*)pToken, nToken);
for(p=pHash->aSlot[iHash]; p; p=p->pHashNext){
if( p->zKey[0]==bByte
&& memcmp(&p->zKey[1], pToken, nToken)==0
&& p->zKey[nToken+1]==0
char *zKey = fts5EntryKey(p);
if( zKey[0]==bByte
&& p->nKey==nToken
&& memcmp(&zKey[1], pToken, nToken)==0
){
break;
}
@@ -255,7 +258,8 @@ int sqlite3Fts5HashWrite(
/* If an existing hash entry cannot be found, create a new one. */
if( p==0 ){
/* Figure out how much space to allocate */
int nByte = FTS5_HASHENTRYSIZE + (nToken+1) + 1 + 64;
char *zKey;
int nByte = sizeof(Fts5HashEntry) + (nToken+1) + 1 + 64;
if( nByte<128 ) nByte = 128;
/* Grow the Fts5Hash.aSlot[] array if necessary. */
@@ -268,13 +272,15 @@ int sqlite3Fts5HashWrite(
/* Allocate new Fts5HashEntry and add it to the hash table. */
p = (Fts5HashEntry*)sqlite3_malloc(nByte);
if( !p ) return SQLITE_NOMEM;
memset(p, 0, FTS5_HASHENTRYSIZE);
memset(p, 0, sizeof(Fts5HashEntry));
p->nAlloc = nByte;
p->zKey[0] = bByte;
memcpy(&p->zKey[1], pToken, nToken);
assert( iHash==fts5HashKey(pHash->nSlot, (u8*)p->zKey, nToken+1) );
p->zKey[nToken+1] = '\0';
p->nData = nToken+1 + 1 + FTS5_HASHENTRYSIZE;
zKey = fts5EntryKey(p);
zKey[0] = bByte;
memcpy(&zKey[1], pToken, nToken);
assert( iHash==fts5HashKey(pHash->nSlot, (u8*)zKey, nToken+1) );
p->nKey = nToken;
zKey[nToken+1] = '\0';
p->nData = nToken+1 + 1 + sizeof(Fts5HashEntry);
p->pHashNext = pHash->aSlot[iHash];
pHash->aSlot[iHash] = p;
pHash->nEntry++;
@@ -344,11 +350,11 @@ int sqlite3Fts5HashWrite(
if( pHash->eDetail==FTS5_DETAIL_FULL ){
pPtr[p->nData++] = 0x01;
p->nData += sqlite3Fts5PutVarint(&pPtr[p->nData], iCol);
p->iCol = iCol;
p->iCol = (i16)iCol;
p->iPos = 0;
}else{
bNew = 1;
p->iCol = iPos = iCol;
p->iCol = (i16)(iPos = iCol);
}
}
@@ -392,9 +398,11 @@ static Fts5HashEntry *fts5HashEntryMerge(
p1 = 0;
}else{
int i = 0;
while( p1->zKey[i]==p2->zKey[i] ) i++;
char *zKey1 = fts5EntryKey(p1);
char *zKey2 = fts5EntryKey(p2);
while( zKey1[i]==zKey2[i] ) i++;
if( ((u8)p1->zKey[i])>((u8)p2->zKey[i]) ){
if( ((u8)zKey1[i])>((u8)zKey2[i]) ){
/* p2 is smaller */
*ppOut = p2;
ppOut = &p2->pScanNext;
@@ -437,7 +445,7 @@ static int fts5HashEntrySort(
for(iSlot=0; iSlot<pHash->nSlot; iSlot++){
Fts5HashEntry *pIter;
for(pIter=pHash->aSlot[iSlot]; pIter; pIter=pIter->pHashNext){
if( pTerm==0 || 0==memcmp(pIter->zKey, pTerm, nTerm) ){
if( pTerm==0 || 0==memcmp(fts5EntryKey(pIter), pTerm, nTerm) ){
Fts5HashEntry *pEntry = pIter;
pEntry->pScanNext = 0;
for(i=0; ap[i]; i++){
@@ -470,16 +478,18 @@ int sqlite3Fts5HashQuery(
int *pnDoclist /* OUT: Size of doclist in bytes */
){
unsigned int iHash = fts5HashKey(pHash->nSlot, (const u8*)pTerm, nTerm);
char *zKey = 0;
Fts5HashEntry *p;
for(p=pHash->aSlot[iHash]; p; p=p->pHashNext){
if( memcmp(p->zKey, pTerm, nTerm)==0 && p->zKey[nTerm]==0 ) break;
zKey = fts5EntryKey(p);
if( memcmp(zKey, pTerm, nTerm)==0 && zKey[nTerm]==0 ) break;
}
if( p ){
fts5HashAddPoslistSize(pHash, p);
*ppDoclist = (const u8*)&p->zKey[nTerm+1];
*pnDoclist = p->nData - (FTS5_HASHENTRYSIZE + nTerm + 1);
*ppDoclist = (const u8*)&zKey[nTerm+1];
*pnDoclist = p->nData - (sizeof(Fts5HashEntry) + nTerm + 1);
}else{
*ppDoclist = 0;
*pnDoclist = 0;
@@ -512,11 +522,12 @@ void sqlite3Fts5HashScanEntry(
){
Fts5HashEntry *p;
if( (p = pHash->pScan) ){
int nTerm = (int)strlen(p->zKey);
char *zKey = fts5EntryKey(p);
int nTerm = (int)strlen(zKey);
fts5HashAddPoslistSize(pHash, p);
*pzTerm = p->zKey;
*ppDoclist = (const u8*)&p->zKey[nTerm+1];
*pnDoclist = p->nData - (FTS5_HASHENTRYSIZE + nTerm + 1);
*pzTerm = zKey;
*ppDoclist = (const u8*)&zKey[nTerm+1];
*pnDoclist = p->nData - (sizeof(Fts5HashEntry) + nTerm + 1);
}else{
*pzTerm = 0;
*ppDoclist = 0;
+374 -157
View File
File diff suppressed because it is too large Load Diff
+98 -49
View File
@@ -506,6 +506,7 @@ static void fts5SetUniqueFlag(sqlite3_index_info *pIdxInfo){
static int fts5BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){
Fts5Table *pTab = (Fts5Table*)pVTab;
Fts5Config *pConfig = pTab->pConfig;
const int nCol = pConfig->nCol;
int idxFlags = 0; /* Parameter passed through to xFilter() */
int bHasMatch;
int iNext;
@@ -531,24 +532,34 @@ static int fts5BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){
int aColMap[3];
aColMap[0] = -1;
aColMap[1] = pConfig->nCol;
aColMap[2] = pConfig->nCol+1;
aColMap[1] = nCol;
aColMap[2] = nCol+1;
/* Set idxFlags flags for all WHERE clause terms that will be used. */
for(i=0; i<pInfo->nConstraint; i++){
struct sqlite3_index_constraint *p = &pInfo->aConstraint[i];
int j;
for(j=0; j<ArraySize(aConstraint); j++){
struct Constraint *pC = &aConstraint[j];
if( p->iColumn==aColMap[pC->iCol] && p->op & pC->op ){
if( p->usable ){
int iCol = p->iColumn;
if( (p->op==SQLITE_INDEX_CONSTRAINT_MATCH && iCol>=0 && iCol<=nCol)
|| (p->op==SQLITE_INDEX_CONSTRAINT_EQ && iCol==nCol)
){
/* A MATCH operator or equivalent */
if( p->usable ){
idxFlags = (idxFlags & 0xFFFF) | FTS5_BI_MATCH | (iCol << 16);
aConstraint[0].iConsIndex = i;
}else{
/* As there exists an unusable MATCH constraint this is an
** unusable plan. Set a prohibitively high cost. */
pInfo->estimatedCost = 1e50;
return SQLITE_OK;
}
}else{
int j;
for(j=1; j<ArraySize(aConstraint); j++){
struct Constraint *pC = &aConstraint[j];
if( iCol==aColMap[pC->iCol] && p->op & pC->op && p->usable ){
pC->iConsIndex = i;
idxFlags |= pC->fts5op;
}else if( j==0 ){
/* As there exists an unusable MATCH constraint this is an
** unusable plan. Set a prohibitively high cost. */
pInfo->estimatedCost = 1e50;
return SQLITE_OK;
}
}
}
@@ -597,27 +608,38 @@ static int fts5BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){
return SQLITE_OK;
}
static int fts5NewTransaction(Fts5Table *pTab){
Fts5Cursor *pCsr;
for(pCsr=pTab->pGlobal->pCsr; pCsr; pCsr=pCsr->pNext){
if( pCsr->base.pVtab==(sqlite3_vtab*)pTab ) return SQLITE_OK;
}
return sqlite3Fts5StorageReset(pTab->pStorage);
}
/*
** Implementation of xOpen method.
*/
static int fts5OpenMethod(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCsr){
Fts5Table *pTab = (Fts5Table*)pVTab;
Fts5Config *pConfig = pTab->pConfig;
Fts5Cursor *pCsr; /* New cursor object */
Fts5Cursor *pCsr = 0; /* New cursor object */
int nByte; /* Bytes of space to allocate */
int rc = SQLITE_OK; /* Return code */
int rc; /* Return code */
nByte = sizeof(Fts5Cursor) + pConfig->nCol * sizeof(int);
pCsr = (Fts5Cursor*)sqlite3_malloc(nByte);
if( pCsr ){
Fts5Global *pGlobal = pTab->pGlobal;
memset(pCsr, 0, nByte);
pCsr->aColumnSize = (int*)&pCsr[1];
pCsr->pNext = pGlobal->pCsr;
pGlobal->pCsr = pCsr;
pCsr->iCsrId = ++pGlobal->iNextId;
}else{
rc = SQLITE_NOMEM;
rc = fts5NewTransaction(pTab);
if( rc==SQLITE_OK ){
nByte = sizeof(Fts5Cursor) + pConfig->nCol * sizeof(int);
pCsr = (Fts5Cursor*)sqlite3_malloc(nByte);
if( pCsr ){
Fts5Global *pGlobal = pTab->pGlobal;
memset(pCsr, 0, nByte);
pCsr->aColumnSize = (int*)&pCsr[1];
pCsr->pNext = pGlobal->pCsr;
pGlobal->pCsr = pCsr;
pCsr->iCsrId = ++pGlobal->iNextId;
}else{
rc = SQLITE_NOMEM;
}
}
*ppCsr = (sqlite3_vtab_cursor*)pCsr;
return rc;
@@ -861,7 +883,8 @@ static int fts5PrepareStatement(
if( zSql==0 ){
rc = SQLITE_NOMEM;
}else{
rc = sqlite3_prepare_v2(pConfig->db, zSql, -1, &pRet, 0);
rc = sqlite3_prepare_v3(pConfig->db, zSql, -1,
SQLITE_PREPARE_PERSISTENT, &pRet, 0);
if( rc!=SQLITE_OK ){
*pConfig->pzErrmsg = sqlite3_mprintf("%s", sqlite3_errmsg(pConfig->db));
}
@@ -997,7 +1020,8 @@ static int fts5FindRankFunction(Fts5Cursor *pCsr){
char *zSql = sqlite3Fts5Mprintf(&rc, "SELECT %s", zRankArgs);
if( zSql ){
sqlite3_stmt *pStmt = 0;
rc = sqlite3_prepare_v2(pConfig->db, zSql, -1, &pStmt, 0);
rc = sqlite3_prepare_v3(pConfig->db, zSql, -1,
SQLITE_PREPARE_PERSISTENT, &pStmt, 0);
sqlite3_free(zSql);
assert( rc==SQLITE_OK || pCsr->pRankArgStmt==0 );
if( rc==SQLITE_OK ){
@@ -1096,7 +1120,7 @@ static i64 fts5GetRowidLimit(sqlite3_value *pVal, i64 iDefault){
static int fts5FilterMethod(
sqlite3_vtab_cursor *pCursor, /* The cursor used for this query */
int idxNum, /* Strategy index */
const char *idxStr, /* Unused */
const char *zUnused, /* Unused */
int nVal, /* Number of elements in apVal */
sqlite3_value **apVal /* Arguments for the indexing scheme */
){
@@ -1112,8 +1136,12 @@ static int fts5FilterMethod(
sqlite3_value *pRowidEq = 0; /* rowid = ? expression (or NULL) */
sqlite3_value *pRowidLe = 0; /* rowid <= ? expression (or NULL) */
sqlite3_value *pRowidGe = 0; /* rowid >= ? expression (or NULL) */
int iCol; /* Column on LHS of MATCH operator */
char **pzErrmsg = pConfig->pzErrmsg;
UNUSED_PARAM(zUnused);
UNUSED_PARAM(nVal);
if( pCsr->ePlan ){
fts5FreeCursorComponents(pCsr);
memset(&pCsr->ePlan, 0, sizeof(Fts5Cursor) - ((u8*)&pCsr->ePlan-(u8*)pCsr));
@@ -1139,6 +1167,8 @@ static int fts5FilterMethod(
if( BitFlagTest(idxNum, FTS5_BI_ROWID_EQ) ) pRowidEq = apVal[iVal++];
if( BitFlagTest(idxNum, FTS5_BI_ROWID_LE) ) pRowidLe = apVal[iVal++];
if( BitFlagTest(idxNum, FTS5_BI_ROWID_GE) ) pRowidGe = apVal[iVal++];
iCol = (idxNum>>16);
assert( iCol>=0 && iCol<=pConfig->nCol );
assert( iVal==nVal );
bOrderByRank = ((idxNum & FTS5_BI_ORDER_RANK) ? 1 : 0);
pCsr->bDesc = bDesc = ((idxNum & FTS5_BI_ORDER_DESC) ? 1 : 0);
@@ -1172,7 +1202,6 @@ static int fts5FilterMethod(
pCsr->ePlan = FTS5_PLAN_SOURCE;
pCsr->pExpr = pTab->pSortCsr->pExpr;
rc = fts5CursorFirst(pTab, pCsr, bDesc);
sqlite3Fts5ExprClearEof(pCsr->pExpr);
}else if( pMatch ){
const char *zExpr = (const char*)sqlite3_value_text(apVal[0]);
if( zExpr==0 ) zExpr = "";
@@ -1186,7 +1215,7 @@ static int fts5FilterMethod(
rc = fts5SpecialMatch(pTab, pCsr, &zExpr[1]);
}else{
char **pzErr = &pTab->base.zErrMsg;
rc = sqlite3Fts5ExprNew(pConfig, zExpr, &pCsr->pExpr, pzErr);
rc = sqlite3Fts5ExprNew(pConfig, iCol, zExpr, &pCsr->pExpr, pzErr);
if( rc==SQLITE_OK ){
if( bOrderByRank ){
pCsr->ePlan = FTS5_PLAN_SORTED_MATCH;
@@ -1398,8 +1427,7 @@ static int fts5SpecialInsert(
static int fts5SpecialDelete(
Fts5Table *pTab,
sqlite3_value **apVal,
sqlite3_int64 *piRowid
sqlite3_value **apVal
){
int rc = SQLITE_OK;
int eType1 = sqlite3_value_type(apVal[1]);
@@ -1475,7 +1503,7 @@ static int fts5UpdateMethod(
if( pConfig->eContent!=FTS5_CONTENT_NORMAL
&& 0==sqlite3_stricmp("delete", z)
){
rc = fts5SpecialDelete(pTab, apVal, pRowid);
rc = fts5SpecialDelete(pTab, apVal);
}else{
rc = fts5SpecialInsert(pTab, z, apVal[2 + pConfig->nCol + 1]);
}
@@ -1509,13 +1537,13 @@ static int fts5UpdateMethod(
rc = SQLITE_ERROR;
}
/* Case 1: DELETE */
/* DELETE */
else if( nArg==1 ){
i64 iDel = sqlite3_value_int64(apVal[0]); /* Rowid to delete */
rc = sqlite3Fts5StorageDelete(pTab->pStorage, iDel, 0);
}
/* Case 2: INSERT */
/* INSERT */
else if( eType0!=SQLITE_INTEGER ){
/* If this is a REPLACE, first remove the current entry (if any) */
if( eConflict==SQLITE_REPLACE
@@ -1527,7 +1555,7 @@ static int fts5UpdateMethod(
fts5StorageInsert(&rc, pTab, apVal, pRowid);
}
/* Case 2: UPDATE */
/* UPDATE */
else{
i64 iOld = sqlite3_value_int64(apVal[0]); /* Old rowid */
i64 iNew = sqlite3_value_int64(apVal[1]); /* New rowid */
@@ -1567,7 +1595,7 @@ static int fts5SyncMethod(sqlite3_vtab *pVtab){
fts5CheckTransactionState(pTab, FTS5_SYNC, 0);
pTab->pConfig->pzErrmsg = &pTab->base.zErrMsg;
fts5TripCursors(pTab);
rc = sqlite3Fts5StorageSync(pTab->pStorage, 1);
rc = sqlite3Fts5StorageSync(pTab->pStorage);
pTab->pConfig->pzErrmsg = 0;
return rc;
}
@@ -1577,6 +1605,7 @@ static int fts5SyncMethod(sqlite3_vtab *pVtab){
*/
static int fts5BeginMethod(sqlite3_vtab *pVtab){
fts5CheckTransactionState((Fts5Table*)pVtab, FTS5_BEGIN, 0);
fts5NewTransaction((Fts5Table*)pVtab);
return SQLITE_OK;
}
@@ -1586,6 +1615,7 @@ static int fts5BeginMethod(sqlite3_vtab *pVtab){
** by fts5SyncMethod().
*/
static int fts5CommitMethod(sqlite3_vtab *pVtab){
UNUSED_PARAM(pVtab); /* Call below is a no-op for NDEBUG builds */
fts5CheckTransactionState((Fts5Table*)pVtab, FTS5_COMMIT, 0);
return SQLITE_OK;
}
@@ -1839,12 +1869,14 @@ static sqlite3_int64 fts5ApiRowid(Fts5Context *pCtx){
static int fts5ColumnSizeCb(
void *pContext, /* Pointer to int */
int tflags,
const char *pToken, /* Buffer containing token */
int nToken, /* Size of token in bytes */
int iStart, /* Start offset of token */
int iEnd /* End offset of token */
const char *pUnused, /* Buffer containing token */
int nUnused, /* Size of token in bytes */
int iUnused1, /* Start offset of token */
int iUnused2 /* End offset of token */
){
int *pCnt = (int*)pContext;
UNUSED_PARAM2(pUnused, nUnused);
UNUSED_PARAM2(iUnused1, iUnused2);
if( (tflags & FTS5_TOKEN_COLOCATED)==0 ){
(*pCnt)++;
}
@@ -1960,10 +1992,11 @@ static void *fts5ApiGetAuxdata(Fts5Context *pCtx, int bClear){
}
static void fts5ApiPhraseNext(
Fts5Context *pCtx,
Fts5Context *pUnused,
Fts5PhraseIter *pIter,
int *piCol, int *piOff
){
UNUSED_PARAM(pUnused);
if( pIter->a>=pIter->b ){
*piCol = -1;
*piOff = -1;
@@ -2115,12 +2148,11 @@ static int fts5ApiQueryPhrase(
rc = fts5OpenMethod(pCsr->base.pVtab, (sqlite3_vtab_cursor**)&pNew);
if( rc==SQLITE_OK ){
Fts5Config *pConf = pTab->pConfig;
pNew->ePlan = FTS5_PLAN_MATCH;
pNew->iFirstRowid = SMALLEST_INT64;
pNew->iLastRowid = LARGEST_INT64;
pNew->base.pVtab = (sqlite3_vtab*)pTab;
rc = sqlite3Fts5ExprClonePhrase(pConf, pCsr->pExpr, iPhrase, &pNew->pExpr);
rc = sqlite3Fts5ExprClonePhrase(pCsr->pExpr, iPhrase, &pNew->pExpr);
}
if( rc==SQLITE_OK ){
@@ -2333,7 +2365,7 @@ static int fts5ColumnMethod(
*/
static int fts5FindFunctionMethod(
sqlite3_vtab *pVtab, /* Virtual table handle */
int nArg, /* Number of SQL function arguments */
int nUnused, /* Number of SQL function arguments */
const char *zName, /* Name of SQL function */
void (**pxFunc)(sqlite3_context*,int,sqlite3_value**), /* OUT: Result */
void **ppArg /* OUT: User data for *pxFunc */
@@ -2341,6 +2373,7 @@ static int fts5FindFunctionMethod(
Fts5Table *pTab = (Fts5Table*)pVtab;
Fts5Auxiliary *pAux;
UNUSED_PARAM(nUnused);
pAux = fts5FindAuxiliary(pTab, zName);
if( pAux ){
*pxFunc = fts5ApiCallback;
@@ -2370,9 +2403,10 @@ static int fts5RenameMethod(
*/
static int fts5SavepointMethod(sqlite3_vtab *pVtab, int iSavepoint){
Fts5Table *pTab = (Fts5Table*)pVtab;
UNUSED_PARAM(iSavepoint); /* Call below is a no-op for NDEBUG builds */
fts5CheckTransactionState(pTab, FTS5_SAVEPOINT, iSavepoint);
fts5TripCursors(pTab);
return sqlite3Fts5StorageSync(pTab->pStorage, 0);
return sqlite3Fts5StorageSync(pTab->pStorage);
}
/*
@@ -2382,9 +2416,10 @@ static int fts5SavepointMethod(sqlite3_vtab *pVtab, int iSavepoint){
*/
static int fts5ReleaseMethod(sqlite3_vtab *pVtab, int iSavepoint){
Fts5Table *pTab = (Fts5Table*)pVtab;
UNUSED_PARAM(iSavepoint); /* Call below is a no-op for NDEBUG builds */
fts5CheckTransactionState(pTab, FTS5_RELEASE, iSavepoint);
fts5TripCursors(pTab);
return sqlite3Fts5StorageSync(pTab->pStorage, 0);
return sqlite3Fts5StorageSync(pTab->pStorage);
}
/*
@@ -2394,6 +2429,7 @@ static int fts5ReleaseMethod(sqlite3_vtab *pVtab, int iSavepoint){
*/
static int fts5RollbackToMethod(sqlite3_vtab *pVtab, int iSavepoint){
Fts5Table *pTab = (Fts5Table*)pVtab;
UNUSED_PARAM(iSavepoint); /* Call below is a no-op for NDEBUG builds */
fts5CheckTransactionState(pTab, FTS5_ROLLBACKTO, iSavepoint);
fts5TripCursors(pTab);
return sqlite3Fts5StorageRollback(pTab->pStorage);
@@ -2573,10 +2609,11 @@ static void fts5ModuleDestroy(void *pCtx){
static void fts5Fts5Func(
sqlite3_context *pCtx, /* Function call context */
int nArg, /* Number of args */
sqlite3_value **apVal /* Function arguments */
sqlite3_value **apUnused /* Function arguments */
){
Fts5Global *pGlobal = (Fts5Global*)sqlite3_user_data(pCtx);
char buf[8];
UNUSED_PARAM2(nArg, apUnused);
assert( nArg==0 );
assert( sizeof(buf)>=sizeof(pGlobal) );
memcpy(buf, (void*)&pGlobal, sizeof(pGlobal));
@@ -2589,9 +2626,10 @@ static void fts5Fts5Func(
static void fts5SourceIdFunc(
sqlite3_context *pCtx, /* Function call context */
int nArg, /* Number of args */
sqlite3_value **apVal /* Function arguments */
sqlite3_value **apUnused /* Function arguments */
){
assert( nArg==0 );
UNUSED_PARAM2(nArg, apUnused);
sqlite3_result_text(pCtx, "--FTS5-SOURCE-ID--", -1, SQLITE_TRANSIENT);
}
@@ -2653,6 +2691,17 @@ static int fts5Init(sqlite3 *db){
);
}
}
/* If SQLITE_FTS5_ENABLE_TEST_MI is defined, assume that the file
** fts5_test_mi.c is compiled and linked into the executable. And call
** its entry point to enable the matchinfo() demo. */
#ifdef SQLITE_FTS5_ENABLE_TEST_MI
if( rc==SQLITE_OK ){
extern int sqlite3Fts5TestRegisterMatchinfo(sqlite3*);
rc = sqlite3Fts5TestRegisterMatchinfo(db);
}
#endif
return rc;
}
+32 -24
View File
@@ -136,7 +136,8 @@ static int fts5StorageGetStmt(
if( zSql==0 ){
rc = SQLITE_NOMEM;
}else{
rc = sqlite3_prepare_v2(pC->db, zSql, -1, &p->aStmt[eStmt], 0);
rc = sqlite3_prepare_v3(pC->db, zSql, -1,
SQLITE_PREPARE_PERSISTENT, &p->aStmt[eStmt], 0);
sqlite3_free(zSql);
if( rc!=SQLITE_OK && pzErrMsg ){
*pzErrMsg = sqlite3_mprintf("%s", sqlite3_errmsg(pC->db));
@@ -145,6 +146,7 @@ static int fts5StorageGetStmt(
}
*ppStmt = p->aStmt[eStmt];
sqlite3_reset(*ppStmt);
return rc;
}
@@ -217,7 +219,7 @@ static void fts5StorageRenameOne(
int sqlite3Fts5StorageRename(Fts5Storage *pStorage, const char *zName){
Fts5Config *pConfig = pStorage->pConfig;
int rc = sqlite3Fts5StorageSync(pStorage, 1);
int rc = sqlite3Fts5StorageSync(pStorage);
fts5StorageRenameOne(pConfig, &rc, "data", zName);
fts5StorageRenameOne(pConfig, &rc, "idx", zName);
@@ -246,7 +248,11 @@ int sqlite3Fts5CreateTable(
char *zErr = 0;
rc = fts5ExecPrintf(pConfig->db, &zErr, "CREATE TABLE %Q.'%q_%q'(%s)%s",
pConfig->zDb, pConfig->zName, zPost, zDefn, bWithout?" WITHOUT ROWID":""
pConfig->zDb, pConfig->zName, zPost, zDefn,
#ifndef SQLITE_FTS5_NO_WITHOUT_ROWID
bWithout?" WITHOUT ROWID":
#endif
""
);
if( zErr ){
*pzErr = sqlite3_mprintf(
@@ -362,11 +368,13 @@ static int fts5StorageInsertCallback(
int tflags,
const char *pToken, /* Buffer containing token */
int nToken, /* Size of token in bytes */
int iStart, /* Start offset of token */
int iEnd /* End offset of token */
int iUnused1, /* Start offset of token */
int iUnused2 /* End offset of token */
){
Fts5InsertCtx *pCtx = (Fts5InsertCtx*)pContext;
Fts5Index *pIdx = pCtx->pStorage->pIndex;
UNUSED_PARAM2(iUnused1, iUnused2);
if( nToken>FTS5_MAX_TOKEN_SIZE ) nToken = FTS5_MAX_TOKEN_SIZE;
if( (tflags & FTS5_TOKEN_COLOCATED)==0 || pCtx->szCol==0 ){
pCtx->szCol++;
}
@@ -538,11 +546,6 @@ int sqlite3Fts5StorageDelete(Fts5Storage *p, i64 iDel, sqlite3_value **apVal){
}
}
/* Write the averages record */
if( rc==SQLITE_OK ){
rc = fts5StorageSaveTotals(p);
}
return rc;
}
@@ -638,6 +641,10 @@ int sqlite3Fts5StorageMerge(Fts5Storage *p, int nMerge){
return sqlite3Fts5IndexMerge(p->pIndex, nMerge);
}
int sqlite3Fts5StorageReset(Fts5Storage *p){
return sqlite3Fts5IndexReset(p->pIndex);
}
/*
** Allocate a new rowid. This is used for "external content" tables when
** a NULL value is inserted into the rowid column. The new rowid is allocated
@@ -742,11 +749,6 @@ int sqlite3Fts5StorageIndexInsert(
}
sqlite3_free(buf.p);
/* Write the averages record */
if( rc==SQLITE_OK ){
rc = fts5StorageSaveTotals(p);
}
return rc;
}
@@ -797,8 +799,8 @@ static int fts5StorageIntegrityCallback(
int tflags,
const char *pToken, /* Buffer containing token */
int nToken, /* Size of token in bytes */
int iStart, /* Start offset of token */
int iEnd /* End offset of token */
int iUnused1, /* Start offset of token */
int iUnused2 /* End offset of token */
){
Fts5IntegrityCtx *pCtx = (Fts5IntegrityCtx*)pContext;
Fts5Termset *pTermset = pCtx->pTermset;
@@ -808,6 +810,9 @@ static int fts5StorageIntegrityCallback(
int iPos;
int iCol;
UNUSED_PARAM2(iUnused1, iUnused2);
if( nToken>FTS5_MAX_TOKEN_SIZE ) nToken = FTS5_MAX_TOKEN_SIZE;
if( (tflags & FTS5_TOKEN_COLOCATED)==0 || pCtx->szCol==0 ){
pCtx->szCol++;
}
@@ -1077,13 +1082,18 @@ int sqlite3Fts5StorageRowCount(Fts5Storage *p, i64 *pnRow){
/*
** Flush any data currently held in-memory to disk.
*/
int sqlite3Fts5StorageSync(Fts5Storage *p, int bCommit){
if( bCommit && p->bTotalsValid ){
int rc = fts5StorageSaveTotals(p);
int sqlite3Fts5StorageSync(Fts5Storage *p){
int rc = SQLITE_OK;
i64 iLastRowid = sqlite3_last_insert_rowid(p->pConfig->db);
if( p->bTotalsValid ){
rc = fts5StorageSaveTotals(p);
p->bTotalsValid = 0;
if( rc!=SQLITE_OK ) return rc;
}
return sqlite3Fts5IndexSync(p->pIndex, bCommit);
if( rc==SQLITE_OK ){
rc = sqlite3Fts5IndexSync(p->pIndex);
}
sqlite3_set_last_insert_rowid(p->pConfig->db, iLastRowid);
return rc;
}
int sqlite3Fts5StorageRollback(Fts5Storage *p){
@@ -1118,5 +1128,3 @@ int sqlite3Fts5StorageConfigValue(
}
return rc;
}
+20 -13
View File
@@ -14,7 +14,14 @@
#ifdef SQLITE_TEST
#include <tcl.h>
#if defined(INCLUDE_SQLITE_TCL_H)
# include "sqlite_tcl.h"
#else
# include "tcl.h"
# ifndef SQLITE_TCLAPI
# define SQLITE_TCLAPI
# endif
#endif
#ifdef SQLITE_ENABLE_FTS5
@@ -78,7 +85,7 @@ static int f5tResultToErrorCode(const char *zRes){
return SQLITE_ERROR;
}
static int f5tDbAndApi(
static int SQLITE_TCLAPI f5tDbAndApi(
Tcl_Interp *interp,
Tcl_Obj *pObj,
sqlite3 **ppDb,
@@ -164,7 +171,7 @@ static int xTokenizeCb(
return rc;
}
static int xF5tApi(void*, Tcl_Interp*, int, Tcl_Obj *CONST []);
static int SQLITE_TCLAPI xF5tApi(void*, Tcl_Interp*, int, Tcl_Obj *CONST []);
static int xQueryPhraseCb(
const Fts5ExtensionApi *pApi,
@@ -209,7 +216,7 @@ static void xSetAuxdataDestructor(void *p){
**
** Description...
*/
static int xF5tApi(
static int SQLITE_TCLAPI xF5tApi(
void * clientData,
Tcl_Interp *interp,
int objc,
@@ -602,7 +609,7 @@ static void xF5tDestroy(void *pCtx){
**
** Description...
*/
static int f5tCreateFunction(
static int SQLITE_TCLAPI f5tCreateFunction(
void * clientData,
Tcl_Interp *interp,
int objc,
@@ -672,7 +679,7 @@ static int xTokenizeCb2(
**
** Description...
*/
static int f5tTokenize(
static int SQLITE_TCLAPI f5tTokenize(
void * clientData,
Tcl_Interp *interp,
int objc,
@@ -878,7 +885,7 @@ static int f5tTokenizerTokenize(
/*
** sqlite3_fts5_token ?-colocated? TEXT START END
*/
static int f5tTokenizerReturn(
static int SQLITE_TCLAPI f5tTokenizerReturn(
void * clientData,
Tcl_Interp *interp,
int objc,
@@ -949,7 +956,7 @@ static void f5tDelTokenizer(void *pCtx){
** SCRIPT2 should invoke the [sqlite3_fts5_token] command once for each
** token within the tokenized text.
*/
static int f5tCreateTokenizer(
static int SQLITE_TCLAPI f5tCreateTokenizer(
ClientData clientData,
Tcl_Interp *interp,
int objc,
@@ -992,7 +999,7 @@ static int f5tCreateTokenizer(
return TCL_OK;
}
static void xF5tFree(ClientData clientData){
static void SQLITE_TCLAPI xF5tFree(ClientData clientData){
ckfree(clientData);
}
@@ -1001,7 +1008,7 @@ static void xF5tFree(ClientData clientData){
**
** Set or clear the global "may-be-corrupt" flag. Return the old value.
*/
static int f5tMayBeCorrupt(
static int SQLITE_TCLAPI f5tMayBeCorrupt(
void * clientData,
Tcl_Interp *interp,
int objc,
@@ -1033,7 +1040,7 @@ static unsigned int f5t_fts5HashKey(int nSlot, const char *p, int n){
return (h % nSlot);
}
static int f5tTokenHash(
static int SQLITE_TCLAPI f5tTokenHash(
void * clientData,
Tcl_Interp *interp,
int objc,
@@ -1058,7 +1065,7 @@ static int f5tTokenHash(
return TCL_OK;
}
static int f5tRegisterMatchinfo(
static int SQLITE_TCLAPI f5tRegisterMatchinfo(
void * clientData,
Tcl_Interp *interp,
int objc,
@@ -1083,7 +1090,7 @@ static int f5tRegisterMatchinfo(
return TCL_OK;
}
static int f5tRegisterTok(
static int SQLITE_TCLAPI f5tRegisterTok(
void * clientData,
Tcl_Interp *interp,
int objc,
+20 -19
View File
@@ -41,16 +41,17 @@
*/
#ifdef SQLITE_TEST
#ifdef SQLITE_ENABLE_FTS5
#include "fts5.h"
#include <tcl.h>
#include <assert.h>
#include <string.h>
typedef struct Fts5MatchinfoCtx Fts5MatchinfoCtx;
#ifndef SQLITE_AMALGAMATION
typedef unsigned int u32;
#endif
struct Fts5MatchinfoCtx {
int nCol; /* Number of cols in FTS5 table */
@@ -67,18 +68,22 @@ struct Fts5MatchinfoCtx {
** If an error occurs, return NULL and leave an error in the database
** handle (accessible using sqlite3_errcode()/errmsg()).
*/
static fts5_api *fts5_api_from_db(sqlite3 *db){
fts5_api *pRet = 0;
static int fts5_api_from_db(sqlite3 *db, fts5_api **ppApi){
sqlite3_stmt *pStmt = 0;
int rc;
if( SQLITE_OK==sqlite3_prepare(db, "SELECT fts5()", -1, &pStmt, 0)
&& SQLITE_ROW==sqlite3_step(pStmt)
&& sizeof(pRet)==sqlite3_column_bytes(pStmt, 0)
){
memcpy(&pRet, sqlite3_column_blob(pStmt, 0), sizeof(pRet));
*ppApi = 0;
rc = sqlite3_prepare(db, "SELECT fts5()", -1, &pStmt, 0);
if( rc==SQLITE_OK ){
if( SQLITE_ROW==sqlite3_step(pStmt)
&& sizeof(fts5_api*)==sqlite3_column_bytes(pStmt, 0)
){
memcpy(ppApi, sqlite3_column_blob(pStmt, 0), sizeof(fts5_api*));
}
rc = sqlite3_finalize(pStmt);
}
sqlite3_finalize(pStmt);
return pRet;
return rc;
}
@@ -244,11 +249,7 @@ static int fts5MatchinfoLocalCb(
iOff>=0;
pApi->xPhraseNext(pFts, &iter, &iCol, &iOff)
){
if( f=='b' ){
aOut[iPhrase * ((p->nCol+31)/32) + iCol/32] |= ((u32)1 << iCol%32);
}else{
aOut[nMul * (iCol + iPhrase * p->nCol)]++;
}
aOut[nMul * (iCol + iPhrase * p->nCol)]++;
}
}
@@ -402,14 +403,15 @@ int sqlite3Fts5TestRegisterMatchinfo(sqlite3 *db){
/* Extract the FTS5 API pointer from the database handle. The
** fts5_api_from_db() function above is copied verbatim from the
** FTS5 documentation. Refer there for details. */
pApi = fts5_api_from_db(db);
rc = fts5_api_from_db(db, &pApi);
if( rc!=SQLITE_OK ) return rc;
/* If fts5_api_from_db() returns NULL, then either FTS5 is not registered
** with this database handle, or an error (OOM perhaps?) has occurred.
**
** Also check that the fts5_api object is version 2 or newer.
*/
if( pApi==0 || pApi->iVersion<1 ){
if( pApi==0 || pApi->iVersion<2 ){
return SQLITE_ERROR;
}
@@ -420,5 +422,4 @@ int sqlite3Fts5TestRegisterMatchinfo(sqlite3 *db){
}
#endif /* SQLITE_ENABLE_FTS5 */
#endif /* SQLITE_TEST */
+2 -2
View File
@@ -40,7 +40,7 @@
*/
#if defined(SQLITE_TEST) && defined(SQLITE_ENABLE_FTS5)
#include <fts5.h>
#include "fts5.h"
#include <string.h>
#include <assert.h>
@@ -182,7 +182,7 @@ static int fts5tokConnectMethod(
Fts5tokTable *pTab = 0;
int rc;
char **azDequote = 0;
int nDequote;
int nDequote = 0;
rc = sqlite3_declare_vtab(db,
"CREATE TABLE x(input HIDDEN, token, start, end, position)"
+11 -4
View File
@@ -62,12 +62,13 @@ static void fts5AsciiDelete(Fts5Tokenizer *p){
** Create an "ascii" tokenizer.
*/
static int fts5AsciiCreate(
void *pCtx,
void *pUnused,
const char **azArg, int nArg,
Fts5Tokenizer **ppOut
){
int rc = SQLITE_OK;
AsciiTokenizer *p = 0;
UNUSED_PARAM(pUnused);
if( nArg%2 ){
rc = SQLITE_ERROR;
}else{
@@ -116,7 +117,7 @@ static void asciiFold(char *aOut, const char *aIn, int nByte){
static int fts5AsciiTokenize(
Fts5Tokenizer *pTokenizer,
void *pCtx,
int flags,
int iUnused,
const char *pText, int nText,
int (*xToken)(void*, int, const char*, int nToken, int iStart, int iEnd)
){
@@ -130,6 +131,8 @@ static int fts5AsciiTokenize(
char *pFold = aFold;
unsigned char *a = p->aTokenChar;
UNUSED_PARAM(iUnused);
while( is<nText && rc==SQLITE_OK ){
int nByte;
@@ -323,13 +326,15 @@ static void fts5UnicodeDelete(Fts5Tokenizer *pTok){
** Create a "unicode61" tokenizer.
*/
static int fts5UnicodeCreate(
void *pCtx,
void *pUnused,
const char **azArg, int nArg,
Fts5Tokenizer **ppOut
){
int rc = SQLITE_OK; /* Return code */
Unicode61Tokenizer *p = 0; /* New tokenizer object */
UNUSED_PARAM(pUnused);
if( nArg%2 ){
rc = SQLITE_ERROR;
}else{
@@ -386,7 +391,7 @@ static int fts5UnicodeIsAlnum(Unicode61Tokenizer *p, int iCode){
static int fts5UnicodeTokenize(
Fts5Tokenizer *pTokenizer,
void *pCtx,
int flags,
int iUnused,
const char *pText, int nText,
int (*xToken)(void*, int, const char*, int nToken, int iStart, int iEnd)
){
@@ -402,6 +407,8 @@ static int fts5UnicodeTokenize(
int nFold = p->nFold;
const char *pEnd = &aFold[nFold-6];
UNUSED_PARAM(iUnused);
/* Each iteration of this loop gobbles up a contiguous run of separators,
** then the next token. */
while( rc==SQLITE_OK ){
+2 -2
View File
@@ -125,9 +125,9 @@ int sqlite3Fts5UnicodeIsalnum(int c){
0xFFFFFFFF, 0xFC00FFFF, 0xF8000001, 0xF8000001,
};
if( c<128 ){
if( (unsigned int)c<128 ){
return ( (aAscii[c >> 5] & (1 << (c & 0x001F)))==0 );
}else if( c<(1<<22) ){
}else if( (unsigned int)c<(1<<22) ){
unsigned int key = (((unsigned int)c)<<10) | 0x000003FF;
int iRes = 0;
int iHi = sizeof(aEntry)/sizeof(aEntry[0]) - 1;
+19 -4
View File
@@ -237,7 +237,7 @@ static int fts5VocabCreateMethod(
** Implementation of the xBestIndex method.
*/
static int fts5VocabBestIndexMethod(
sqlite3_vtab *pVTab,
sqlite3_vtab *pUnused,
sqlite3_index_info *pInfo
){
int i;
@@ -247,6 +247,8 @@ static int fts5VocabBestIndexMethod(
int idxNum = 0;
int nArg = 0;
UNUSED_PARAM(pUnused);
for(i=0; i<pInfo->nConstraint; i++){
struct sqlite3_index_constraint *p = &pInfo->aConstraint[i];
if( p->usable==0 ) continue;
@@ -277,8 +279,19 @@ static int fts5VocabBestIndexMethod(
}
}
pInfo->idxNum = idxNum;
/* This virtual table always delivers results in ascending order of
** the "term" column (column 0). So if the user has requested this
** specifically - "ORDER BY term" or "ORDER BY term ASC" - set the
** sqlite3_index_info.orderByConsumed flag to tell the core the results
** are already in sorted order. */
if( pInfo->nOrderBy==1
&& pInfo->aOrderBy[0].iColumn==0
&& pInfo->aOrderBy[0].desc==0
){
pInfo->orderByConsumed = 1;
}
pInfo->idxNum = idxNum;
return SQLITE_OK;
}
@@ -488,8 +501,8 @@ static int fts5VocabNextMethod(sqlite3_vtab_cursor *pCursor){
static int fts5VocabFilterMethod(
sqlite3_vtab_cursor *pCursor, /* The cursor used for this query */
int idxNum, /* Strategy index */
const char *idxStr, /* Unused */
int nVal, /* Number of elements in apVal */
const char *zUnused, /* Unused */
int nUnused, /* Number of elements in apVal */
sqlite3_value **apVal /* Arguments for the indexing scheme */
){
Fts5VocabCursor *pCsr = (Fts5VocabCursor*)pCursor;
@@ -504,6 +517,8 @@ static int fts5VocabFilterMethod(
sqlite3_value *pGe = 0;
sqlite3_value *pLe = 0;
UNUSED_PARAM2(zUnused, nUnused);
fts5VocabResetCursor(pCsr);
if( idxNum & FTS5_VOCAB_TERM_EQ ) pEq = apVal[iVal++];
if( idxNum & FTS5_VOCAB_TERM_GE ) pGe = apVal[iVal++];
+31 -19
View File
@@ -28,12 +28,13 @@
// This code runs whenever there is a syntax error
//
%syntax_error {
UNUSED_PARAM(yymajor); /* Silence a compiler warning */
sqlite3Fts5ParseError(
pParse, "fts5: syntax error near \"%.*s\"",TOKEN.n,TOKEN.p
);
}
%stack_overflow {
assert( 0 );
sqlite3Fts5ParseError(pParse, "fts5: parser stack overflow");
}
// The name of the generated procedure that implements the parser
@@ -88,6 +89,29 @@ input ::= expr(X). { sqlite3Fts5ParseFinished(pParse, X); }
%destructor expr { sqlite3Fts5ParseNodeFree($$); }
%destructor exprlist { sqlite3Fts5ParseNodeFree($$); }
%type colset {Fts5Colset*}
%destructor colset { sqlite3_free($$); }
%type colsetlist {Fts5Colset*}
%destructor colsetlist { sqlite3_free($$); }
colset(A) ::= MINUS LCP colsetlist(X) RCP. {
A = sqlite3Fts5ParseColsetInvert(pParse, X);
}
colset(A) ::= LCP colsetlist(X) RCP. { A = X; }
colset(A) ::= STRING(X). {
A = sqlite3Fts5ParseColset(pParse, 0, &X);
}
colset(A) ::= MINUS STRING(X). {
A = sqlite3Fts5ParseColset(pParse, 0, &X);
A = sqlite3Fts5ParseColsetInvert(pParse, A);
}
colsetlist(A) ::= colsetlist(Y) STRING(X). {
A = sqlite3Fts5ParseColset(pParse, Y, &X); }
colsetlist(A) ::= STRING(X). {
A = sqlite3Fts5ParseColset(pParse, 0, &X);
}
expr(A) ::= expr(X) AND expr(Y). {
A = sqlite3Fts5ParseNode(pParse, FTS5_AND, X, Y, 0);
}
@@ -98,36 +122,24 @@ expr(A) ::= expr(X) NOT expr(Y). {
A = sqlite3Fts5ParseNode(pParse, FTS5_NOT, X, Y, 0);
}
expr(A) ::= colset(X) COLON LP expr(Y) RP. {
sqlite3Fts5ParseSetColset(pParse, Y, X);
A = Y;
}
expr(A) ::= LP expr(X) RP. {A = X;}
expr(A) ::= exprlist(X). {A = X;}
exprlist(A) ::= cnearset(X). {A = X;}
exprlist(A) ::= exprlist(X) cnearset(Y). {
A = sqlite3Fts5ParseNode(pParse, FTS5_AND, X, Y, 0);
A = sqlite3Fts5ParseImplicitAnd(pParse, X, Y);
}
cnearset(A) ::= nearset(X). {
A = sqlite3Fts5ParseNode(pParse, FTS5_STRING, 0, 0, X);
}
cnearset(A) ::= colset(X) COLON nearset(Y). {
sqlite3Fts5ParseSetColset(pParse, Y, X);
A = sqlite3Fts5ParseNode(pParse, FTS5_STRING, 0, 0, Y);
}
%type colset {Fts5Colset*}
%destructor colset { sqlite3_free($$); }
%type colsetlist {Fts5Colset*}
%destructor colsetlist { sqlite3_free($$); }
colset(A) ::= LCP colsetlist(X) RCP. { A = X; }
colset(A) ::= STRING(X). {
A = sqlite3Fts5ParseColset(pParse, 0, &X);
}
colsetlist(A) ::= colsetlist(Y) STRING(X). {
A = sqlite3Fts5ParseColset(pParse, Y, &X); }
colsetlist(A) ::= STRING(X). {
A = sqlite3Fts5ParseColset(pParse, 0, &X);
sqlite3Fts5ParseSetColset(pParse, A, X);
}
+12 -7
View File
@@ -16,8 +16,13 @@ if {![info exists testdir]} {
source $testdir/tester.tcl
ifcapable !fts5 {
finish_test
proc return_if_no_fts5 {} {
finish_test
return -code return
}
return
} else {
proc return_if_no_fts5 {} {}
}
catch {
@@ -25,12 +30,6 @@ catch {
reset_db
}
# If SQLITE_ENABLE_FTS5 is not defined, skip this test.
ifcapable !fts5 {
finish_test
return
}
proc fts5_test_poslist {cmd} {
set res [list]
for {set i 0} {$i < [$cmd xInstCount]} {incr i} {
@@ -160,6 +159,12 @@ proc fts5_aux_test_functions {db} {
}
}
proc fts5_segcount {tbl} {
set N 0
foreach n [fts5_level_segs $tbl] { incr N $n }
set N
}
proc fts5_level_segs {tbl} {
set sql "SELECT fts5_decode(rowid,block) aS r FROM ${tbl}_data WHERE rowid=10"
set ret [list]
+38 -3
View File
@@ -432,9 +432,16 @@ proc funk {} {
}
db func funk funk
# This test case corrupts the structure record within the first invocation
# of function funk(). Which used to cause the bm25() function to throw an
# exception. But since bm25() can now used the cached structure record,
# it never sees the corruption introduced by funk() and so the following
# statement no longer fails.
#
do_catchsql_test 16.2 {
SELECT funk(), bm25(n1), funk() FROM n1 WHERE n1 MATCH 'a+b+c+d'
} {1 {SQL logic error or missing database}}
} {0 {{} -1e-06 {}}}
# {1 {SQL logic error}}
#-------------------------------------------------------------------------
#
@@ -554,9 +561,37 @@ do_test 20.1 {
execsql { SELECT rowid FROM tmp WHERE tmp MATCH 'y' }
} $::ids
#--------------------------------------------------------------------
# Test that a DROP TABLE may be executed within a transaction that
# writes to an FTS5 table.
#
do_execsql_test 21.0 {
CREATE TEMP TABLE t8(a, b);
CREATE VIRTUAL TABLE ft USING fts5(x, detail=%DETAIL%);
}
do_execsql_test 21.1 {
BEGIN;
INSERT INTO ft VALUES('a b c');
DROP TABLE t8;
COMMIT;
}
do_execsql_test 22.0 {
CREATE VIRTUAL TABLE t9 USING fts5(x, detail=%DETAIL%);
INSERT INTO t9(rowid, x) VALUES(2, 'bbb');
BEGIN;
INSERT INTO t9(rowid, x) VALUES(1, 'aaa');
DELETE FROM t9 WHERE rowid = 2;
INSERT INTO t9(rowid, x) VALUES(3, 'bbb');
COMMIT;
}
do_execsql_test 22.1 {
SELECT rowid FROM t9('a*')
} {1}
}
finish_test
-1
View File
@@ -294,4 +294,3 @@ do_execsql_test 7.0 {
finish_test
-1
View File
@@ -276,4 +276,3 @@ foreach {tn expr tclexpr} {
}
finish_test
-1
View File
@@ -242,4 +242,3 @@ foreach {T create} {
}
finish_test
-1
View File
@@ -309,4 +309,3 @@ foreach {tn q cnt} {
}
finish_test
+62 -30
View File
@@ -72,42 +72,56 @@ foreach {tn doc res} {
2.2 {o X o o o o o o} {o [X] o o o o o...}
2.3 {o o X o o o o o} {o o [X] o o o o...}
2.4 {o o o X o o o o} {o o o [X] o o o...}
2.5 {o o o o X o o o} {...o o o [X] o o o}
2.6 {o o o o o X o o} {...o o o o [X] o o}
2.7 {o o o o o o X o} {...o o o o o [X] o}
2.5 {o o o o X o o o} {o o o o [X] o o...}
2.6 {o o o o o X o o} {o o o o o [X] o...}
2.7 {o o o o o o X o} {o o o o o o [X]...}
2.8 {o o o o o o o X} {...o o o o o o [X]}
2.9 {o o o o o o o X o} {...o o o o o [X] o}
2.10 {o o o o o o o X o o} {...o o o o [X] o o}
2.11 {o o o o o o o X o o o} {...o o o [X] o o o}
2.12 {o o o o o o o X o o o o} {...o o o [X] o o o...}
3.1 {X o o o o o o o o} {[X] o o o o o o...}
3.2 {o X o o o o o o o} {o [X] o o o o o...}
3.3 {o o X o o o o o o} {o o [X] o o o o...}
3.4 {o o o X o o o o o} {o o o [X] o o o...}
3.5 {o o o o X o o o o} {...o o o [X] o o o...}
3.6 {o o o o o X o o o} {...o o o [X] o o o}
3.7 {o o o o o o X o o} {...o o o o [X] o o}
3.8 {o o o o o o o X o} {...o o o o o [X] o}
3.9 {o o o o o o o o X} {...o o o o o o [X]}
3.5 {o o o o o o o X o o o o} {...o o o [X] o o o...}
3.6 {o o o o o o o o X o o o} {...o o o [X] o o o}
3.7 {o o o o o o o o o X o o} {...o o o o [X] o o}
3.8 {o o o o o o o o o o X o} {...o o o o o [X] o}
3.9 {o o o o o o o o o o o X} {...o o o o o o [X]}
4.1 {X o o o o o X o o} {[X] o o o o o [X]...}
4.2 {o X o o o o o X o} {...[X] o o o o o [X]...}
4.3 {o o X o o o o o X} {...[X] o o o o o [X]}
4.2 {o o o o o o o X o o o o o X o} {...[X] o o o o o [X]...}
4.3 {o o o o o o o o X o o o o o X} {...[X] o o o o o [X]}
5.1 {X o o o o X o o o} {[X] o o o o [X] o...}
5.2 {o X o o o o X o o} {...[X] o o o o [X] o...}
5.3 {o o X o o o o X o} {...[X] o o o o [X] o}
5.4 {o o o X o o o o X} {...o [X] o o o o [X]}
5.2 {o o o o o o o X o o o o X o o} {...[X] o o o o [X] o...}
5.3 {o o o o o o o o X o o o o X o} {...[X] o o o o [X] o}
5.4 {o o o o o o o o o X o o o o X} {...o [X] o o o o [X]}
6.1 {X o o o X o o o} {[X] o o o [X] o o...}
6.2 {o X o o o X o o o} {o [X] o o o [X] o...}
6.3 {o o X o o o X o o} {...o [X] o o o [X] o...}
6.4 {o o o X o o o X o} {...o [X] o o o [X] o}
6.5 {o o o o X o o o X} {...o o [X] o o o [X]}
6.3 {o o o o o o o X o o o X o o} {...o [X] o o o [X] o...}
6.4 {o o o o o o o o X o o o X o} {...o [X] o o o [X] o}
6.5 {o o o o o o o o o X o o o X} {...o o [X] o o o [X]}
7.1 {X o o X o o o o o} {[X] o o [X] o o o...}
7.2 {o X o o X o o o o} {o [X] o o [X] o o...}
7.3 {o o X o o X o o o} {...o [X] o o [X] o o...}
7.4 {o o o X o o X o o} {...o [X] o o [X] o o}
7.5 {o o o o X o o X o} {...o o [X] o o [X] o}
7.6 {o o o o o X o o X} {...o o o [X] o o [X]}
7.3 {o o o o o o o X o o X o o o} {...o [X] o o [X] o o...}
7.4 {o o o o o o o o X o o X o o} {...o [X] o o [X] o o}
7.5 {o o o o o o o o o X o o X o} {...o o [X] o o [X] o}
7.6 {o o o o o o o o o o X o o X} {...o o o [X] o o [X]}
8.1 {o o o o o o o o o X o o o o o o o o o o o o o o o o X X X o o o}
{...o o [X] [X] [X] o o...}
8.2 {o o o o o o o. o o X o o o o o o o o o o o o o o o o X X X o o o}
{...o o [X] o o o o...}
8.3 {o o o o X o o o o o o o o o o o o o o o o o o o o o X X X o o o}
{o o o o [X] o o...}
} {
do_snippet_test 1.$tn $doc X $res
}
@@ -124,25 +138,43 @@ if {[detail_is_full]} {
2.1 {X Y o o o o o o} {[X Y] o o o o o...}
2.2 {o X Y o o o o o} {o [X Y] o o o o...}
2.3 {o o X Y o o o o} {o o [X Y] o o o...}
2.4 {o o o X Y o o o} {...o o [X Y] o o o}
2.5 {o o o o X Y o o} {...o o o [X Y] o o}
2.6 {o o o o o X Y o} {...o o o o [X Y] o}
2.7 {o o o o o o X Y} {...o o o o o [X Y]}
2.4 {o o o o o o o X Y o o o} {...o o [X Y] o o o}
2.5 {o o o o o o o o X Y o o} {...o o o [X Y] o o}
2.6 {o o o o o o o o o X Y o} {...o o o o [X Y] o}
2.7 {o o o o o o o o o o X Y} {...o o o o o [X Y]}
3.1 {X Y o o o o o o o} {[X Y] o o o o o...}
3.2 {o X Y o o o o o o} {o [X Y] o o o o...}
3.3 {o o X Y o o o o o} {o o [X Y] o o o...}
3.4 {o o o X Y o o o o} {...o o [X Y] o o o...}
3.5 {o o o o X Y o o o} {...o o [X Y] o o o}
3.6 {o o o o o X Y o o} {...o o o [X Y] o o}
3.7 {o o o o o o X Y o} {...o o o o [X Y] o}
3.8 {o o o o o o o X Y} {...o o o o o [X Y]}
3.4 {o o o o o o o X Y o o o o} {...o o [X Y] o o o...}
3.5 {o o o o o o o o X Y o o o} {...o o [X Y] o o o}
3.6 {o o o o o o o o o X Y o o} {...o o o [X Y] o o}
3.7 {o o o o o o o o o o X Y o} {...o o o o [X Y] o}
3.8 {o o o o o o o o o o o X Y} {...o o o o o [X Y]}
} {
do_snippet_test 2.$tn $doc "X + Y" $res
}
}
do_execsql_test 4.0 {
CREATE VIRTUAL TABLE x1 USING fts5(a, b);
INSERT INTO x1 VALUES('xyz', '1 2 3 4 5 6 7 8 9 10 11 12 13');
SELECT snippet(x1, 1, '[', ']', '...', 5) FROM x1('xyz');
} {
{1 2 3 4 5...}
}
do_execsql_test 5.0 {
CREATE VIRTUAL TABLE p1 USING fts5(a, b);
INSERT INTO p1 VALUES(
'x a a a a a a a a a a',
'a a a a a a a a a a a a a a a a a a a x'
);
}
do_execsql_test 5.1 {
SELECT snippet(p1, 0, '[', ']', '...', 6) FROM p1('x');
} {{[x] a a a a a...}}
} ;# foreach_detail_mode
finish_test
-1
View File
@@ -142,4 +142,3 @@ if {[detail_is_full]} {
finish_test
-1
View File
@@ -167,4 +167,3 @@ do_execsql_test 1.8.2 {
#db eval {SELECT rowid, fts5_decode(rowid, block) aS r FROM t1_data} {puts $r}
finish_test
-1
View File
@@ -55,4 +55,3 @@ do_execsql_test 1.2 {
finish_test
-1
View File
@@ -66,4 +66,3 @@ do_execsql_test 2.0 { INSERT INTO t1(t1) VALUES('integrity-check') }
finish_test
-1
View File
@@ -147,4 +147,3 @@ do_execsql_test 3.1 {
}
finish_test
+1 -2
View File
@@ -77,7 +77,7 @@ foreach {tn defn} {
} {
do_test 2.2.$tn {
catchsql { INSERT INTO ft1(ft1, rank) VALUES('rank', $defn) }
} {1 {SQL logic error or missing database}}
} {1 {SQL logic error}}
}
#-------------------------------------------------------------------------
@@ -297,4 +297,3 @@ do_catchsql_test 4.4.4 {
finish_test
-1
View File
@@ -100,4 +100,3 @@ do_execsql_test 3.3 {
} {1 2}
finish_test
-1
View File
@@ -342,4 +342,3 @@ foreach {tn expr} {
finish_test
+32 -1
View File
@@ -246,5 +246,36 @@ foreach {tn lRow res} {
} $res
}
finish_test
#-------------------------------------------------------------------------
# Test the built-in bm25() demo.
#
reset_db
do_execsql_test 9.1 {
CREATE VIRTUAL TABLE t1 USING fts5(a, b);
INSERT INTO t1 VALUES('a', NULL); -- 1
INSERT INTO t1 VALUES('a', NULL); -- 2
INSERT INTO t1 VALUES('a', NULL); -- 3
INSERT INTO t1 VALUES('a', NULL); -- 4
INSERT INTO t1 VALUES('a', NULL); -- 5
INSERT INTO t1 VALUES('a', NULL); -- 6
INSERT INTO t1 VALUES('a', NULL); -- 7
INSERT INTO t1 VALUES('a', NULL); -- 8
INSERT INTO t1 VALUES(NULL, 'a a b'); -- 9
INSERT INTO t1 VALUES(NULL, 'b b a'); -- 10
}
do_execsql_test 9.2 {
SELECT rowid FROM t1('a AND b') ORDER BY rank;
} {
10 9
}
do_execsql_test 9.3 {
SELECT rowid FROM t1('b:a AND b:b') ORDER BY rank;
} {
9 10
}
finish_test
-1
View File
@@ -112,4 +112,3 @@ db eval {
}
finish_test
-1
View File
@@ -61,4 +61,3 @@ do_test 2.1...slow {
} {}
finish_test
+1 -2
View File
@@ -14,6 +14,7 @@
source [file join [file dirname [info script]] fts5_common.tcl]
set testprefix fts5bigtok
return_if_no_fts5
proc rndterm {} {
set L [list a b c d e f g h i j k l m n o p q r s t u v w x y z]
@@ -63,5 +64,3 @@ foreach_detail_mode $::testprefix {
}
finish_test
+86
View File
@@ -0,0 +1,86 @@
# 2016 August 10
#
# The author disclaims copyright to this source code. In place of
# a legal notice, here is a blessing:
#
# May you do good and not evil.
# May you find forgiveness for yourself and forgive others.
# May you share freely, never taking more than you give.
#
#*************************************************************************
# This file implements regression tests for SQLite library. The
# focus of this script is testing the FTS5 module.
#
source [file join [file dirname [info script]] fts5_common.tcl]
set testprefix fts5colset
# If SQLITE_ENABLE_FTS5 is not defined, omit this file.
ifcapable !fts5 {
finish_test
return
}
foreach_detail_mode $::testprefix {
if {[detail_is_none]} continue
do_execsql_test 1.0 {
CREATE VIRTUAL TABLE t1 USING fts5(a, b, c, d, detail=%DETAIL%);
INSERT INTO t1 VALUES('a', 'b', 'c', 'd'); -- 1
INSERT INTO t1 VALUES('d', 'a', 'b', 'c'); -- 2
INSERT INTO t1 VALUES('c', 'd', 'a', 'b'); -- 3
INSERT INTO t1 VALUES('b', 'c', 'd', 'a'); -- 4
}
foreach {tn q res} {
1 "a" {1 2 3 4}
2 "{a} : a" {1}
3 "-{a} : a" {2 3 4}
4 "- {a c} : a" {2 4}
5 " - {d d c} : a" {1 2}
6 "- {d c b a} : a" {}
7 "-{\"a\"} : b" {1 2 3}
8 "- c : a" {1 2 4}
9 "-c : a" {1 2 4}
10 "-\"c\" : a" {1 2 4}
} {
do_execsql_test 1.$tn {
SELECT rowid FROM t1($q)
} $res
}
foreach {tn q res} {
0 {{a} : (a AND ":")} {}
1 "{a b c} : (a AND d)" {2 3}
2 "{a b c} : (a AND b:d)" {3}
3 "{a b c} : (a AND d:d)" {}
4 "{b} : ( {b a} : ( {c b a} : ( {d b c a} : ( d OR c ) ) ) )" {3 4}
5 "{a} : ( {b a} : ( {c b a} : ( {d b c a} : ( d OR c ) ) ) )" {2 3}
6 "{a} : ( {b a} : ( {c b} : ( {d b c a} : ( d OR c ) ) ) )" {}
7 "{a b c} : (b:a AND c:b)" {2}
} {
do_execsql_test 2.$tn {
SELECT rowid FROM t1($q)
} $res
}
foreach {tn w res} {
0 "a MATCH 'a'" {1}
1 "b MATCH 'a'" {2}
2 "b MATCH '{a b c} : a'" {2}
3 "b MATCH 'a OR b'" {1 2}
4 "b MATCH 'a OR a:b'" {2}
5 "b MATCH 'a OR b:b'" {1 2}
} {
do_execsql_test 3.$tn "
SELECT rowid FROM t1 WHERE $w
" $res
}
do_catchsql_test 4.1 {
SELECT * FROM t1 WHERE rowid MATCH 'a'
} {1 {unable to use function MATCH in the requested context}}
}
finish_test
+29 -14
View File
@@ -66,7 +66,7 @@ foreach {tn val} {
} {
do_catchsql_test 3.$tn {
INSERT INTO t1(t1, rank) VALUES('rank', $val);
} {1 {SQL logic error or missing database}}
} {1 {SQL logic error}}
}
#-------------------------------------------------------------------------
@@ -169,33 +169,33 @@ do_execsql_test 9.0 {
} {}
do_catchsql_test 9.1.1 {
INSERT INTO abc(abc, rank) VALUES('pgsz', -5);
} {1 {SQL logic error or missing database}}
} {1 {SQL logic error}}
do_catchsql_test 9.1.2 {
INSERT INTO abc(abc, rank) VALUES('pgsz', 50000000);
} {1 {SQL logic error or missing database}}
} {1 {SQL logic error}}
do_catchsql_test 9.1.3 {
INSERT INTO abc(abc, rank) VALUES('pgsz', 66.67);
} {1 {SQL logic error or missing database}}
} {1 {SQL logic error}}
do_catchsql_test 9.2.1 {
INSERT INTO abc(abc, rank) VALUES('automerge', -5);
} {1 {SQL logic error or missing database}}
} {1 {SQL logic error}}
do_catchsql_test 9.2.2 {
INSERT INTO abc(abc, rank) VALUES('automerge', 50000000);
} {1 {SQL logic error or missing database}}
} {1 {SQL logic error}}
do_catchsql_test 9.2.3 {
INSERT INTO abc(abc, rank) VALUES('automerge', 66.67);
} {1 {SQL logic error or missing database}}
} {1 {SQL logic error}}
do_execsql_test 9.2.4 {
INSERT INTO abc(abc, rank) VALUES('automerge', 1);
} {}
do_catchsql_test 9.3.1 {
INSERT INTO abc(abc, rank) VALUES('crisismerge', -5);
} {1 {SQL logic error or missing database}}
} {1 {SQL logic error}}
do_catchsql_test 9.3.2 {
INSERT INTO abc(abc, rank) VALUES('crisismerge', 66.67);
} {1 {SQL logic error or missing database}}
} {1 {SQL logic error}}
do_execsql_test 9.3.3 {
INSERT INTO abc(abc, rank) VALUES('crisismerge', 1);
} {}
@@ -205,14 +205,14 @@ do_execsql_test 9.3.4 {
do_catchsql_test 9.4.1 {
INSERT INTO abc(abc, rank) VALUES('nosuchoption', 1);
} {1 {SQL logic error or missing database}}
} {1 {SQL logic error}}
do_catchsql_test 9.5.1 {
INSERT INTO abc(abc, rank) VALUES('hashsize', 'not an integer');
} {1 {SQL logic error or missing database}}
} {1 {SQL logic error}}
do_catchsql_test 9.5.2 {
INSERT INTO abc(abc, rank) VALUES('hashsize', -500000);
} {1 {SQL logic error or missing database}}
} {1 {SQL logic error}}
do_catchsql_test 9.5.3 {
INSERT INTO abc(abc, rank) VALUES('hashsize', 500000);
} {0 {}}
@@ -245,7 +245,22 @@ foreach {tn opt} {
do_catchsql_test 12.1 {
INSERT INTO t1(t1, rank) VALUES('rank', NULL);;
} {1 {SQL logic error or missing database}}
} {1 {SQL logic error}}
#-------------------------------------------------------------------------
# errors in the 'usermerge' option
#
do_execsql_test 13.0 {
CREATE VIRTUAL TABLE tt USING fts5(ttt);
}
foreach {tn val} {
1 -1
2 4.2
3 17
4 1
} {
set sql "INSERT INTO tt(tt, rank) VALUES('usermerge', $val)"
do_catchsql_test 13.$tn $sql {1 {SQL logic error}}
}
finish_test
-2
View File
@@ -66,5 +66,3 @@ do_execsql_test 2.1 {
}
finish_test
-1
View File
@@ -255,4 +255,3 @@ do_execsql_test 6.2 {
finish_test
-1
View File
@@ -96,4 +96,3 @@ do_catchsql_test 3.1 {
} {1 {database disk image is malformed}}
finish_test
+3 -4
View File
@@ -37,7 +37,7 @@ do_execsql_test 1.0 {
}
set mask [expr 31 << 31]
if 1 {
if 0 {
# Test 1:
#
@@ -84,6 +84,8 @@ foreach {tno stmt} {
}
}
}
# Using the same database as the 1.* tests.
#
# Run N-1 tests, where N is the number of bytes in the rightmost leaf page
@@ -212,8 +214,6 @@ foreach {tn nCut} {
# do_test 4.$tn.x { expr $nCorrupt>0 } 1
}
}
set doc [string repeat "A B C " 1000]
do_execsql_test 5.0 {
CREATE VIRTUAL TABLE x5 USING fts5(tt);
@@ -269,4 +269,3 @@ do_catchsql_test 6.2 {
sqlite3_fts5_may_be_corrupt 0
finish_test
+39 -4
View File
@@ -179,6 +179,10 @@ for {set i 1} {1} {incr i} {
if {$end<=$i} break
lset var end [expr $end - $i]
set struct [binary format c* $var]
db close
sqlite3 db test.db
db eval {
BEGIN;
UPDATE t1_data SET block = $struct WHERE id=10;
@@ -334,12 +338,9 @@ do_catchsql_test 6.3.5 {
} {1 {database disk image is malformed}}
}
#------------------------------------------------------------------------
#
reset_db
reset_db
proc rnddoc {n} {
set map [list a b c d]
set doc [list]
@@ -371,6 +372,40 @@ do_test 7.1 {
}
} {}
}
#------------------------------------------------------------------------
# Corruption within the structure record.
#
reset_db
do_execsql_test 8.1 {
CREATE VIRTUAL TABLE t1 USING fts5(x, y);
INSERT INTO t1 VALUES('one', 'two');
}
do_test 9.1.1 {
set blob "12345678" ;# cookie
append blob "0105" ;# 1 level, total of 5 segments
append blob "06" ;# write counter
append blob "0002" ;# first level has 0 segments merging, 2 other.
append blob "450108" ;# first segment
execsql "REPLACE INTO t1_data VALUES(10, X'$blob')"
} {}
do_catchsql_test 9.1.2 {
SELECT * FROM t1('one AND two');
} {1 {database disk image is malformed}}
do_test 9.2.1 {
set blob "12345678" ;# cookie
append blob "0205" ;# 2 levels, total of 5 segments
append blob "06" ;# write counter
append blob "0001" ;# first level has 0 segments merging, 1 other.
append blob "450108" ;# first segment
execsql "REPLACE INTO t1_data VALUES(10, X'$blob')"
} {}
do_catchsql_test 9.2.2 {
SELECT * FROM t1('one AND two');
} {1 {database disk image is malformed}}
sqlite3_fts5_may_be_corrupt 0
finish_test
+53
View File
@@ -0,0 +1,53 @@
# 2017 May 12
#
# The author disclaims copyright to this source code. In place of
# a legal notice, here is a blessing:
#
# May you do good and not evil.
# May you find forgiveness for yourself and forgive others.
# May you share freely, never taking more than you give.
#
#*************************************************************************
# This file implements regression tests for SQLite library. The
# focus of this script is testing the FTS5 module.
#
source [file join [file dirname [info script]] fts5_common.tcl]
set testprefix fts5delete
# If SQLITE_ENABLE_FTS5 is not defined, omit this file.
ifcapable !fts5 {
finish_test
return
}
fts5_aux_test_functions db
do_execsql_test 1.0 {
CREATE VIRTUAL TABLE t1 USING fts5(x);
WITH s(i) AS (
SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<5000
)
INSERT INTO t1(rowid, x) SELECT i, (i/2)*2 FROM s;
}
do_test 1.1 {
execsql BEGIN
for {set i 1} {$i<=5000} {incr i} {
if {$i % 2} {
execsql { INSERT INTO t1 VALUES($i) }
} else {
execsql { DELETE FROM t1 WHERE rowid = $i }
}
}
execsql COMMIT
} {}
do_test 1.2 {
execsql { INSERT INTO t1(t1, rank) VALUES('usermerge', 2); }
for {set i 0} {$i < 5} {incr i} {
execsql { INSERT INTO t1(t1, rank) VALUES('merge', 1) }
execsql { INSERT INTO t1(t1) VALUES('integrity-check') }
}
} {}
finish_test
-1
View File
@@ -241,4 +241,3 @@ do_execsql_test 5.3 {
finish_test
+65
View File
@@ -0,0 +1,65 @@
# 2016 March 21
#
# The author disclaims copyright to this source code. In place of
# a legal notice, here is a blessing:
#
# May you do good and not evil.
# May you find forgiveness for yourself and forgive others.
# May you share freely, never taking more than you give.
#
#*************************************************************************
# This file implements regression tests for SQLite library. The
# focus of this script is testing the FTS5 module.
#
# Specifically, that the fts5 module is deterministic. At one point, when
# segment ids were allocated using sqlite3_randomness(), this was not the
# case.
#
source [file join [file dirname [info script]] fts5_common.tcl]
set testprefix fts5aa
return_if_no_fts5
proc do_determin_test {tn} {
uplevel [list
do_execsql_test $tn {
SELECT (SELECT md5sum(id, block) FROM t1_data)==
(SELECT md5sum(id, block) FROM t2_data),
(SELECT md5sum(id, block) FROM t1_data)==
(SELECT md5sum(id, block) FROM t3_data)
} {1 1}
]
}
foreach_detail_mode $::testprefix {
do_execsql_test 1.0 {
CREATE VIRTUAL TABLE t1 USING fts5(a, b, prefix="1 2", detail=%DETAIL%);
CREATE VIRTUAL TABLE t2 USING fts5(a, b, prefix="1 2", detail=%DETAIL%);
CREATE VIRTUAL TABLE t3 USING fts5(a, b, prefix="1 2", detail=%DETAIL%);
}
do_test 1.1 {
foreach t {t1 t2 t3} {
execsql [string map [list TBL $t] {
INSERT INTO TBL VALUES('a b c', 'd e f');
INSERT INTO TBL VALUES('c1 c2 c3', 'c1 c2 c3');
INSERT INTO TBL VALUES('xyzxyzxyz', 'xyzxyzxyz');
}]
}
} {}
do_determin_test 1.2
do_test 1.3 {
foreach t {t1 t2 t3} {
execsql [string map [list TBL $t] {
INSERT INTO TBL(TBL) VALUES('optimize');
}]
}
} {}
do_determin_test 1.4
}
finish_test
+2 -3
View File
@@ -178,7 +178,7 @@ do_execsql_test 3.2 {
ORDER BY rowid DESC;
} {16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1}
do_execsql_test 3.2 {
do_execsql_test 3.3 {
INSERT INTO abc(abc) VALUES('integrity-check');
INSERT INTO abc(abc) VALUES('optimize');
INSERT INTO abc(abc) VALUES('integrity-check');
@@ -187,7 +187,7 @@ do_execsql_test 3.2 {
set v [lindex $vocab 0]
set i 0
foreach v $vocab {
do_execsql_test 3.3.[incr i] {
do_execsql_test 3.4.[incr i] {
SELECT rowid FROM abc WHERE abc MATCH $v
} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16}
}
@@ -197,4 +197,3 @@ foreach v $vocab {
finish_test
-1
View File
@@ -44,4 +44,3 @@ do_execsql_test 1.2 {
finish_test
+23 -9
View File
@@ -33,12 +33,12 @@ foreach {tn expr res} {
1 {abc} {"abc"}
2 {abc ""} {"abc"}
3 {""} {}
4 {abc OR ""} {"abc"}
5 {abc NOT ""} {"abc"}
6 {abc AND ""} {"abc"}
7 {"" OR abc} {"abc"}
8 {"" NOT abc} {"abc"}
9 {"" AND abc} {"abc"}
4 {abc OR ""} {"abc" OR ""}
5 {abc NOT ""} {"abc" NOT ""}
6 {abc AND ""} {"abc" AND ""}
7 {"" OR abc} {"" OR "abc"}
8 {"" NOT abc} {"" NOT "abc"}
9 {"" AND abc} {"" AND "abc"}
10 {abc + "" + def} {"abc" + "def"}
11 {abc "" def} {"abc" AND "def"}
12 {r+e OR w} {"r" + "e" OR "w"}
@@ -63,7 +63,21 @@ do_catchsql_test 2.1 {
SELECT fts5_expr_tcl()
} {1 {wrong number of arguments to function fts5_expr_tcl}}
do_execsql_test 3.0 {
CREATE VIRTUAL TABLE e1 USING fts5(text, tokenize = 'porter unicode61');
INSERT INTO e1 VALUES ("just a few words with a / inside");
}
do_execsql_test 3.1 {
SELECT rowid, bm25(e1) FROM e1 WHERE e1 MATCH '"just"' ORDER BY rank;
} {1 -1e-06}
do_execsql_test 3.2 {
SELECT rowid FROM e1 WHERE e1 MATCH '"/" OR "just"'
} 1
do_execsql_test 3.3 {
SELECT rowid, bm25(e1) FROM e1 WHERE e1 MATCH '"/" OR "just"' ORDER BY rank;
} {1 -1e-06}
finish_test
-1
View File
@@ -351,4 +351,3 @@ do_faultsim_test 9.1 -faults oom-* -prep {
finish_test
-1
View File
@@ -137,4 +137,3 @@ do_faultsim_test 5.0 -faults oom-* -prep {
}
finish_test
-1
View File
@@ -110,4 +110,3 @@ do_faultsim_test 3.2 -faults oom-* -prep {
finish_test
+1 -2
View File
@@ -86,7 +86,7 @@ set ::res [db eval {SELECT rowid, x1 FROM x1 WHERE x1 MATCH '*reads'}]
do_faultsim_test 4 -faults oom-* -body {
db eval {SELECT rowid, x, x1 FROM x1 WHERE x1 MATCH '*reads'}
} -test {
faultsim_test_result {0 {0 {} 4}}
faultsim_test_result {0 {0 {} 3}}
}
#-------------------------------------------------------------------------
@@ -395,4 +395,3 @@ do_faultsim_test 14.1 -faults oom-t* -prep {
}
finish_test
-1
View File
@@ -130,4 +130,3 @@ do_faultsim_test 3.3 -faults oom-t* -body {
finish_test
-1
View File
@@ -292,4 +292,3 @@ do_faultsim_test 6 -faults oom* -prep {
db close
}
finish_test
-1
View File
@@ -116,4 +116,3 @@ do_faultsim_test 2.2 -faults oom-* -body {
}
finish_test
+25 -1
View File
@@ -54,7 +54,31 @@ foreach_detail_mode $testprefix {
faultsim_test_result {0 {1 3}} {1 SQLITE_NOMEM}
}
}
} ;# foreach_detail_mode...
finish_test
do_execsql_test 4.0 {
CREATE VIRTUAL TABLE x2 USING fts5(a);
INSERT INTO x2(x2, rank) VALUES('crisismerge', 2);
INSERT INTO x2(x2, rank) VALUES('pgsz', 32);
INSERT INTO x2 VALUES('a b c d');
INSERT INTO x2 VALUES('e f g h');
INSERT INTO x2 VALUES('i j k l');
INSERT INTO x2 VALUES('m n o p');
INSERT INTO x2 VALUES('q r s t');
INSERT INTO x2 VALUES('u v w x');
INSERT INTO x2 VALUES('y z a b');
}
faultsim_save_and_close
do_faultsim_test 4 -faults oom-* -prep {
faultsim_restore_and_reopen
} -body {
execsql { INSERT INTO x2(x2) VALUES('optimize') }
} -test {
faultsim_test_result {0 {}} {1 SQLITE_NOMEM}
}
finish_test
-1
View File
@@ -153,4 +153,3 @@ do_faultsim_test 6 -faults oom-* -body {
} ;# foreach_detail_mode...
finish_test
-1
View File
@@ -61,4 +61,3 @@ do_faultsim_test 2 -faults oom* -prep {
faultsim_test_result {0 {1 2}}
}
finish_test
+134
View File
@@ -0,0 +1,134 @@
# 2016 February 17
#
# The author disclaims copyright to this source code. In place of
# a legal notice, here is a blessing:
#
# May you do good and not evil.
# May you find forgiveness for yourself and forgive others.
# May you share freely, never taking more than you give.
#
#*************************************************************************
#
# This file is focused on OOM errors.
#
source [file join [file dirname [info script]] fts5_common.tcl]
source $testdir/malloc_common.tcl
set testprefix fts5faultB
# If SQLITE_ENABLE_FTS3 is defined, omit this file.
ifcapable !fts5 {
finish_test
return
}
proc mit {blob} {
set scan(littleEndian) i*
set scan(bigEndian) I*
binary scan $blob $scan($::tcl_platform(byteOrder)) r
return $r
}
db func mit mit
#-------------------------------------------------------------------------
# Errors while registering the matchinfo() demo function.
#
do_faultsim_test 1 -faults oom* -prep {
sqlite3 db test.db
} -body {
sqlite3_fts5_register_matchinfo db
} -test {
faultsim_test_result {0 {}} {1 SQLITE_ERROR} {1 SQLITE_NOMEM}
}
#-------------------------------------------------------------------------
# Errors while executing the matchinfo() demo function.
#
reset_db
sqlite3_fts5_register_matchinfo db
db func mit mit
do_execsql_test 2 {
CREATE VIRTUAL TABLE t1 USING fts5(a, b);
INSERT INTO t1 VALUES('x y z', '1 2 3');
INSERT INTO t1 VALUES('x', '1 2 3 4 5 6 7');
}
do_faultsim_test 2.1 -faults oom* -body {
execsql { SELECT mit(matchinfo(t1, 'a')) FROM t1('x') }
} -test {
faultsim_test_result {0 {{2 5} {2 5}}}
}
do_faultsim_test 2.2 -faults oom* -body {
execsql { SELECT mit(matchinfo(t1, 'l')) FROM t1('x') }
} -test {
faultsim_test_result {0 {{3 3} {1 7}}}
}
do_execsql_test 2.3 {
INSERT INTO t1 VALUES('a b c d e f', 'a b d e f c');
INSERT INTO t1 VALUES('l m b c a', 'n o a b c z');
}
do_faultsim_test 2.4 -faults oom* -body {
execsql { SELECT mit(matchinfo(t1, 's')) FROM t1('a b c') }
} -test {
faultsim_test_result {0 {{3 2} {2 3}}}
}
#-------------------------------------------------------------------------
#
reset_db
do_execsql_test 3.0 {
CREATE VIRTUAL TABLE x1 USING fts5(z);
}
do_faultsim_test 3.1 -faults oom* -body {
execsql {
SELECT rowid FROM x1('c') WHERE rowid>1;
}
} -test {
faultsim_test_result {0 {}}
}
do_execsql_test 3.2 {
INSERT INTO x1 VALUES('a b c');
INSERT INTO x1 VALUES('b c d');
INSERT INTO x1 VALUES('c d e');
INSERT INTO x1 VALUES('d e f');
}
do_faultsim_test 3.3 -faults oom* -body {
execsql {
SELECT rowid FROM x1('c') WHERE rowid>1;
}
} -test {
faultsim_test_result {0 {2 3}}
}
#-------------------------------------------------------------------------
# Test OOM injection with nested colsets.
#
reset_db
do_execsql_test 4.0 {
CREATE VIRTUAL TABLE t1 USING fts5(a, b, c, d);
INSERT INTO t1 VALUES('a', 'b', 'c', 'd'); -- 1
INSERT INTO t1 VALUES('d', 'a', 'b', 'c'); -- 2
INSERT INTO t1 VALUES('c', 'd', 'a', 'b'); -- 3
INSERT INTO t1 VALUES('b', 'c', 'd', 'a'); -- 4
}
do_faultsim_test 4.1 -faults oom* -body {
execsql { SELECT rowid FROM t1('{a b c} : (b:a AND c:b)'); }
} -test {
faultsim_test_result {0 2}
}
do_faultsim_test 4.2 -faults oom* -body {
execsql { SELECT rowid FROM t1('{a b c} : (a AND d)') }
} -test {
faultsim_test_result {0 {2 3}}
}
finish_test
+87
View File
@@ -0,0 +1,87 @@
# 2016 February 2
#
# The author disclaims copyright to this source code. In place of
# a legal notice, here is a blessing:
#
# May you do good and not evil.
# May you find forgiveness for yourself and forgive others.
# May you share freely, never taking more than you give.
#
#*************************************************************************
#
# This file is focused on OOM errors.
#
source [file join [file dirname [info script]] fts5_common.tcl]
source $testdir/malloc_common.tcl
set testprefix fts5faultA
# If SQLITE_ENABLE_FTS3 is defined, omit this file.
ifcapable !fts5 {
finish_test
return
}
foreach_detail_mode $testprefix {
if {"%DETAIL%"=="none"} continue
do_execsql_test 1.0 {
CREATE VIRTUAL TABLE o1 USING fts5(a, b, c, detail=%DETAIL%);
INSERT INTO o1(o1, rank) VALUES('pgsz', 32);
WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<60 )
INSERT INTO o1 SELECT 'A', 'B', 'C' FROM s;
WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<60 )
INSERT INTO o1 SELECT 'C', 'A', 'B' FROM s;
WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<60 )
INSERT INTO o1 SELECT 'B', 'C', 'A' FROM s;
}
do_faultsim_test 1 -faults int* -prep {
sqlite3 db test.db
} -body {
execsql { SELECT count(*) FROM o1('a') }
} -test {
faultsim_test_result {0 180} {1 {vtable constructor failed: o1}}
}
do_faultsim_test 2 -faults int* -prep {
sqlite3 db test.db
} -body {
execsql { SELECT * FROM o1('a:a AND {b c}:b') ORDER BY rank }
expr 1
} -test {
faultsim_test_result {0 1} {1 {vtable constructor failed: o1}}
}
do_faultsim_test 3 -faults int* -prep {
sqlite3 db test.db
} -body {
execsql { SELECT * FROM o1('{b c}:b NOT a:a') ORDER BY rank }
expr 1
} -test {
faultsim_test_result {0 1} {1 {vtable constructor failed: o1}}
}
do_faultsim_test 4 -faults int* -prep {
sqlite3 db test.db
} -body {
execsql { SELECT * FROM o1('b:b OR a:a') }
expr 1
} -test {
faultsim_test_result {0 1} {1 {vtable constructor failed: o1}}
}
do_faultsim_test 5 -faults int* -prep {
sqlite3 db test.db
} -body {
execsql { SELECT count(*) FROM o1('c:b') }
expr 1
} -test {
faultsim_test_result {0 1} {1 {vtable constructor failed: o1}}
}
}
finish_test
-1
View File
@@ -40,4 +40,3 @@ do_test 1.1 {
finish_test
+92
View File
@@ -0,0 +1,92 @@
# 2014 June 17
#
# The author disclaims copyright to this source code. In place of
# a legal notice, here is a blessing:
#
# May you do good and not evil.
# May you find forgiveness for yourself and forgive others.
# May you share freely, never taking more than you give.
#
#*************************************************************************
# This file implements regression tests for SQLite library. The
# focus of this script is testing the FTS5 module.
#
source [file join [file dirname [info script]] fts5_common.tcl]
return_if_no_fts5
set testprefix fts5fuzz1
#-------------------------------------------------------------------------
reset_db
do_catchsql_test 1.1 {
CREATE VIRTUAL TABLE f1 USING fts5(a b);
} {/1 {parse error in.*}/}
#-------------------------------------------------------------------------
reset_db
do_execsql_test 2.1 {
CREATE VIRTUAL TABLE f1 USING fts5(a, b);
INSERT INTO f1 VALUES('a b', 'c d');
INSERT INTO f1 VALUES('e f', 'a b');
}
do_execsql_test 2.2.1 {
SELECT rowid FROM f1('""');
} {}
do_execsql_test 2.2.2 {
SELECT rowid FROM f1('"" AND a');
} {}
do_execsql_test 2.2.3 {
SELECT rowid FROM f1('"" a');
} {1 2}
do_execsql_test 2.2.4 {
SELECT rowid FROM f1('"" OR a');
} {1 2}
do_execsql_test 2.3 {
SELECT a, b FROM f1('NEAR("")');
} {}
do_execsql_test 2.4 {
SELECT a, b FROM f1('NEAR("", 5)');
} {}
do_execsql_test 2.5 {
SELECT a, b FROM f1('NEAR("" c, 5)');
} {{a b} {c d}}
do_execsql_test 2.6 {
SELECT a, b FROM f1('NEAR("" c d, 5)');
} {{a b} {c d}}
do_execsql_test 2.7 {
SELECT a, b FROM f1('NEAR(c d, 5)');
} {{a b} {c d}}
do_execsql_test 2.8 {
SELECT rowid FROM f1('NEAR("a" "b", 5)');
} {1 2}
#-------------------------------------------------------------------------
reset_db
do_execsql_test 3.2 {
CREATE VIRTUAL TABLE f2 USING fts5(o, t, tokenize="ascii separators abc");
SELECT * FROM f2('a+4');
} {}
#-------------------------------------------------------------------------
reset_db
do_catchsql_test 4.1 {
CREATE VIRTUAL TABLE f2 USING fts5(o, t);
SELECT * FROM f2('(8 AND 9)`AND 10');
} {1 {fts5: syntax error near "`"}}
finish_test
+57 -39
View File
@@ -66,49 +66,67 @@ proc random_doc {vocab nWord} {
foreach_detail_mode $testprefix {
set vocab [build_vocab1]
db func r random_doc
do_execsql_test 1.0 {
CREATE VIRTUAL TABLE eee USING fts5(e, ee, detail=%DETAIL%);
BEGIN;
WITH ii(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM ii WHERE i<100)
INSERT INTO eee SELECT r($vocab, 5), r($vocab, 7) FROM ii;
INSERT INTO eee(eee) VALUES('integrity-check');
COMMIT;
INSERT INTO eee(eee) VALUES('integrity-check');
}
set hash [sqlite3_fts5_token_hash 1024 xyz]
set vocab [build_vocab1 -prefix xyz -hash $hash]
lappend vocab xyz
do_execsql_test 1.1 {
CREATE VIRTUAL TABLE vocab USING fts5vocab(eee, 'row');
BEGIN;
}
do_test 1.2 {
for {set i 1} {$i <= 100} {incr i} {
execsql { INSERT INTO eee VALUES( r($vocab, 5), r($vocab, 7) ) }
}
} {}
set vocab [build_vocab1]
db func r random_doc
do_test 1.3 {
db eval { SELECT term, doc FROM vocab } {
set nRow [db one {SELECT count(*) FROM eee WHERE eee MATCH $term}]
if {$nRow != $doc} {
error "term=$term fts5vocab=$doc cnt=$nRow"
}
do_execsql_test 1.0 {
CREATE VIRTUAL TABLE eee USING fts5(e, ee, detail=%DETAIL%);
BEGIN;
WITH ii(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM ii WHERE i<100)
INSERT INTO eee SELECT r($vocab, 5), r($vocab, 7) FROM ii;
INSERT INTO eee(eee) VALUES('integrity-check');
COMMIT;
INSERT INTO eee(eee) VALUES('integrity-check');
}
set hash [sqlite3_fts5_token_hash 1024 xyz]
set vocab [build_vocab1 -prefix xyz -hash $hash]
lappend vocab xyz
do_execsql_test 1.1 {
CREATE VIRTUAL TABLE vocab USING fts5vocab(eee, 'row');
BEGIN;
}
do_test 1.2 {
for {set i 1} {$i <= 100} {incr i} {
execsql { INSERT INTO eee VALUES( r($vocab, 5), r($vocab, 7) ) }
}
} {}
do_test 1.3 {
db eval { SELECT term, doc FROM vocab } {
set nRow [db one {SELECT count(*) FROM eee WHERE eee MATCH $term}]
if {$nRow != $doc} {
error "term=$term fts5vocab=$doc cnt=$nRow"
}
}
set {} {}
} {}
do_execsql_test 1.4 {
COMMIT;
INSERT INTO eee(eee) VALUES('integrity-check');
}
set {} {}
} {}
do_execsql_test 1.4 {
COMMIT;
INSERT INTO eee(eee) VALUES('integrity-check');
}
#-----------------------------------------------------------------------
# Add a small and very large token with the same hash value to an
# empty table. At one point this would provoke an asan error.
#
do_test 2.0 {
set big [string repeat 12345 40]
set hash [sqlite3_fts5_token_hash 1024 $big]
while {1} {
set small [random_token]
if {[sqlite3_fts5_token_hash 1024 $small]==$hash} break
}
execsql { CREATE VIRTUAL TABLE t2 USING fts5(x, detail=%DETAIL%) }
breakpoint
execsql {
INSERT INTO t2 VALUES($small || ' ' || $big);
}
} {}
} ;# foreach_detail_mode
finish_test
-1
View File
@@ -210,4 +210,3 @@ foreach {tn pgsz} {
}
finish_test
+72
View File
@@ -0,0 +1,72 @@
# 2017 Feb 27
#
# The author disclaims copyright to this source code. In place of
# a legal notice, here is a blessing:
#
# May you do good and not evil.
# May you find forgiveness for yourself and forgive others.
# May you share freely, never taking more than you give.
#
#***********************************************************************
#
# Tests of the last_insert_rowid functionality with fts5.
#
source [file join [file dirname [info script]] fts5_common.tcl]
set testprefix fts5lastrowid
# If SQLITE_ENABLE_FTS5 is defined, omit this file.
ifcapable !fts5 {
finish_test
return
}
do_execsql_test 1.0 {
CREATE VIRTUAL TABLE t1 USING fts5(str);
}
do_execsql_test 1.1 {
INSERT INTO t1 VALUES('one string');
INSERT INTO t1 VALUES('two string');
INSERT INTO t1 VALUES('three string');
SELECT last_insert_rowid();
} {3}
do_execsql_test 1.2 {
BEGIN;
INSERT INTO t1 VALUES('one string');
INSERT INTO t1 VALUES('two string');
INSERT INTO t1 VALUES('three string');
COMMIT;
SELECT last_insert_rowid();
} {6}
do_execsql_test 1.3 {
INSERT INTO t1(rowid, str) VALUES(-22, 'some more text');
SELECT last_insert_rowid();
} {-22}
do_execsql_test 1.4 {
BEGIN;
INSERT INTO t1(rowid, str) VALUES(45, 'some more text');
INSERT INTO t1(rowid, str) VALUES(46, 'some more text');
INSERT INTO t1(rowid, str) VALUES(222, 'some more text');
SELECT last_insert_rowid();
COMMIT;
SELECT last_insert_rowid();
} {222 222}
do_execsql_test 1.5 {
CREATE TABLE x1(x);
INSERT INTO x1 VALUES('john'), ('paul'), ('george'), ('ringo');
INSERT INTO t1 SELECT x FROM x1;
SELECT last_insert_rowid();
} {226}
do_execsql_test 1.6 {
INSERT INTO t1(rowid, str) SELECT rowid+10, x FROM x1;
SELECT last_insert_rowid();
} {14}
finish_test
+43
View File
@@ -0,0 +1,43 @@
# 2014 June 17
#
# The author disclaims copyright to this source code. In place of
# a legal notice, here is a blessing:
#
# May you do good and not evil.
# May you find forgiveness for yourself and forgive others.
# May you share freely, never taking more than you give.
#
#*************************************************************************
# This file implements regression tests for SQLite library. The
# focus of this script is testing the FTS5 module.
#
source [file join [file dirname [info script]] fts5_common.tcl]
set testprefix fts5leftjoin
# If SQLITE_ENABLE_FTS5 is not defined, omit this file.
ifcapable !fts5 {
finish_test
return
}
do_execsql_test 1.0 {
CREATE VIRTUAL TABLE vt USING fts5(x);
INSERT INTO vt VALUES('abc');
INSERT INTO vt VALUES('xyz');
CREATE TABLE t1(a INTEGER PRIMARY KEY);
INSERT INTO t1 VALUES(1), (2);
}
do_execsql_test 1.1 {
SELECT * FROM t1 LEFT JOIN (
SELECT rowid AS rrr, * FROM vt WHERE vt MATCH 'abc'
) ON t1.a = rrr
} {1 1 abc 2 {} {}}
do_execsql_test 1.2 {
SELECT * FROM t1 LEFT JOIN vt ON (vt MATCH 'abc')
} {1 abc 2 abc}
finish_test
+24 -1
View File
@@ -467,5 +467,28 @@ do_execsql_test 12.1 {
} ;# foreach_detail_mode
finish_test
#-------------------------------------------------------------------------
# Test that a bad fts5() return is detected
#
reset_db
proc xyz {} {}
db func fts5 -argcount 0 xyz
do_test 13.1 {
list [catch { sqlite3_fts5_register_matchinfo db } msg] $msg
} {1 SQLITE_ERROR}
#-------------------------------------------------------------------------
# Test that an invalid matchinfo() flag is detected
#
reset_db
sqlite3_fts5_register_matchinfo db
do_execsql_test 14.1 {
CREATE VIRTUAL TABLE x1 USING fts5(z);
INSERT INTO x1 VALUES('a b c a b c a b c');
} {}
do_catchsql_test 14.2 {
SELECT matchinfo(x1, 'd') FROM x1('a b c');
} {1 {unrecognized matchinfo flag: d}}
finish_test
+59 -10
View File
@@ -45,7 +45,7 @@ proc do_merge1_test {testname nRowPerSeg} {
WITH ii(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM ii WHERE i<$::nRowPerSeg)
INSERT INTO x8 SELECT repeat('x y ', i % 16) FROM ii;
INSERT INTO x8(x8, rank) VALUES('automerge', 2);
INSERT INTO x8(x8, rank) VALUES('usermerge', 2);
}
for {set tn 1} {[lindex [fts5_level_segs x8] 0]>0} {incr tn} {
@@ -84,9 +84,9 @@ proc do_merge2_test {testname nRow} {
execsql { INSERT INTO x8 VALUES( rnddoc(($i%16) + 5) ) }
while {[not_merged x8]} {
execsql {
INSERT INTO x8(x8, rank) VALUES('automerge', 2);
INSERT INTO x8(x8, rank) VALUES('usermerge', 2);
INSERT INTO x8(x8, rank) VALUES('merge', 1);
INSERT INTO x8(x8, rank) VALUES('automerge', 16);
INSERT INTO x8(x8, rank) VALUES('usermerge', 16);
INSERT INTO x8(x8) VALUES('integrity-check');
}
}
@@ -104,9 +104,9 @@ do_merge2_test 2.2 10
do_merge2_test 2.3 20
#-------------------------------------------------------------------------
# Test that an auto-merge will complete any merge that has already been
# Test that a merge will complete any merge that has already been
# started, even if the number of input segments is less than the current
# value of the 'automerge' configuration parameter.
# value of the 'usermerge' configuration parameter.
#
db func rnddoc fts5_rnddoc
@@ -119,7 +119,7 @@ do_execsql_test 3.1 {
}
do_test 3.2 {
execsql {
INSERT INTO x8(x8, rank) VALUES('automerge', 4);
INSERT INTO x8(x8, rank) VALUES('usermerge', 4);
INSERT INTO x8(x8, rank) VALUES('merge', 1);
}
fts5_level_segs x8
@@ -127,14 +127,14 @@ do_test 3.2 {
do_test 3.3 {
execsql {
INSERT INTO x8(x8, rank) VALUES('automerge', 2);
INSERT INTO x8(x8, rank) VALUES('usermerge', 2);
INSERT INTO x8(x8, rank) VALUES('merge', 1);
}
fts5_level_segs x8
} {2 1}
do_test 3.4 {
execsql { INSERT INTO x8(x8, rank) VALUES('automerge', 4) }
execsql { INSERT INTO x8(x8, rank) VALUES('usermerge', 4) }
while {[not_merged x8]} {
execsql { INSERT INTO x8(x8, rank) VALUES('merge', 1) }
}
@@ -176,7 +176,7 @@ foreach {tn pgsz} {
INSERT INTO x8 SELECT mydoc() FROM ii;
WITH ii(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM ii WHERE i<100)
INSERT INTO x8 SELECT mydoc() FROM ii;
INSERT INTO x8(x8, rank) VALUES('automerge', 2);
INSERT INTO x8(x8, rank) VALUES('usermerge', 2);
}
set expect [mycount]
@@ -190,5 +190,54 @@ foreach {tn pgsz} {
# db eval {SELECT fts5_decode(rowid, block) AS r FROM x8_data} { puts $r }
}
finish_test
#-------------------------------------------------------------------------
# Test that the 'merge' command does not modify the database if there is
# no work to do.
do_execsql_test 5.1 {
CREATE VIRTUAL TABLE x9 USING fts5(one, two);
INSERT INTO x9(x9, rank) VALUES('pgsz', 32);
INSERT INTO x9(x9, rank) VALUES('automerge', 2);
INSERT INTO x9(x9, rank) VALUES('usermerge', 2);
INSERT INTO x9 VALUES(rnddoc(100), rnddoc(100));
INSERT INTO x9 VALUES(rnddoc(100), rnddoc(100));
INSERT INTO x9 VALUES(rnddoc(100), rnddoc(100));
INSERT INTO x9 VALUES(rnddoc(100), rnddoc(100));
INSERT INTO x9 VALUES(rnddoc(100), rnddoc(100));
INSERT INTO x9 VALUES(rnddoc(100), rnddoc(100));
INSERT INTO x9 VALUES(rnddoc(100), rnddoc(100));
INSERT INTO x9 VALUES(rnddoc(100), rnddoc(100));
}
do_test 5.2 {
while 1 {
set nChange [db total_changes]
execsql { INSERT INTO x9(x9, rank) VALUES('merge', 1); }
set nChange [expr [db total_changes] - $nChange]
#puts $nChange
if {$nChange<2} break
}
} {}
#--------------------------------------------------------------------------
# Test that running 'merge' on an empty database does not cause a
# problem.
#
reset_db
do_execsql_test 6.0 {
CREATE VIRTUAL TABLE g1 USING fts5(a, b);
}
do_execsql_test 6.1 {
INSERT INTO g1(g1, rank) VALUES('merge', 10);
}
do_execsql_test 6.2 {
INSERT INTO g1(g1, rank) VALUES('merge', -10);
}
do_execsql_test 6.3 {
INSERT INTO g1(g1) VALUES('integrity-check');
}
finish_test
+2 -4
View File
@@ -13,7 +13,8 @@
#
source [file join [file dirname [info script]] fts5_common.tcl]
set testprefix fts5merge
set testprefix fts5merge2
return_if_no_fts5
proc dump_structure {} {
db eval {SELECT fts5_decode(id, block) AS t FROM t1_data WHERE id=10} {
@@ -26,8 +27,6 @@ proc dump_structure {} {
foreach_detail_mode $testprefix {
if {[detail_is_none]==0} continue
do_execsql_test 1.0 {
CREATE VIRTUAL TABLE t1 USING fts5(x, detail=%DETAIL%);
INSERT INTO t1(t1, rank) VALUES('pgsz', 32);
@@ -56,4 +55,3 @@ do_execsql_test 1.2 {
}
finish_test
+47
View File
@@ -0,0 +1,47 @@
# 2016 March 17
#
# The author disclaims copyright to this source code. In place of
# a legal notice, here is a blessing:
#
# May you do good and not evil.
# May you find forgiveness for yourself and forgive others.
# May you share freely, never taking more than you give.
#
#*************************************************************************
#
source [file join [file dirname [info script]] fts5_common.tcl]
source $testdir/lock_common.tcl
set testprefix fts5multiclient
return_if_no_fts5
foreach_detail_mode $testprefix {
do_multiclient_test tn {
do_test 1.$tn.1 {
sql1 { CREATE VIRTUAL TABLE t1 USING fts5(x, detail=%DETAIL%) }
sql1 { INSERT INTO t1 VALUES('a b c') }
sql2 { SELECT rowid FROM t1('b') }
} {1}
do_test 1.$tn.2 {
sql2 { INSERT INTO t1 VALUES('a b c') }
sql1 { SELECT rowid FROM t1('b') }
} {1 2}
do_test 1.$tn.3 {
sql2 { INSERT INTO t1 VALUES('a b c') }
sql1 { SELECT rowid FROM t1('b') }
} {1 2 3}
do_test 1.$tn.4 {
sql2 { INSERT INTO t1 VALUES('a b c') }
sql1 { INSERT INTO t1 VALUES('a b c') }
sql3 { INSERT INTO t1(t1) VALUES('integrity-check') }
} {}
};# do_multiclient_test
};# foreach_detail_mode
finish_test
-1
View File
@@ -68,4 +68,3 @@ do_near_test 1.25 "a b c d e f g h i" { NEAR(i a+b+c+d b+c, 4) } 0
finish_test
-1
View File
@@ -178,4 +178,3 @@ do_execsql_test 4.3.1 {
do_test 4.2.2 { fts5_level_segs ttt } {3}
finish_test
+45 -3
View File
@@ -20,6 +20,12 @@ ifcapable !fts5 {
return
}
#
# 1.* - Warm body tests for index optimization using ('optimize')
#
# 2.* - Warm body tests for index optimization using ('merge', -1)
#
proc rnddoc {nWord} {
set vocab {a b c d e f g h i j k l m n o p q r s t u v w x y z}
set nVocab [llength $vocab]
@@ -30,14 +36,12 @@ proc rnddoc {nWord} {
return $ret
}
foreach {tn nStep} {
1 2
2 10
3 50
4 500
} {
if {$tn!=4} continue
reset_db
db func rnddoc rnddoc
do_execsql_test 1.$tn.1 {
@@ -60,7 +64,45 @@ if {$tn!=4} continue
do_execsql_test 1.$tn.5 {
INSERT INTO t1(t1) VALUES('integrity-check');
}
do_test 1.$tn.6 { fts5_segcount t1 } 1
}
finish_test
foreach {tn nStep} {
1 2
2 10
3 50
4 500
} {
reset_db
db func rnddoc rnddoc
do_execsql_test 1.$tn.1 {
CREATE VIRTUAL TABLE t1 USING fts5(x, y);
}
do_test 2.$tn.2 {
for {set i 0} {$i < $nStep} {incr i} {
execsql { INSERT INTO t1 VALUES( rnddoc(5), rnddoc(5) ) }
}
} {}
do_execsql_test 2.$tn.3 {
INSERT INTO t1(t1) VALUES('integrity-check');
}
do_test 2.$tn.4 {
execsql { INSERT INTO t1(t1, rank) VALUES('merge', -1) }
while 1 {
set c [db total_changes]
execsql { INSERT INTO t1(t1, rank) VALUES('merge', 1) }
set c [expr [db total_changes]-$c]
if {$c<2} break
}
} {}
do_execsql_test 2.$tn.5 {
INSERT INTO t1(t1) VALUES('integrity-check');
}
do_test 2.$tn.6 { fts5_segcount t1 } 1
}
finish_test

Some files were not shown because too many files have changed in this diff Show More