Compare commits

...

4 Commits

Author SHA1 Message Date
drh ffdcd9ff55 Small tweaks to the query planner to get it to try harder to use an index
for sorting and to avoid using automatic indexes on constant terms.

FossilOrigin-Name: 2d9de154f8f398d66693a4bc35eef1353ae61728
2014-06-17 15:13:04 +00:00
drh bc84c8750b Version 3.8.3.1
FossilOrigin-Name: ea3317a4803d71d88183b29f1d3086f46d68a00e
2014-02-11 14:52:19 +00:00
drh 3fe1bd4c39 Increase the version number to 3.8.3.1.
FossilOrigin-Name: 3111df71b2a6bef08cf37c6e350f5accc506f9eb
2014-02-11 03:55:33 +00:00
drh f0e60f8c4a Make sure that virtual WHERE-clause terms do not get transformed into real
terms when processing set of OR-connected terms.
Fix for ticket [4c86b126f22ad].

FossilOrigin-Name: de635e09605acbeb319a36ce11c70ad328fa2556
2014-02-11 03:50:49 +00:00
7 changed files with 77 additions and 27 deletions
+1 -1
View File
@@ -1 +1 @@
3.8.3
3.8.3.1
Vendored
+9 -9
View File
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.62 for sqlite 3.8.3.
# Generated by GNU Autoconf 2.62 for sqlite 3.8.3.1.
#
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
@@ -743,8 +743,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
# Identity of this package.
PACKAGE_NAME='sqlite'
PACKAGE_TARNAME='sqlite'
PACKAGE_VERSION='3.8.3'
PACKAGE_STRING='sqlite 3.8.3'
PACKAGE_VERSION='3.8.3.1'
PACKAGE_STRING='sqlite 3.8.3.1'
PACKAGE_BUGREPORT=''
# Factoring default headers for most tests.
@@ -1483,7 +1483,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.8.3 to adapt to many kinds of systems.
\`configure' configures sqlite 3.8.3.1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1548,7 +1548,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of sqlite 3.8.3:";;
short | recursive ) echo "Configuration of sqlite 3.8.3.1:";;
esac
cat <<\_ACEOF
@@ -1664,7 +1664,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
sqlite configure 3.8.3
sqlite configure 3.8.3.1
generated by GNU Autoconf 2.62
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1678,7 +1678,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.8.3, which was
It was created by sqlite $as_me 3.8.3.1, which was
generated by GNU Autoconf 2.62. Invocation command line was
$ $0 $@
@@ -14021,7 +14021,7 @@ exec 6>&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.8.3, which was
This file was extended by sqlite $as_me 3.8.3.1, which was
generated by GNU Autoconf 2.62. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -14074,7 +14074,7 @@ Report bugs to <bug-autoconf@gnu.org>."
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_version="\\
sqlite config.status 3.8.3
sqlite config.status 3.8.3.1
configured by $0, generated by GNU Autoconf 2.62,
with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+10 -12
View File
@@ -1,12 +1,12 @@
C Fix\sa\sharmless\scompiler\swarning\sin\sVS2013.
D 2014-02-08T13:22:36.857
C Small\stweaks\sto\sthe\squery\splanner\sto\sget\sit\sto\stry\sharder\sto\suse\san\sindex\nfor\ssorting\sand\sto\savoid\susing\sautomatic\sindexes\son\sconstant\sterms.
D 2014-06-17T15:13:04.717
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
F Makefile.msc 6ff3ff2eef45c7dd309a8626ff7947b20bd387e7
F Makefile.vxworks db21ed42a01d5740e656b16f92cb5d8d5e5dd315
F README cd04a36fbc7ea56932a4052d7d0b7f09f27c33d6
F VERSION 8ed548d87d0a27fd7d7620476f9e25f9fa742d73
F VERSION 5b881e4f9e6d45eaf3c9d3fd5fe5de771d68fbef
F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
F addopcodes.awk 9eb448a552d5c0185cf62c463f9c173cedae3811
F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2
@@ -38,7 +38,7 @@ F autoconf/tea/win/rules.vc c511f222b80064096b705dbeb97060ee1d6b6d63
F config.guess 226d9a188c6196f3033ffc651cbc9dcee1a42977
F config.h.in 0921066a13130082764ab4ab6456f7b5bebe56de
F config.sub 9ebe4c3b3dab6431ece34f16828b594fb420da55
F configure 1673bc402f8fc95015f72c279adc5a9a668ee237 x
F configure 0ccf0c575cb8dfb42f410ce65f2c71c298da6a0e x
F configure.ac 4cf9f60785143fa141b10962ccc885d973792e9a
F contrib/sqlitecon.tcl 210a913ad63f9f991070821e599d600bd913e0ad
F doc/lemon.html 334dbf6621b8fb8790297ec1abf3cfa4621709d1
@@ -293,7 +293,7 @@ F src/vtab.c 21b932841e51ebd7d075e2d0ad1415dce8d2d5fd
F src/wal.c 7dc3966ef98b74422267e7e6e46e07ff6c6eb1b4
F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
F src/walker.c 11edb74d587bc87b33ca96a5173e3ec1b8389e45
F src/where.c 67ae3b5e97ecff36c70cb61ccc7d74cf228f1596
F src/where.c 9ec7ce024a5963a3c0b3f3234fbef5de53f08f54
F src/whereInt.h 96a75c61f1d2b9d4a8e4bb17d89deb0cf7cba358
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
@@ -869,6 +869,7 @@ F test/tkt-3998683a16.test 6d1d04d551ed1704eb3396ca87bb9ccc8c5c1eb7
F test/tkt-3a77c9714e.test b08bca26de1140bdf004a37716582a43d7bd8be8
F test/tkt-3fe897352e.test 27e26eb0f1811aeba4d65aba43a4c52e99da5e70
F test/tkt-4a03edc4c8.test 91c0e135888cdc3d4eea82406a44b05c8c1648d0
F test/tkt-4c86b126f2.test cbcc611becd0396890169ab23102dd70048bbc9a
F test/tkt-4dd95f6943.test 3d0ce415d2ee15d3d564121960016b9c7be79407
F test/tkt-54844eea3f.test a12b851128f46a695e4e378cca67409b9b8f5894
F test/tkt-5d863f876e.test c9f36ca503fa154a3655f92a69d2c30da1747bfa
@@ -1077,7 +1078,7 @@ F test/where4.test e9b9e2f2f98f00379e6031db6a6fca29bae782a2
F test/where5.test fdf66f96d29a064b63eb543e28da4dfdccd81ad2
F test/where6.test 5da5a98cec820d488e82708301b96cb8c18a258b
F test/where7.test 5a4b0abc207d71da4deecd734ad8579e8dd40aa8
F test/where8.test d2b4fd6d7b7c5d44f590182a05033d78a14c00a1
F test/where8.test 84033c4da466d90fe7ef0152661ff67fd218105f
F test/where8m.test da346596e19d54f0aba35ebade032a7c47d79739
F test/where9.test 4f3eab951353a3ae164befc521c777dfa903e46c
F test/whereA.test 4d253178d135ec46d1671e440cd8f2b916aa6e6b
@@ -1152,10 +1153,7 @@ F tool/vdbe-compress.tcl 0cf56e9263a152b84da86e75a5c0cdcdb7a47891
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
P e816dd924619db5f766de6df74ea2194f3e3b538
R 73e287cc1a6edbdb5e3e210fabc10684
T *branch * branch-3.8.3
T *sym-branch-3.8.3 *
T -sym-trunk *
P ea3317a4803d71d88183b29f1d3086f46d68a00e
R f3e3efe64172b5c947d66b04e17d9c81
U drh
Z 85563bddc8fc07f7442defb50aa2e866
Z ab6ad47f6438e43e215e120c654c4cf3
+1 -1
View File
@@ -1 +1 @@
35f2793db5eb58484554477a23f8320843ebcd71
2d9de154f8f398d66693a4bc35eef1353ae61728
+5 -2
View File
@@ -3314,7 +3314,9 @@ static Bitmask codeOneLoopStart(
Expr *pExpr = pWC->a[iTerm].pExpr;
if( &pWC->a[iTerm] == pTerm ) continue;
if( ExprHasProperty(pExpr, EP_FromJoin) ) continue;
if( pWC->a[iTerm].wtFlags & (TERM_ORINFO) ) continue;
testcase( pWC->a[iTerm].wtFlags & TERM_ORINFO );
testcase( pWC->a[iTerm].wtFlags & TERM_VIRTUAL );
if( pWC->a[iTerm].wtFlags & (TERM_ORINFO|TERM_VIRTUAL) ) continue;
if( (pWC->a[iTerm].eOperator & WO_ALL)==0 ) continue;
pExpr = sqlite3ExprDup(db, pExpr, 0);
pAndExpr = sqlite3ExprAnd(db, pAndExpr, pExpr);
@@ -4211,6 +4213,7 @@ static int whereLoopAddBtree(
WhereTerm *pWCEnd = pWC->a + pWC->nTerm;
for(pTerm=pWC->a; rc==SQLITE_OK && pTerm<pWCEnd; pTerm++){
if( pTerm->prereqRight & pNew->maskSelf ) continue;
if( sqlite3ExprIsConstant(pTerm->pExpr->pRight) ) continue;
if( termCanDriveIndex(pTerm, pSrc, 0) ){
pNew->u.btree.nEq = 1;
pNew->u.btree.nSkip = 0;
@@ -4970,7 +4973,7 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){
** number of output rows. The 48 is the expected size of a row to sort.
** FIXME: compute a better estimate of the 48 multiplier based on the
** result set expressions. */
rSortCost = nRowEst + estLog(nRowEst);
rSortCost = nRowEst + estLog(nRowEst) + 10;
WHERETRACE(0x002,("---- sort cost=%-3d\n", rSortCost));
}
+49
View File
@@ -0,0 +1,49 @@
# 2014-02-11
#
# 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. Specifically,
# it tests that ticket [4c86b126f22ad548fee0125337bdc9366912d9ac].
#
# When SQLite is compiled using SQLITE_ENABLE_STAT3 or SQLITE_ENABLE_STAT4,
# it gets the wrong answer...
#
# The problem was introduced in SQLite 3.8.1.
set testdir [file dirname $argv0]
source $testdir/tester.tcl
do_execsql_test tkt-4c86b126f2-1.1 {
CREATE TABLE nodes(
local_relpath TEXT PRIMARY KEY,
moved_to TEXT
);
INSERT INTO nodes VALUES('A',NULL);
INSERT INTO nodes VALUES('A/B',NULL);
INSERT INTO nodes VALUES('',NULL);
INSERT INTO nodes VALUES('A/B/C-move',NULL);
INSERT INTO nodes VALUES('A/B/C','A/B/C-move');
INSERT INTO nodes VALUES('A/B-move',NULL);
INSERT INTO nodes VALUES('A/B-move/C-move',NULL);
INSERT INTO nodes VALUES('A/B-move/C','x');
SELECT local_relpath, moved_to
FROM nodes
WHERE (local_relpath = 'A/B' OR
((local_relpath > 'A/B/') AND (local_relpath < 'A/B0')))
AND moved_to IS NOT NULL;
} {A/B/C A/B/C-move}
do_execsql_test tkt-4c86b126f2-2.1 {
CREATE TABLE t1(x TEXT UNIQUE, y TEXT UNIQUE, z);
INSERT INTO t1 VALUES('ghi','jkl','y');
SELECT * FROM t1 WHERE (x='ghi' OR y='jkl') AND z IS NOT NULL;
} {ghi jkl y}
finish_test
+2 -2
View File
@@ -210,7 +210,7 @@ do_test where8-3.4 {
do_test where8-3.5 {
execsql_status {
SELECT a, d FROM t1, t2 WHERE (a = 2 OR a = 3) AND (d = a OR e = 'sixteen')
SELECT a, d FROM t1, t2 WHERE (a = 2 OR a = 3) AND (d = +a OR e = 'sixteen')
ORDER BY +a, +d;
}
} {2 2 2 4 3 3 3 4 0 1}
@@ -222,7 +222,7 @@ do_test where8-3.6 {
execsql_status {
SELECT a, d
FROM t1, t2
WHERE (a = 2 OR a = 3) AND (d = a OR e = 'sixteen')
WHERE (a = 2 OR a = 3) AND (d = +a OR e = 'sixteen')
ORDER BY t1.rowid
}
} {2 2 2 4 3 3 3 4 0 1}