Accepting request 765315 from home:StefanBruens:branches:openSUSE:Factory:Staging:O
Fix failing Django/Django1 testsuites Fix some more errors OBS-URL: https://build.opensuse.org/request/show/765315 OBS-URL: https://build.opensuse.org/package/show/server:database/sqlite3?expand=0&rev=236
This commit is contained in:
parent
5ce7153b11
commit
e5d5862acb
23
548082dfab-Improvements-to-the-LEFT-JOIN.patch
Normal file
23
548082dfab-Improvements-to-the-LEFT-JOIN.patch
Normal 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;
|
||||
|
91
7833feecfe-Prevent-SQLite-from-bad-NULL-assumption.patch
Normal file
91
7833feecfe-Prevent-SQLite-from-bad-NULL-assumption.patch
Normal 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
|
||||
|
||||
|
24
8a39167bd2-Further-improvements-to-LEFT-JOIN.patch
Normal file
24
8a39167bd2-Further-improvements-to-LEFT-JOIN.patch
Normal 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;
|
||||
|
12
fix_dir_exists_on_btrfs.patch
Normal file
12
fix_dir_exists_on_btrfs.patch
Normal 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;
|
||||
}
|
18
sqlite3-avoid-truncation-error.patch
Normal file
18
sqlite3-avoid-truncation-error.patch
Normal 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;
|
||||
}
|
||||
}
|
||||
|
@ -1,147 +0,0 @@
|
||||
Index: sqlite-src-3300100/ext/fts5/test/fts5misc.test
|
||||
===================================================================
|
||||
--- sqlite-src-3300100.orig/ext/fts5/test/fts5misc.test
|
||||
+++ sqlite-src-3300100/ext/fts5/test/fts5misc.test
|
||||
@@ -106,6 +106,31 @@ do_execsql_test 2.2.5 {
|
||||
INSERT INTO vt0(vt0) VALUES('integrity-check');
|
||||
}
|
||||
|
||||
+#-------------------------------------------------------------------------
|
||||
+#
|
||||
+reset_db
|
||||
+do_execsql_test 7.0 {
|
||||
+ CREATE VIRTUAL TABLE t1 USING fts5(x);
|
||||
+ INSERT INTO t1(rowid, x) VALUES(1, 'hello world');
|
||||
+ INSERT INTO t1(rowid, x) VALUES(2, 'well said');
|
||||
+ INSERT INTO t1(rowid, x) VALUES(3, 'hello said');
|
||||
+ INSERT INTO t1(rowid, x) VALUES(4, 'well world');
|
||||
+
|
||||
+ CREATE TABLE t2 (a, b);
|
||||
+ INSERT INTO t2 VALUES(1, 'hello');
|
||||
+ INSERT INTO t2 VALUES(2, 'world');
|
||||
+ INSERT INTO t2 VALUES(3, 'said');
|
||||
+ INSERT INTO t2 VALUES(4, 'hello');
|
||||
+}
|
||||
+
|
||||
+do_execsql_test 7.1 {
|
||||
+ SELECT rowid FROM t1 WHERE (rowid, x) IN (SELECT a, b FROM t2);
|
||||
+}
|
||||
+
|
||||
+do_execsql_test 7.2 {
|
||||
+ SELECT rowid FROM t1 WHERE rowid=2 AND t1 = 'hello';
|
||||
+}
|
||||
+
|
||||
|
||||
finish_test
|
||||
|
||||
Index: sqlite-src-3300100/src/wherecode.c
|
||||
===================================================================
|
||||
--- sqlite-src-3300100.orig/src/wherecode.c
|
||||
+++ sqlite-src-3300100/src/wherecode.c
|
||||
@@ -1307,7 +1307,9 @@ Bitmask sqlite3WhereCodeOneLoopStart(
|
||||
pTerm = pLoop->aLTerm[j];
|
||||
if( j<16 && (pLoop->u.vtab.omitMask>>j)&1 ){
|
||||
disableTerm(pLevel, pTerm);
|
||||
- }else if( (pTerm->eOperator & WO_IN)!=0 ){
|
||||
+ }else if( (pTerm->eOperator & WO_IN)!=0 &&
|
||||
+ sqlite3ExprVectorSize(pTerm->pExpr->pLeft)==1
|
||||
+ ){
|
||||
Expr *pCompare; /* The comparison operator */
|
||||
Expr *pRight; /* RHS of the comparison */
|
||||
VdbeOp *pOp; /* Opcode to access the value of the IN constraint */
|
||||
Index: sqlite-src-3300100/test/rowvaluevtab.test
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ sqlite-src-3300100/test/rowvaluevtab.test
|
||||
@@ -0,0 +1,91 @@
|
||||
+# 2018 October 14
|
||||
+#
|
||||
+# 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.
|
||||
+#
|
||||
+#***********************************************************************
|
||||
+#
|
||||
+
|
||||
+
|
||||
+set testdir [file dirname $argv0]
|
||||
+source $testdir/tester.tcl
|
||||
+set ::testprefix rowvaluevtab
|
||||
+
|
||||
+register_echo_module db
|
||||
+
|
||||
+do_execsql_test 1.0 {
|
||||
+ CREATE TABLE t1(a, b, c);
|
||||
+ CREATE INDEX t1b ON t1(b);
|
||||
+ INSERT INTO t1 VALUES('one', 1, 1);
|
||||
+ INSERT INTO t1 VALUES('two', 1, 2);
|
||||
+ INSERT INTO t1 VALUES('three', 1, 3);
|
||||
+ INSERT INTO t1 VALUES('four', 2, 1);
|
||||
+ INSERT INTO t1 VALUES('five', 2, 2);
|
||||
+ INSERT INTO t1 VALUES('six', 2, 3);
|
||||
+ INSERT INTO t1 VALUES('seven', 3, 1);
|
||||
+ INSERT INTO t1 VALUES('eight', 3, 2);
|
||||
+ INSERT INTO t1 VALUES('nine', 3, 3);
|
||||
+
|
||||
+ WITH s(i) AS (
|
||||
+ SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<10000
|
||||
+ ) INSERT INTO t1 SELECT NULL, NULL, NULL FROM s;
|
||||
+ CREATE VIRTUAL TABLE e1 USING echo(t1);
|
||||
+}
|
||||
+
|
||||
+proc do_vfilter4_test {tn sql expected} {
|
||||
+ set res [list]
|
||||
+ db eval "explain $sql" {
|
||||
+ if {$opcode=="VFilter"} {
|
||||
+ lappend res $p4
|
||||
+ }
|
||||
+ }
|
||||
+ uplevel [list do_test $tn [list set {} $res] [list {*}$expected]]
|
||||
+}
|
||||
+
|
||||
+do_execsql_test 1.1 {
|
||||
+ SELECT a FROM e1 WHERE (b, c) = (2, 2)
|
||||
+} {five}
|
||||
+do_vfilter4_test 1.1f {
|
||||
+ SELECT a FROM e1 WHERE (b, c) = (?, ?)
|
||||
+} {{SELECT rowid, a, b, c FROM 't1' WHERE b = ?}}
|
||||
+
|
||||
+do_execsql_test 1.2 {
|
||||
+ SELECT a FROM e1 WHERE (b, c) > (2, 2)
|
||||
+} {six seven eight nine}
|
||||
+do_vfilter4_test 1.2f {
|
||||
+ SELECT a FROM e1 WHERE (b, c) > (2, 2)
|
||||
+} {
|
||||
+ {SELECT rowid, a, b, c FROM 't1' WHERE b >= ?}
|
||||
+}
|
||||
+
|
||||
+do_execsql_test 1.3 {
|
||||
+ SELECT a FROM e1 WHERE (b, c) >= (2, 2)
|
||||
+} {five six seven eight nine}
|
||||
+do_vfilter4_test 1.3f {
|
||||
+ SELECT a FROM e1 WHERE (b, c) >= (2, 2)
|
||||
+} {
|
||||
+ {SELECT rowid, a, b, c FROM 't1' WHERE b >= ?}
|
||||
+}
|
||||
+
|
||||
+do_execsql_test 1.3 {
|
||||
+ SELECT a FROM e1 WHERE (b, c) BETWEEN (1, 2) AND (2, 3)
|
||||
+} {two three four five six}
|
||||
+do_vfilter4_test 1.3f {
|
||||
+ SELECT a FROM e1 WHERE (b, c) BETWEEN (1, 2) AND (2, 3)
|
||||
+} {
|
||||
+ {SELECT rowid, a, b, c FROM 't1' WHERE b >= ? AND b <= ?}
|
||||
+}
|
||||
+
|
||||
+do_execsql_test 1.4 {
|
||||
+ SELECT a FROM e1 WHERE (b, c) IN ( VALUES(2, 2) )
|
||||
+} {five}
|
||||
+do_vfilter4_test 1.4f {
|
||||
+ SELECT a FROM e1 WHERE (b, c) IN ( VALUES(2, 2) )
|
||||
+} {{SELECT rowid, a, b, c FROM 't1' WHERE b = ?}}
|
||||
+
|
||||
+finish_test
|
||||
+
|
@ -1,7 +1,16 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Dec 10 11:30:35 UTC 2019 - Martin Pluskal <mpluskal@suse.com>
|
||||
Fri Jan 17 14:29:39 UTC 2020 - Stefan Brüns <stefan.bruens@rwth-aachen.de>
|
||||
|
||||
- Add sqlite3-django.patch to fix builds of django
|
||||
- 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>
|
||||
|
34
sqlite3.spec
34
sqlite3.spec
@ -1,7 +1,7 @@
|
||||
#
|
||||
# spec file for package sqlite3
|
||||
#
|
||||
# Copyright (c) 2019 SUSE LLC
|
||||
# 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,6 +16,7 @@
|
||||
#
|
||||
|
||||
|
||||
%bcond_with icu
|
||||
%define oname sqlite
|
||||
%define tarversion 3300100
|
||||
Name: sqlite3
|
||||
@ -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-django.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 -p1
|
||||
%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
|
||||
|
Loading…
Reference in New Issue
Block a user