From 380d244d2c1ec075ab5387fd5302ceba9a4b0e62 Mon Sep 17 00:00:00 2001 From: Arfrever Frehtes Taifersar Arahesis Date: Sat, 10 Feb 2018 18:00:09 +0100 Subject: dev-db/sqlite: Version bump (3.22.0). --- .../files/sqlite-3.22.0-full_archive-build.patch | 405 +++++++++++++++++++++ .../files/sqlite-3.22.0-full_archive-headers.patch | 15 + .../files/sqlite-3.22.0-full_archive-tests.patch | 249 +++++++++++++ 3 files changed, 669 insertions(+) create mode 100644 dev-db/sqlite/files/sqlite-3.22.0-full_archive-build.patch create mode 100644 dev-db/sqlite/files/sqlite-3.22.0-full_archive-headers.patch create mode 100644 dev-db/sqlite/files/sqlite-3.22.0-full_archive-tests.patch (limited to 'dev-db/sqlite/files') diff --git a/dev-db/sqlite/files/sqlite-3.22.0-full_archive-build.patch b/dev-db/sqlite/files/sqlite-3.22.0-full_archive-build.patch new file mode 100644 index 000000000000..5e1236a4e968 --- /dev/null +++ b/dev-db/sqlite/files/sqlite-3.22.0-full_archive-build.patch @@ -0,0 +1,405 @@ +Move some code to libsqlite3.so to avoid duplication. +Link executables against libsqlite3.so. +Increase timeout for fuzzcheck. +Fix building with dlopen() not available. + +--- /Makefile.in ++++ /Makefile.in +@@ -307,6 +307,9 @@ + # Source code for extensions + # + SRC += \ ++ $(TOP)/ext/expert/sqlite3expert.c \ ++ $(TOP)/ext/expert/sqlite3expert.h ++SRC += \ + $(TOP)/ext/fts1/fts1.c \ + $(TOP)/ext/fts1/fts1.h \ + $(TOP)/ext/fts1/fts1_hash.c \ +@@ -355,8 +358,11 @@ + $(TOP)/ext/rbu/sqlite3rbu.h \ + $(TOP)/ext/rbu/sqlite3rbu.c + SRC += \ ++ $(TOP)/ext/misc/appendvfs.c \ + $(TOP)/ext/misc/json1.c \ +- $(TOP)/ext/misc/stmt.c ++ $(TOP)/ext/misc/sqlar.c \ ++ $(TOP)/ext/misc/stmt.c \ ++ $(TOP)/ext/misc/zipfile.c + + # Generated source code files + # +@@ -425,7 +431,6 @@ + # Statically linked extensions + # + TESTSRC += \ +- $(TOP)/ext/expert/sqlite3expert.c \ + $(TOP)/ext/expert/test_expert.c \ + $(TOP)/ext/misc/amatch.c \ + $(TOP)/ext/misc/carray.c \ +@@ -447,8 +452,7 @@ + $(TOP)/ext/misc/spellfix.c \ + $(TOP)/ext/misc/totype.c \ + $(TOP)/ext/misc/unionvtab.c \ +- $(TOP)/ext/misc/wholenumber.c \ +- $(TOP)/ext/misc/zipfile.c ++ $(TOP)/ext/misc/wholenumber.c + + # Source code to the library files needed by the test fixture + # +@@ -610,25 +614,25 @@ + + libtclsqlite3.la: tclsqlite.lo libsqlite3.la + $(LTLINK) -no-undefined -o $@ tclsqlite.lo \ +- libsqlite3.la @TCL_STUB_LIB_SPEC@ $(TLIBS) \ ++ libsqlite3.la @TCL_STUB_LIB_SPEC@ \ + -rpath "$(TCLLIBDIR)" \ + -version-info "8:6:8" \ + -avoid-version + +-sqlite3$(TEXE): shell.c sqlite3.c +- $(LTLINK) $(READLINE_FLAGS) $(SHELL_OPT) -o $@ \ +- shell.c sqlite3.c \ +- $(LIBREADLINE) $(TLIBS) -rpath "$(libdir)" ++sqlite3$(TEXE): shell.c libsqlite3.la ++ $(LTLINK) $(READLINE_FLAGS) -o $@ \ ++ shell.c libsqlite3.la \ ++ $(LIBREADLINE) + +-sqldiff$(TEXE): $(TOP)/tool/sqldiff.c sqlite3.lo sqlite3.h +- $(LTLINK) -o $@ $(TOP)/tool/sqldiff.c sqlite3.lo $(TLIBS) ++sqldiff$(TEXE): $(TOP)/tool/sqldiff.c libsqlite3.la ++ $(LTLINK) -o $@ $(TOP)/tool/sqldiff.c libsqlite3.la + +-dbhash$(TEXE): $(TOP)/tool/dbhash.c sqlite3.lo sqlite3.h +- $(LTLINK) -o $@ $(TOP)/tool/dbhash.c sqlite3.lo $(TLIBS) ++dbhash$(TEXE): $(TOP)/tool/dbhash.c libsqlite3.la ++ $(LTLINK) -o $@ $(TOP)/tool/dbhash.c libsqlite3.la + +-scrub$(TEXE): $(TOP)/ext/misc/scrub.c sqlite3.lo ++scrub$(TEXE): $(TOP)/ext/misc/scrub.c libsqlite3.la + $(LTLINK) -o $@ -I. -DSCRUB_STANDALONE \ +- $(TOP)/ext/misc/scrub.c sqlite3.lo $(TLIBS) ++ $(TOP)/ext/misc/scrub.c libsqlite3.la + + srcck1$(BEXE): $(TOP)/tool/srcck1.c + $(BCC) -o srcck1$(BEXE) $(TOP)/tool/srcck1.c +@@ -704,7 +708,7 @@ + # Rule to build the amalgamation + # + sqlite3.lo: sqlite3.c +- $(LTCOMPILE) $(TEMP_STORE) -c sqlite3.c ++ $(LTCOMPILE) $(SHELL_OPT) $(TEMP_STORE) -c sqlite3.c + + # Rules to build the LEMON compiler generator + # +@@ -995,14 +999,9 @@ + # Source files that go into making shell.c + SHELL_SRC = \ + $(TOP)/src/shell.c.in \ +- $(TOP)/ext/misc/appendvfs.c \ + $(TOP)/ext/misc/shathree.c \ + $(TOP)/ext/misc/fileio.c \ + $(TOP)/ext/misc/completion.c \ +- $(TOP)/ext/misc/sqlar.c \ +- $(TOP)/ext/expert/sqlite3expert.c \ +- $(TOP)/ext/expert/sqlite3expert.h \ +- $(TOP)/ext/misc/zipfile.c \ + $(TOP)/src/test_windirent.c + + shell.c: $(SHELL_SRC) $(TOP)/tool/mkshellc.tcl +@@ -1161,13 +1160,13 @@ + + # Fuzz testing + fuzztest: fuzzcheck$(TEXE) $(FUZZDATA) +- ./fuzzcheck$(TEXE) $(FUZZDATA) ++ ./fuzzcheck$(TEXE) --timeout 3600 $(FUZZDATA) + + fastfuzztest: fuzzcheck$(TEXE) $(FUZZDATA) +- ./fuzzcheck$(TEXE) --limit-mem 100M $(FUZZDATA) ++ ./fuzzcheck$(TEXE) --limit-mem 100M --timeout 3600 $(FUZZDATA) + + valgrindfuzz: fuzzcheck$(TEXT) $(FUZZDATA) +- valgrind ./fuzzcheck$(TEXE) --cell-size-check --limit-mem 10M --timeout 600 $(FUZZDATA) ++ valgrind ./fuzzcheck$(TEXE) --cell-size-check --limit-mem 10M --timeout 3600 $(FUZZDATA) + + # The veryquick.test TCL tests. + # +@@ -1197,24 +1196,23 @@ + smoketest: $(TESTPROGS) fuzzcheck$(TEXE) + ./testfixture$(TEXE) $(TOP)/test/main.test $(TESTOPTS) + +-sqlite3_analyzer.c: sqlite3.c $(TOP)/src/tclsqlite.c $(TOP)/tool/spaceanal.tcl $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqlite3_analyzer.c.in ++sqlite3_analyzer.c: $(TOP)/src/tclsqlite.c $(TOP)/tool/spaceanal.tcl $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqlite3_analyzer.c.in + $(TCLSH_CMD) $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqlite3_analyzer.c.in >sqlite3_analyzer.c + +-sqlite3_analyzer$(TEXE): sqlite3_analyzer.c +- $(LTLINK) sqlite3_analyzer.c -o $@ $(LIBTCL) $(TLIBS) ++sqlite3_analyzer$(TEXE): sqlite3_analyzer.c libsqlite3.la ++ $(LTLINK) sqlite3_analyzer.c -o $@ libsqlite3.la $(LIBTCL) + +-sqltclsh.c: sqlite3.c $(TOP)/src/tclsqlite.c $(TOP)/tool/sqltclsh.tcl $(TOP)/ext/misc/appendvfs.c $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqltclsh.c.in ++sqltclsh.c: $(TOP)/src/tclsqlite.c $(TOP)/tool/sqltclsh.tcl $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqltclsh.c.in + $(TCLSH_CMD) $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqltclsh.c.in >sqltclsh.c + +-sqltclsh$(TEXE): sqltclsh.c +- $(LTLINK) sqltclsh.c -o $@ $(LIBTCL) $(TLIBS) ++sqltclsh$(TEXE): sqltclsh.c libsqlite3.la ++ $(LTLINK) sqltclsh.c -o $@ libsqlite3.la $(LIBTCL) + +-sqlite3_expert$(TEXE): $(TOP)/ext/expert/sqlite3expert.h $(TOP)/ext/expert/sqlite3expert.c $(TOP)/ext/expert/expert.c sqlite3.c +- $(LTLINK) $(TOP)/ext/expert/sqlite3expert.h $(TOP)/ext/expert/sqlite3expert.c $(TOP)/ext/expert/expert.c sqlite3.c -o sqlite3_expert $(TLIBS) ++sqlite3_expert$(TEXE): $(TOP)/ext/expert/sqlite3expert.h $(TOP)/ext/expert/expert.c libsqlite3.la ++ $(LTLINK) $(TOP)/ext/expert/expert.c -o sqlite3_expert libsqlite3.la + + CHECKER_DEPS =\ + $(TOP)/tool/mkccode.tcl \ +- sqlite3.c \ + $(TOP)/src/tclsqlite.c \ + $(TOP)/ext/repair/sqlite3_checker.tcl \ + $(TOP)/ext/repair/checkindex.c \ +@@ -1225,30 +1223,30 @@ + sqlite3_checker.c: $(CHECKER_DEPS) + $(TCLSH_CMD) $(TOP)/tool/mkccode.tcl $(TOP)/ext/repair/sqlite3_checker.c.in >$@ + +-sqlite3_checker$(TEXE): sqlite3_checker.c +- $(LTLINK) sqlite3_checker.c -o $@ $(LIBTCL) $(TLIBS) ++sqlite3_checker$(TEXE): sqlite3_checker.c libsqlite3.la ++ $(LTLINK) sqlite3_checker.c -o $@ libsqlite3.la $(LIBTCL) + +-dbdump$(TEXE): $(TOP)/ext/misc/dbdump.c sqlite3.lo ++dbdump$(TEXE): $(TOP)/ext/misc/dbdump.c libsqlite3.la + $(LTLINK) -DDBDUMP_STANDALONE -o $@ \ +- $(TOP)/ext/misc/dbdump.c sqlite3.lo $(TLIBS) ++ $(TOP)/ext/misc/dbdump.c libsqlite3.la + +-showdb$(TEXE): $(TOP)/tool/showdb.c sqlite3.lo +- $(LTLINK) -o $@ $(TOP)/tool/showdb.c sqlite3.lo $(TLIBS) ++showdb$(TEXE): $(TOP)/tool/showdb.c libsqlite3.la ++ $(LTLINK) -o $@ $(TOP)/tool/showdb.c libsqlite3.la + +-showstat4$(TEXE): $(TOP)/tool/showstat4.c sqlite3.lo +- $(LTLINK) -o $@ $(TOP)/tool/showstat4.c sqlite3.lo $(TLIBS) ++showstat4$(TEXE): $(TOP)/tool/showstat4.c libsqlite3.la ++ $(LTLINK) -o $@ $(TOP)/tool/showstat4.c libsqlite3.la + +-showjournal$(TEXE): $(TOP)/tool/showjournal.c sqlite3.lo +- $(LTLINK) -o $@ $(TOP)/tool/showjournal.c sqlite3.lo $(TLIBS) ++showjournal$(TEXE): $(TOP)/tool/showjournal.c ++ $(LTLINK) -o $@ $(TOP)/tool/showjournal.c + +-showwal$(TEXE): $(TOP)/tool/showwal.c sqlite3.lo +- $(LTLINK) -o $@ $(TOP)/tool/showwal.c sqlite3.lo $(TLIBS) ++showwal$(TEXE): $(TOP)/tool/showwal.c ++ $(LTLINK) -o $@ $(TOP)/tool/showwal.c + + showshm$(TEXE): $(TOP)/tool/showshm.c + $(LTLINK) -o $@ $(TOP)/tool/showshm.c + +-changeset$(TEXE): $(TOP)/ext/session/changeset.c sqlite3.lo +- $(LTLINK) -o $@ $(TOP)/ext/session/changeset.c sqlite3.lo $(TLIBS) ++changeset$(TEXE): $(TOP)/ext/session/changeset.c libsqlite3.la ++ $(LTLINK) -o $@ $(TOP)/ext/session/changeset.c libsqlite3.la + + rollback-test$(TEXE): $(TOP)/tool/rollback-test.c sqlite3.lo + $(LTLINK) -o $@ $(TOP)/tool/rollback-test.c sqlite3.lo $(TLIBS) +@@ -1267,11 +1265,11 @@ + 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) ++rbu$(EXE): $(TOP)/ext/rbu/rbu.c libsqlite3.la ++ $(LTLINK) -I. -o $@ $(TOP)/ext/rbu/rbu.c libsqlite3.la + +-loadfts$(EXE): $(TOP)/tool/loadfts.c libsqlite3.la +- $(LTLINK) $(TOP)/tool/loadfts.c libsqlite3.la -o $@ $(TLIBS) ++loadfts$(EXE): $(TOP)/tool/loadfts.c libsqlite3.la ++ $(LTLINK) $(TOP)/tool/loadfts.c libsqlite3.la -o $@ + + # This target will fail if the SQLite amalgamation contains any exported + # symbols that do not begin with "sqlite3_". It is run as part of the +--- /configure.ac ++++ /configure.ac +@@ -590,6 +590,9 @@ + if test "${use_loadextension}" = "yes" ; then + OPT_FEATURE_FLAGS="" + AC_SEARCH_LIBS(dlopen, dl) ++ if test "${ac_cv_search_dlopen}" = "no" ; then ++ OPT_FEATURE_FLAGS="-DSQLITE_OMIT_LOAD_EXTENSION=1" ++ fi + else + OPT_FEATURE_FLAGS="-DSQLITE_OMIT_LOAD_EXTENSION=1" + fi +--- /ext/misc/sqlar.c ++++ /ext/misc/sqlar.c +@@ -14,6 +14,8 @@ + ** for working with sqlar archives and used by the shell tool's built-in + ** sqlar support. + */ ++#ifdef SQLITE_HAVE_ZLIB ++ + #include "sqlite3ext.h" + SQLITE_EXTENSION_INIT1 + #include +@@ -119,3 +121,5 @@ + } + return rc; + } ++ ++#endif /* SQLITE_HAVE_ZLIB */ +--- /ext/misc/zipfile.c ++++ /ext/misc/zipfile.c +@@ -24,6 +24,8 @@ + ** * No support for zip64 extensions + ** * Only the "inflate/deflate" (zlib) compression method is supported + */ ++#ifdef SQLITE_HAVE_ZLIB ++ + #include "sqlite3ext.h" + SQLITE_EXTENSION_INIT1 + #include +@@ -1665,3 +1667,5 @@ + (void)pzErrMsg; /* Unused parameter */ + return zipfileRegister(db); + } ++ ++#endif /* SQLITE_HAVE_ZLIB */ +--- /ext/repair/sqlite3_checker.c.in ++++ /ext/repair/sqlite3_checker.c.in +@@ -2,6 +2,7 @@ + ** Read an SQLite database file and analyze its space utilization. Generate + ** text on standard output. + */ ++#define SQLITE_CORE 1 + #define TCLSH_INIT_PROC sqlite3_checker_init_proc + #define SQLITE_ENABLE_DBPAGE_VTAB 1 + #define SQLITE_ENABLE_JSON1 1 +@@ -14,7 +15,7 @@ + #define SQLITE_OMIT_SHARED_CACHE 1 + #define SQLITE_DEFAULT_MEMSTATUS 0 + #define SQLITE_MAX_EXPR_DEPTH 0 +-INCLUDE sqlite3.c ++#include "sqlite3.h" + INCLUDE $ROOT/src/tclsqlite.c + INCLUDE $ROOT/ext/misc/btreeinfo.c + INCLUDE $ROOT/ext/repair/checkindex.c +--- /src/shell.c.in ++++ /src/shell.c.in +@@ -61,6 +61,7 @@ + #include + #include + #include "sqlite3.h" ++#include "ext/expert/sqlite3expert.h" + typedef sqlite3_int64 i64; + typedef sqlite3_uint64 u64; + typedef unsigned char u8; +@@ -124,6 +125,10 @@ + # define SHELL_USE_LOCAL_GETLINE 1 + #endif + ++#ifdef SQLITE_HAVE_ZLIB ++#include ++#endif ++ + + #if defined(_WIN32) || defined(WIN32) + # include +@@ -963,13 +968,6 @@ + INCLUDE ../ext/misc/shathree.c + INCLUDE ../ext/misc/fileio.c + INCLUDE ../ext/misc/completion.c +-INCLUDE ../ext/misc/appendvfs.c +-#ifdef SQLITE_HAVE_ZLIB +-INCLUDE ../ext/misc/zipfile.c +-INCLUDE ../ext/misc/sqlar.c +-#endif +-INCLUDE ../ext/expert/sqlite3expert.h +-INCLUDE ../ext/expert/sqlite3expert.c + + #if defined(SQLITE_ENABLE_SESSION) + /* +@@ -3467,7 +3465,9 @@ + sqlite3_shathree_init(p->db, 0, 0); + sqlite3_completion_init(p->db, 0, 0); + #ifdef SQLITE_HAVE_ZLIB ++ extern int sqlite3_zipfile_init(sqlite3 *, char **, const sqlite3_api_routines *); + sqlite3_zipfile_init(p->db, 0, 0); ++ extern int sqlite3_sqlar_init(sqlite3 *, char **, const sqlite3_api_routines *); + sqlite3_sqlar_init(p->db, 0, 0); + #endif + sqlite3_create_function(p->db, "shell_add_schema", 3, SQLITE_UTF8, 0, +@@ -5316,6 +5316,7 @@ + } + sqlite3_fileio_init(cmd.db, 0, 0); + #ifdef SQLITE_HAVE_ZLIB ++ extern int sqlite3_sqlar_init(sqlite3 *, char **, const sqlite3_api_routines *); + sqlite3_sqlar_init(cmd.db, 0, 0); + #endif + sqlite3_create_function(cmd.db, "shell_putsnl", 1, SQLITE_UTF8, cmd.p, +@@ -8222,6 +8223,7 @@ + #endif + } + data.out = stdout; ++ extern int sqlite3_appendvfs_init(sqlite3 *, char **, const sqlite3_api_routines *); + sqlite3_appendvfs_init(0,0,0); + + /* Go ahead and open the database file if it already exists. If the +--- /tool/mksqlite3c.tcl ++++ /tool/mksqlite3c.tcl +@@ -116,6 +116,7 @@ + rtree.h + sqlite3session.h + sqlite3.h ++ sqlite3expert.h + sqlite3ext.h + sqlite3rbu.h + sqliteicu.h +@@ -399,6 +400,10 @@ + json1.c + fts5.c + stmt.c ++ appendvfs.c ++ sqlar.c ++ sqlite3expert.c ++ zipfile.c + } { + copy_file tsrc/$file + } +--- /tool/sqlite3_analyzer.c.in ++++ /tool/sqlite3_analyzer.c.in +@@ -14,9 +14,6 @@ + #define SQLITE_DEFAULT_MEMSTATUS 0 + #define SQLITE_MAX_EXPR_DEPTH 0 + #define SQLITE_OMIT_LOAD_EXTENSION 1 +-#ifndef USE_EXTERNAL_SQLITE +-INCLUDE sqlite3.c +-#endif + INCLUDE $ROOT/src/tclsqlite.c + + const char *sqlite3_analyzer_init_proc(Tcl_Interp *interp){ +--- /tool/sqltclsh.c.in ++++ /tool/sqltclsh.c.in +@@ -27,19 +27,17 @@ + #define SQLITE_OMIT_SHARED_CACHE 1 + #define SQLITE_DEFAULT_MEMSTATUS 0 + #define SQLITE_MAX_EXPR_DEPTH 0 +-INCLUDE sqlite3.c +-INCLUDE $ROOT/ext/misc/appendvfs.c +-#ifdef SQLITE_HAVE_ZLIB +-INCLUDE $ROOT/ext/misc/zipfile.c +-INCLUDE $ROOT/ext/misc/sqlar.c +-#endif ++#include "sqlite3.h" + INCLUDE $ROOT/src/tclsqlite.c + + const char *sqlite3_tclapp_init_proc(Tcl_Interp *interp){ + (void)interp; ++ extern int sqlite3_appendvfs_init(sqlite3 *,char **, const sqlite3_api_routines *); + sqlite3_appendvfs_init(0,0,0); + #ifdef SQLITE_HAVE_ZLIB ++ extern int sqlite3_sqlar_init(sqlite3 *, char **, const sqlite3_api_routines *); + sqlite3_auto_extension((void(*)(void))sqlite3_sqlar_init); ++ extern int sqlite3_zipfile_init(sqlite3 *, char **, const sqlite3_api_routines *); + sqlite3_auto_extension((void(*)(void))sqlite3_zipfile_init); + #endif + diff --git a/dev-db/sqlite/files/sqlite-3.22.0-full_archive-headers.patch b/dev-db/sqlite/files/sqlite-3.22.0-full_archive-headers.patch new file mode 100644 index 000000000000..751f00a62bdf --- /dev/null +++ b/dev-db/sqlite/files/sqlite-3.22.0-full_archive-headers.patch @@ -0,0 +1,15 @@ +https://sqlite.org/src/info/6185d190e250faae + +--- /src/sqlite3ext.h ++++ /src/sqlite3ext.h +@@ -563,8 +563,8 @@ + #define sqlite3_value_pointer sqlite3_api->value_pointer + /* Version 3.22.0 and later */ + #define sqlite3_vtab_nochange sqlite3_api->vtab_nochange +-#define sqlite3_value_nochange sqltie3_api->value_nochange +-#define sqlite3_vtab_collation sqltie3_api->vtab_collation ++#define sqlite3_value_nochange sqlite3_api->value_nochange ++#define sqlite3_vtab_collation sqlite3_api->vtab_collation + #endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */ + + #if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) diff --git a/dev-db/sqlite/files/sqlite-3.22.0-full_archive-tests.patch b/dev-db/sqlite/files/sqlite-3.22.0-full_archive-tests.patch new file mode 100644 index 000000000000..a253028b7f4b --- /dev/null +++ b/dev-db/sqlite/files/sqlite-3.22.0-full_archive-tests.patch @@ -0,0 +1,249 @@ +https://sqlite.org/src/info/e4766cabdf64d8e9 +https://sqlite.org/src/info/d9e59cfb8476e1ec +https://sqlite.org/src/info/ba0631de60ca38bf +https://sqlite.org/src/info/b685d3231097fb90 + +--- /test/fts3rank.test ++++ /test/fts3rank.test +@@ -14,7 +14,7 @@ + + set testdir [file dirname $argv0] + source $testdir/tester.tcl +-set testprefix fts3expr5 ++set testprefix fts3rank + + # If SQLITE_ENABLE_FTS3 is defined, omit this file. + ifcapable !fts3 { +@@ -56,9 +56,14 @@ + SELECT * FROM t1 ORDER BY rank(x'0000000000000000') DESC, rowid + } {0 {{one two} one {one two} three {one two} two}} + +-do_catchsql_test 1.5 { +- SELECT * FROM t1 ORDER BY rank(x'0100000001000000') DESC, rowid +-} {1 {invalid matchinfo blob passed to function rank()}} ++if {$tcl_platform(byteOrder)=="littleEndian"} { ++ do_catchsql_test 1.5le { ++ SELECT * FROM t1 ORDER BY rank(x'0100000001000000') DESC, rowid ++ } {1 {invalid matchinfo blob passed to function rank()}} ++} else { ++ do_catchsql_test 1.5be { ++ SELECT * FROM t1 ORDER BY rank(x'0000000100000001') DESC, rowid ++ } {1 {invalid matchinfo blob passed to function rank()}} ++} + + finish_test +- +--- /test/func6.test ++++ /test/func6.test +@@ -33,54 +33,125 @@ + CREATE TABLE t2(x TEXT PRIMARY KEY, y) WITHOUT ROWID; + INSERT INTO t2(x,y) SELECT a, b FROM t1; + } ++ ++# Load the contents of $file from disk and return it encoded as a hex ++# string. ++proc loadhex {file} { ++ set fd [open $file] ++ fconfigure $fd -translation binary -encoding binary ++ set data [read $fd] ++ close $fd ++ binary encode hex $data ++} ++ ++# Each argument is either an integer between 0 and 65535, a text value, or ++# an empty string representing an SQL NULL. This command builds an SQLite ++# record containing the values passed as arguments and returns it encoded ++# as a hex string. ++proc hexrecord {args} { ++ set hdr "" ++ set body "" ++ foreach x $args { ++ if {$x==""} { ++ append hdr 00 ++ } elseif {[string is integer $x]==0} { ++ set n [string length $x] ++ append hdr [format %02x [expr $n*2 + 13]] ++ append body [binary encode hex $x] ++ } elseif {$x == 0} { ++ append hdr 08 ++ } elseif {$x == 1} { ++ append hdr 09 ++ } elseif {$x <= 127} { ++ append hdr 01 ++ append body [format %02x $x] ++ } else { ++ append hdr 02 ++ append body [format %04x $x] ++ } ++ } ++ set res [format %02x [expr 1 + [string length $hdr]/2]] ++ append res $hdr ++ append res $body ++} ++ ++# Argument $off is an offset into the database image encoded as a hex string ++# in argument $hexdb. This command returns 0 if the offset contains the hex ++# $hexrec, or throws an exception otherwise. ++# ++proc offset_contains_record {off hexdb hexrec} { ++ set n [string length $hexrec] ++ set off [expr $off*2] ++ if { [string compare $hexrec [string range $hexdb $off [expr $off+$n-1]]] } { ++ error "record not found!" ++ } ++ return 0 ++} ++ ++# This command is the implementation of SQL function "offrec()". The first ++# argument to this is an offset value. The remaining values are used to ++# formulate an SQLite record. If database file test.db does not contain ++# an equivalent record at the specified offset, an exception is thrown. ++# Otherwise, 0 is returned. ++# ++proc offrec {args} { ++ set offset [lindex $args 0] ++ set rec [hexrecord {*}[lrange $args 1 end]] ++ offset_contains_record $offset $::F $rec ++} ++set F [loadhex test.db] ++db func offrec offrec ++ ++# Test the sanity of the tests. ++do_execsql_test func6-105 { ++ SELECT sqlite_offset(d) FROM t1 ORDER BY rowid LIMIT 1; ++} {8179} ++do_test func6-106 { ++ set r [hexrecord abc001 1 999 {}] ++ offset_contains_record 8179 $F $r ++} 0 ++ ++set z100 [string trim [string repeat "0 " 100]] ++ ++# Test offsets within table b-tree t1. + do_execsql_test func6-110 { +- SELECT a, sqlite_offset(d)/4096 + 1, +- sqlite_offset(d)%4096 FROM t1 +- ORDER BY rowid LIMIT 2; +-} {abc001 2 4084 abc002 2 4069} ++ SELECT offrec(sqlite_offset(d), a, b, c, d) FROM t1 ORDER BY rowid ++} $z100 ++ + do_execsql_test func6-120 { + SELECT a, typeof(sqlite_offset(+a)) FROM t1 + ORDER BY rowid LIMIT 2; + } {abc001 null abc002 null} ++ ++# Test offsets within index b-tree t1a. + do_execsql_test func6-130 { +- SELECT a, sqlite_offset(a)/4096+1, +- sqlite_offset(a)%4096 +- FROM t1 +- ORDER BY a LIMIT 2; +-} {abc001 3 4087 abc002 3 4076} ++ SELECT offrec(sqlite_offset(a), a, rowid) FROM t1 ORDER BY a ++} $z100 ++ ++# Test offsets within table b-tree t1 with a temp b-tree ORDER BY. + do_execsql_test func6-140 { +- SELECT a, sqlite_offset(d)/4096+1, +- sqlite_offset(d)%4096 +- FROM t1 +- ORDER BY a LIMIT 2; +-} {abc001 2 4084 abc002 2 4069} ++ SELECT offrec(sqlite_offset(d), a, b, c, d) FROM t1 ORDER BY a ++} $z100 ++ ++# Test offsets from both index t1a and table t1 in the same query. + do_execsql_test func6-150 { +- SELECT a, +- sqlite_offset(a)/4096+1, +- sqlite_offset(a)%4096, +- sqlite_offset(d)/4096+1, +- sqlite_offset(d)%4096 +- FROM t1 +- ORDER BY a LIMIT 2; +-} {abc001 3 4087 2 4084 abc002 3 4076 2 4069} +-do_execsql_test func6-160 { +- SELECT b, +- sqlite_offset(b)/4096+1, +- sqlite_offset(b)%4096, +- sqlite_offset(c)/4096+1, +- sqlite_offset(c)%4096, +- sqlite_offset(d)/4096+1, +- sqlite_offset(d)%4096 +- FROM t1 +- ORDER BY b LIMIT 2; +-} {1 4 4090 4 4090 2 4084 2 4 4081 4 4081 2 4069} ++ SELECT offrec(sqlite_offset(a), a, rowid), ++ offrec(sqlite_offset(d), a, b, c, d) ++ FROM t1 ORDER BY a ++} [concat $z100 $z100] + ++# Test offsets from both index t1bc and table t1 in the same query. ++do_execsql_test func6-160 { ++ SELECT offrec(sqlite_offset(b), b, c, rowid), ++ offrec(sqlite_offset(c), b, c, rowid), ++ offrec(sqlite_offset(d), a, b, c, d) ++ FROM t1 ++ ORDER BY b ++} [concat $z100 $z100 $z100] + ++# Test offsets in WITHOUT ROWID table t2. + do_execsql_test func6-200 { +- SELECT y, sqlite_offset(y)/4096+1, +- sqlite_offset(y)%4096 +- FROM t2 +- ORDER BY x LIMIT 2; +-} {1 5 4087 2 5 4076} ++ SELECT offrec( sqlite_offset(y), x, y ) FROM t2 ORDER BY x ++} $z100 + + finish_test +--- /test/walro2.test ++++ /test/walro2.test +@@ -39,6 +39,18 @@ + } + } + ++# Most systems allocate the *-shm file in 32KB trunks. But on UNIX systems ++# for which the getpagesize() call returns greater than 32K, the *-shm ++# file is allocated in page-sized units (since you cannot mmap part of ++# a page). The following code sets variable $MINSHMSZ to the smallest ++# possible *-shm file (i.e. the greater of 32KB and the system page-size). ++# ++do_execsql_test 0.0 { ++ PRAGMA journal_mode = wal; ++ CREATE TABLE t1(x); ++} {wal} ++set MINSHMSZ [file size test.db-shm] ++ + foreach bZeroShm {0 1} { + set TN [expr $bZeroShm+1] + do_multiclient_test tn { +@@ -169,7 +181,7 @@ + } {a b c d e f g h 1 2} + do_test $TN.3.2.2 { + list [file size test.db-wal] [file size test.db-shm] +- } {0 32768} ++ } [list 0 $MINSHMSZ] + + do_test $TN.3.3.0 { + code2 { sqlite3 db2 test.db } +@@ -182,7 +194,7 @@ + code2 { db2 close } + code1 { db close } + list [file size test.db-wal] [file size test.db-shm] +- } [list [wal_file_size 4 1024] 32768] ++ } [list [wal_file_size 4 1024] $MINSHMSZ] + do_test $TN.3.3.1 { + code1 { sqlite3 db file:test.db?readonly_shm=1 } + sql1 { SELECT * FROM t1 } +@@ -196,7 +208,7 @@ + } + code2 { db2 close } + list [file size test.db-wal] [file size test.db-shm] +- } [list [wal_file_size 4 1024] 32768] ++ } [list [wal_file_size 4 1024] $MINSHMSZ] + do_test $TN.3.3.3 { + sql1 { SELECT * FROM t1 } + } {i ii} -- cgit v1.2.3-18-g5258