Accepting request 765985 from server:database

OBS-URL: https://build.opensuse.org/request/show/765985
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/sqlite3?expand=0&rev=116
This commit is contained in:
Dominique Leuenberger 2020-01-23 15:10:23 +00:00 committed by Git OBS Bridge
commit 4e0e4b48ee
12 changed files with 251 additions and 62 deletions

View File

@ -0,0 +1,23 @@
Index: src/expr.c
==================================================================
--- src/expr.c
+++ src/expr.c
@@ -5229,12 +5229,16 @@
** ordinary join.
*/
int sqlite3ExprImpliesNonNullRow(Expr *p, int iTab){
Walker w;
p = sqlite3ExprSkipCollateAndLikely(p);
- if( p && p->op==TK_NOTNULL ){
+ if( p==0 ) return 0;
+ if( p->op==TK_NOTNULL ){
p = p->pLeft;
+ }else if( p->op==TK_AND ){
+ if( sqlite3ExprImpliesNonNullRow(p->pLeft, iTab) ) return 1;
+ p = p->pRight;
}
w.xExprCallback = impliesNotNullRow;
w.xSelectCallback = 0;
w.xSelectCallback2 = 0;
w.eCode = 0;

View File

@ -0,0 +1,91 @@
Index: src/expr.c
==================================================================
--- src/expr.c
+++ src/expr.c
@@ -5166,14 +5166,15 @@
return WRC_Abort;
}
return WRC_Prune;
case TK_AND:
- if( sqlite3ExprImpliesNonNullRow(pExpr->pLeft, pWalker->u.iCur)
- && sqlite3ExprImpliesNonNullRow(pExpr->pRight, pWalker->u.iCur)
- ){
- pWalker->eCode = 1;
+ assert( pWalker->eCode==0 );
+ sqlite3WalkExpr(pWalker, pExpr->pLeft);
+ if( pWalker->eCode ){
+ pWalker->eCode = 0;
+ sqlite3WalkExpr(pWalker, pExpr->pRight);
}
return WRC_Prune;
case TK_BETWEEN:
sqlite3WalkExpr(pWalker, pExpr->pLeft);
@@ -5228,19 +5229,12 @@
** ordinary join.
*/
int sqlite3ExprImpliesNonNullRow(Expr *p, int iTab){
Walker w;
p = sqlite3ExprSkipCollateAndLikely(p);
- while( p ){
- if( p->op==TK_NOTNULL ){
- p = p->pLeft;
- }else if( p->op==TK_AND ){
- if( sqlite3ExprImpliesNonNullRow(p->pLeft, iTab) ) return 1;
- p = p->pRight;
- }else{
- break;
- }
+ if( p && p->op==TK_NOTNULL ){
+ p = p->pLeft;
}
w.xExprCallback = impliesNotNullRow;
w.xSelectCallback = 0;
w.xSelectCallback2 = 0;
w.eCode = 0;
Index: test/join.test
==================================================================
--- test/join.test
+++ test/join.test
@@ -902,8 +902,38 @@
} {1 {}}
do_execsql_test join-18.4 {
SELECT NOT(v0.a IS FALSE) FROM v0
} {1}
+
+#-------------------------------------------------------------------------
+reset_db
+do_execsql_test join-19.0 {
+ CREATE TABLE t1(a);
+ CREATE TABLE t2(b);
+ INSERT INTO t1(a) VALUES(0);
+ CREATE VIEW v0(c) AS SELECT t2.b FROM t1 LEFT JOIN t2;
+}
+
+do_execsql_test join-19.1 {
+ SELECT * FROM v0 WHERE v0.c NOTNULL NOTNULL;
+} {{}}
+
+do_execsql_test join-19.2 {
+ SELECT * FROM t1 LEFT JOIN t2
+} {0 {}}
+
+do_execsql_test join-19.3 {
+ SELECT * FROM t1 LEFT JOIN t2 WHERE (b IS NOT NULL) IS NOT NULL;
+} {0 {}}
+
+do_execsql_test join-19.4 {
+ SELECT (b IS NOT NULL) IS NOT NULL FROM t1 LEFT JOIN t2
+} {1}
+
+do_execsql_test join-19.5 {
+ SELECT * FROM t1 LEFT JOIN t2 WHERE
+ (b IS NOT NULL AND b IS NOT NULL) IS NOT NULL;
+} {0 {}}
finish_test

View File

@ -0,0 +1,24 @@
Index: src/expr.c
==================================================================
--- src/expr.c
+++ src/expr.c
@@ -5232,13 +5232,15 @@
Walker w;
p = sqlite3ExprSkipCollateAndLikely(p);
if( p==0 ) return 0;
if( p->op==TK_NOTNULL ){
p = p->pLeft;
- }else if( p->op==TK_AND ){
- if( sqlite3ExprImpliesNonNullRow(p->pLeft, iTab) ) return 1;
- p = p->pRight;
+ }else{
+ while( p->op==TK_AND ){
+ if( sqlite3ExprImpliesNonNullRow(p->pLeft, iTab) ) return 1;
+ p = p->pRight;
+ }
}
w.xExprCallback = impliesNotNullRow;
w.xSelectCallback = 0;
w.xSelectCallback2 = 0;
w.eCode = 0;

View File

@ -0,0 +1,12 @@
--- src/os_unix.c_orig 2019-12-26 00:56:55.810897741 +0100
+++ src/os_unix.c 2019-12-26 00:59:29.904449135 +0100
@@ -6259,7 +6259,8 @@
if( flags==SQLITE_ACCESS_EXISTS ){
struct stat buf;
- *pResOut = (0==osStat(zPath, &buf) && buf.st_size>0);
+ *pResOut = (0==osStat(zPath, &buf) &&
+ ((buf.st_size>0) || S_ISDIR(buf.st_mode)));
}else{
*pResOut = osAccess(zPath, W_OK|R_OK)==0;
}

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4fb9cc6d1f29560300692029089ca1d2feb7c397df6f6eb4c2998856d3bc2929
size 9415641

3
sqlite-doc-3300100.zip Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:10f585ad8c631c47187510a895944ac47e8f6f23b1171aebc8f8ce6c0c650415
size 9485342

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a1533d97504e969ca766da8ff393e71edd70798564813fc2620b0708944c8817
size 12557725

3
sqlite-src-3300100.zip Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4690370737189149c9e8344414aa371f89a70e3744ba317cef1a49fb0ee81ce1
size 12648162

View File

@ -1,46 +0,0 @@
--- src/analyze.c.orig
+++ src/analyze.c
@@ -1497,7 +1497,9 @@ static void decodeIntArray(
if( sqlite3_strglob("unordered*", z)==0 ){
pIndex->bUnordered = 1;
}else if( sqlite3_strglob("sz=[0-9]*", z)==0 ){
- pIndex->szIdxRow = sqlite3LogEst(sqlite3Atoi(z+3));
+ int sz = sqlite3Atoi(z+3);
+ if( sz<2 ) sz = 2;
+ pIndex->szIdxRow = sqlite3LogEst(sz);
}else if( sqlite3_strglob("noskipscan*", z)==0 ){
pIndex->noSkipScan = 1;
}
--- src/where.c.orig
+++ src/where.c
@@ -2668,6 +2668,7 @@ static int whereLoopAddBtreeIndex(
** it to pNew->rRun, which is currently set to the cost of the index
** seek only. Then, if this is a non-covering index, add the cost of
** visiting the rows in the main table. */
+ assert( pSrc->pTab->szTabRow>0 );
rCostIdx = pNew->nOut + 1 + (15*pProbe->szIdxRow)/pSrc->pTab->szTabRow;
pNew->rRun = sqlite3LogEstAdd(rLogSize, rCostIdx);
if( (pNew->wsFlags & (WHERE_IDX_ONLY|WHERE_IPK))==0 ){
--- test/analyzeC.test.orig
+++ test/analyzeC.test
@@ -132,6 +132,20 @@ do_execsql_test 4.3 {
SELECT count(a) FROM t1;
} {/.*INDEX t1ca.*/}
+# 2019-08-15.
+# Ticket https://www.sqlite.org/src/tktview/e4598ecbdd18bd82945f602901
+# The sz=N parameter in the sqlite_stat1 table needs to have a value of
+# 2 or more to avoid a division by zero in the query planner.
+#
+do_execsql_test 4.4 {
+ DROP TABLE IF EXISTS t44;
+ CREATE TABLE t44(a PRIMARY KEY);
+ INSERT INTO sqlite_stat1 VALUES('t44',null,'sz=0');
+ ANALYZE sqlite_master;
+ SELECT 0 FROM t44 WHERE a IN(1,2,3);
+} {}
+
+
# The sz=NNN parameter works even if there is other extraneous text
# in the sqlite_stat1.stat column.

View File

@ -0,0 +1,18 @@
Index: src/date.c
==================================================================
--- src/date.c
+++ src/date.c
@@ -686,11 +686,11 @@
*/
if( sqlite3_stricmp(z, "unixepoch")==0 && p->rawS ){
r = p->s*1000.0 + 210866760000000.0;
if( r>=0.0 && r<464269060800000.0 ){
clearYMD_HMS_TZ(p);
- p->iJD = (sqlite3_int64)r;
+ p->iJD = (sqlite3_int64)(r + 0.5);
p->validJD = 1;
p->rawS = 0;
rc = 0;
}
}

View File

@ -1,3 +1,52 @@
-------------------------------------------------------------------
Fri Jan 17 14:29:39 UTC 2020 - Stefan Brüns <stefan.bruens@rwth-aachen.de>
- Fix regression found when running python-Django/Djano1 testsuite:
+ 7833feecfe-Prevent-SQLite-from-bad-NULL-assumption.patch
+ 548082dfab-Improvements-to-the-LEFT-JOIN.patch
+ 8a39167bd2-Further-improvements-to-LEFT-JOIN.patch
- Fix check for existing dirs, triggers when running the testsuite
on BTRFS or XFS:
+ fix_dir_exists_on_btrfs.patch
- Fix truncation/bad rounding of timestamps in SQLite strftime
function, exposed when running testsuite on i586:
+ sqlite3-avoid-truncation-error.patch
-------------------------------------------------------------------
Fri Oct 11 15:05:00 UTC 2019 - Andreas Stieger <andreas.stieger@gmx.de>
- sqlite 3.30.1:
* fix a segfault for nested queries that use the FILTER clause
ib aggregate functions (introduced in 3.30.0)
-------------------------------------------------------------------
Sun Oct 6 15:43:57 UTC 2019 - Andreas Stieger <andreas.stieger@gmx.de>
- update to 3.30.0:
* Add support for the FILTER clause on aggregate functions
* Add support for the NULLS FIRST and NULLS LAST syntax in ORDER BY clauses
* The index_info and index_xinfo pragmas are enhanced to provide
information about the on-disk representation of WITHOUT ROWID tables
* Add the sqlite3_drop_modules() interface, allowing applications
to disable automatically loaded virtual tables that they do not need
* Improvements to the .recover dot-command in the CLI so that it
recovers more content from corrupt database files
* Enhance the RBU extension to support indexes on expressions
* Change the schema parser so that it will error out if any of
the type, name, and tbl_name columns of the sqlite_master table
have been corrupted and the database connection is not in
writable_schema mode.
* The PRAGMA function_list, PRAGMA module_list, and PRAGMA
pragma_list commands are now enabled in all builds by default
* Add the SQLITE_DBCONFIG_ENABLE_VIEW option for sqlite3_db_config().
* Added the TCL Interface config method in order to be able to
disable SQLITE_DBCONFIG_ENABLE_VIEW as well as control other
sqlite3_db_config() options from TCL.
* Added the SQLITE_DIRECTONLY flag for application-defined SQL
functions to prevent those functions from being used inside
triggers and views
- drop sqlite3-CVE-2019-16168.patch, upstream
-------------------------------------------------------------------
Tue Sep 10 15:17:35 UTC 2019 - Reinhard Max <max@suse.com>

View File

@ -1,7 +1,7 @@
#
# spec file for package sqlite3
#
# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
# Copyright (c) 2020 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@ -16,10 +16,11 @@
#
%bcond_with icu
%define oname sqlite
%define tarversion 3290000
%define tarversion 3300100
Name: sqlite3
Version: 3.29.0
Version: 3.30.1
Release: 0
Summary: Embeddable SQL Database Engine
License: SUSE-Public-Domain
@ -28,8 +29,20 @@ URL: http://www.sqlite.org/
Source0: http://www.sqlite.org/2019/sqlite-src-%{tarversion}.zip
Source1: baselibs.conf
Source2: http://www.sqlite.org/2019/sqlite-doc-%{tarversion}.zip
Patch0: sqlite3-CVE-2019-16168.patch
# PATCH-FIX-UPSTREAM -- Fix errors with NULL
Patch0: 7833feecfe-Prevent-SQLite-from-bad-NULL-assumption.patch
# PATCH-FIX-UPSTREAM -- Fix errors in LEFT JOIN
Patch1: 548082dfab-Improvements-to-the-LEFT-JOIN.patch
# PATCH-FIX-UPSTREAM -- Fix errors in LEFT JOIN
Patch2: 8a39167bd2-Further-improvements-to-LEFT-JOIN.patch
# PATCH-FIX-UPSTREAM -- Fix incorrect check of stat.size for directories
Patch3: fix_dir_exists_on_btrfs.patch
# PATCH-FIX-OPENSUSE -- Fix error introduced by rounding and truncation, mostly visible on x86 / 80 bit floats
Patch4: sqlite3-avoid-truncation-error.patch
BuildRequires: automake
%if %{with icu}
BuildRequires: libicu-devel
%endif
BuildRequires: libtool
BuildRequires: pkgconfig
BuildRequires: readline-devel
@ -104,13 +117,19 @@ other documentation found on sqlite.org. The files can be found in
%prep
%setup -q -n sqlite-src-%{tarversion} -a2
%patch0
%patch0 -p0
%patch1 -p0
%patch2 -p0
%patch3 -p0
%patch4 -p0
rm -v sqlite-doc-%{tarversion}/releaselog/current.html
ln -sv `echo %{version} | sed "s/\./_/g"`.html sqlite-doc-%{tarversion}/releaselog/current.html
find -type f -name sqlite.css~ -delete
cmp sqlite-doc-%{tarversion}/fileformat{,2}.html && ln -sf fileformat.html sqlite-doc-%{tarversion}/fileformat2.html
%build
export LIBS="$LIBS -lm "
export LIBS="$LIBS -lm %{?with_icu:-licuuc -licui18n}"
export CFLAGS="%{optflags} \
-DSQLITE_ENABLE_API_ARMOR \
-DSQLITE_ENABLE_COLUMN_METADATA \
@ -119,6 +138,9 @@ export CFLAGS="%{optflags} \
-DSQLITE_ENABLE_FTS3 \
-DSQLITE_ENABLE_FTS4 \
-DSQLITE_ENABLE_FTS5 \
%if %{with icu}
-DSQLITE_ENABLE_ICU \
%endif
-DSQLITE_ENABLE_JSON1 \
-DSQLITE_ENABLE_RBU \
-DSQLITE_ENABLE_RTREE \
@ -140,12 +162,8 @@ export CFLAGS="%{optflags} \
make %{?_smp_mflags} sqlite3.c
make %{?_smp_mflags}
%ifnarch %{ix86}
# Tests fail due to slight precision variation caused by FPU being 80-bit internally.
# see https://bugs.gentoo.org/628242
%check
make %{?_smp_mflags} test
%endif
%install
%make_install