Hello community,

here is the log from the commit of package sqliteodbc for openSUSE:Leap:15.2 
checked in at 2020-05-11 08:39:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:15.2/sqliteodbc (Old)
 and      /work/SRC/openSUSE:Leap:15.2/.sqliteodbc.new.2738 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "sqliteodbc"

Mon May 11 08:39:02 2020 rev:11 rq:801790 version:0.9996

Changes:
--------
--- /work/SRC/openSUSE:Leap:15.2/sqliteodbc/sqliteodbc.changes  2020-01-15 
16:03:49.379938263 +0100
+++ /work/SRC/openSUSE:Leap:15.2/.sqliteodbc.new.2738/sqliteodbc.changes        
2020-05-11 08:39:32.879050381 +0200
@@ -1,0 +2,13 @@
+Mon May  4 11:18:46 UTC 2020 - Martin Pluskal <[email protected]>
+
+- Adjust scriplets to resolve boo#1171041 CVE-2020-12050
+
+-------------------------------------------------------------------
+Mon Mar 18 07:43:43 UTC 2019 - Tuukka Pasanen <[email protected]>
+
+- Update to version 0.9996
+       * update to SQLite 3.22.0
+       * fixes in handling DDL in SQLExecDirect() et.al., thanks Andre Mikulec 
for testing
+    * cleanup utf8/unicode conversion functions
+
+-------------------------------------------------------------------

Old:
----
  sqliteodbc-0.9995.tar.gz

New:
----
  sqliteodbc-0.9996.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ sqliteodbc.spec ++++++
--- /var/tmp/diff_new_pack.TZIcrO/_old  2020-05-11 08:39:33.435051585 +0200
+++ /var/tmp/diff_new_pack.TZIcrO/_new  2020-05-11 08:39:33.435051585 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package sqliteodbc
 #
-# Copyright (c) 2016 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
@@ -12,17 +12,17 @@
 # license that conforms to the Open Source Definition (Version 1.9)
 # published by the Open Source Initiative.
 
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
 #
 
 
 Name:           sqliteodbc
-Version:        0.9995
+Version:        0.9996
 Release:        0
 Summary:        ODBC driver for SQLite
 License:        BSD-2-Clause
 Group:          Development/Libraries/C and C++
-Url:            http://www.ch-werner.de/sqliteodbc
+URL:            http://www.ch-werner.de/sqliteodbc
 Source0:        http://www.ch-werner.de/sqliteodbc/%{name}-%{version}.tar.gz
 # This is not typical shared library but plugin for unixODBC
 Source1:        %{name}-rpmlintrc
@@ -36,7 +36,6 @@
 Requires:       unixODBC
 Requires(post): unixODBC
 Requires(preun): unixODBC
-BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 
 %description
 ODBC driver for SQLite interfacing SQLite 3.x using the
@@ -63,7 +62,7 @@
 %build
 %configure \
        --enable-static=no
-make %{?_smp_mflags} all doxy
+%make_build all doxy
 dos2unix README
 
 %install
@@ -72,44 +71,80 @@
 find %{buildroot} -type f \( -name '*.a' -o -name '*.la' \) -delete -print
 
 %post
+/sbin/ldconfig
 if [ -x %{_bindir}/odbcinst ] ; then
-   INST=/tmp/sqliteinst$$
+       INST=$(%{_bindir}/mktemp)
+
+       if [ -r %{_libdir}/libsqliteodbc.so ] ; then
+               %{_bindir}/cat > $INST <<- 'EOD'
+                       [SQLITE]
+                       Description=SQLite ODBC 2.X
+                       Driver=%{_libdir}/libsqliteodbc.so
+                       Setup=%{_libdir}/libsqliteodbc.so
+                       Threading=2
+                       FileUsage=1
+               EOD
+
+               %{_bindir}/odbcinst -q -d -n SQLITE | %{_bindir}/grep 
'^\[SQLITE\]' >/dev/null || {
+                       %{_bindir}/odbcinst -i -d -n SQLITE -f $INST || true
+               }
+
+               %{_bindir}/cat > $INST <<- 'EOD'
+                       [SQLite Datasource]
+                       Driver=SQLITE
+               EOD
+
+               %{_bindir}/odbcinst -q -s -n "SQLite Datasource" | \
+               %{_bindir}/grep '^\[SQLite Datasource\]' >/dev/null || {
+                       %{_bindir}/odbcinst -i -l -s -n "SQLite Datasource" -f 
$INST || true
+               }
+       fi
+
    if [ -r %{_libdir}/libsqlite3odbc.so ] ; then
-      cat > $INST << 'EOD'
-[SQLITE3]
-Description=SQLite ODBC 3.X
-Driver=%{_libdir}/libsqlite3odbc.so
-Setup=%{_libdir}/libsqlite3odbc.so
-Threading=2
-FileUsage=1
-EOD
-      %{_bindir}/odbcinst -q -d -n SQLITE3 | grep '^\[SQLITE3\]' >/dev/null || 
{
+               %{_bindir}/cat > $INST <<- 'EOD'
+                       [SQLITE3]
+                       Description=SQLite ODBC 3.X
+                       Driver=%{_libdir}/libsqlite3odbc.so
+                       Setup=%{_libdir}/libsqlite3odbc.so
+                       Threading=2
+                       FileUsage=1
+               EOD
+
+               %{_bindir}/odbcinst -q -d -n SQLITE3 | %{_bindir}/grep 
'^\[SQLITE3\]' >/dev/null || {
         %{_bindir}/odbcinst -i -d -n SQLITE3 -f $INST || true
       }
-      cat > $INST << 'EOD'
-[SQLite3 Datasource]
-Driver=SQLITE3
-EOD
+
+               %{_bindir}/cat > $INST <<- 'EOD'
+                       [SQLite3 Datasource]
+                       Driver=SQLITE3
+               EOD
+
       %{_bindir}/odbcinst -q -s -n "SQLite3 Datasource" | \
-        grep '^\[SQLite3 Datasource\]' >/dev/null || {
+               %{_bindir}/grep '^\[SQLite3 Datasource\]' >/dev/null || {
         %{_bindir}/odbcinst -i -l -s -n "SQLite3 Datasource" -f $INST || true
       }
    fi
-   rm -f $INST || true
+
+       %{_bindir}/rm -f $INST || true
 fi
 
 %preun
 if [ "$1" = "0" ] ; then
     test -x %{_bindir}/odbcinst && {
+               %{_bindir}/odbcinst -u -d -n SQLITE || true
+               %{_bindir}/odbcinst -u -l -s -n "SQLite Datasource" || true
        %{_bindir}/odbcinst -u -d -n SQLITE3 || true
        %{_bindir}/odbcinst -u -l -s -n "SQLite3 Datasource" || true
     }
+
     true
 fi
 
+%postun -p /sbin/ldconfig
+
 %files
-%defattr(-, root, root)
-%doc README license.terms ChangeLog
+%license license.terms
+%doc README ChangeLog
 %{_libdir}/libsqlite3_mod_blobtoxy-%{version}.so
 %{_libdir}/libsqlite3_mod_blobtoxy.so
 %{_libdir}/libsqlite3_mod_csvtable-%{version}.so
@@ -124,8 +159,8 @@
 %{_libdir}/libsqlite3odbc.so
 
 %files doc
-%defattr(-, root, root)
-%doc README license.terms ChangeLog
+%license license.terms
+%doc README ChangeLog
 %doc html
 
 %changelog

++++++ sqliteodbc-0.9995.tar.gz -> sqliteodbc-0.9996.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sqliteodbc-0.9995/ChangeLog 
new/sqliteodbc-0.9996/ChangeLog
--- old/sqliteodbc-0.9995/ChangeLog     2016-12-01 06:41:00.000000000 +0100
+++ new/sqliteodbc-0.9996/ChangeLog     2018-02-24 10:29:38.000000000 +0100
@@ -1,6 +1,13 @@
 SQLite ODBC Driver
 ------------------
 
+Sat Feb 24 2018 version 0.9996 released
+
+       * update to SQLite 3.22.0
+       * fixes in handling DDL in SQLExecDirect() et.al., thanks
+         Andre Mikulec for testing
+       * cleanup utf8/unicode conversion functions
+
 Tue Dec 01 2016 version 0.9995 released
 
        * update to SQLite 3.15.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sqliteodbc-0.9995/README new/sqliteodbc-0.9996/README
--- old/sqliteodbc-0.9995/README        2016-12-01 06:14:16.000000000 +0100
+++ new/sqliteodbc-0.9996/README        2018-02-24 10:30:07.000000000 +0100
@@ -13,7 +13,7 @@
 
     http://www.ch-werner.de/sqliteodbc/sqliteodbc.exe
 
-The binaries were made with SQLite 2.8.17, SQLite 3.15.2, MingW
+The binaries were made with SQLite 2.8.17, SQLite 3.22.0, MingW
 cross compiler and tested on Windows NT 4.0 with the query tool
 of MS Excel 97, with StarOffice 5.2 and OpenOffice 1.1 and 2.x.
 Execute the sqliteodbc.exe NSIS installer to unpack the necessary
@@ -26,7 +26,7 @@
 can be specified in the respective field. If empty a default value
 of 100000 milliseconds is used.
 
-The Win64 installer (sqliteodbc_w64.exe) was made with SQLite 3.15.2,
+The Win64 installer (sqliteodbc_w64.exe) was made with SQLite 3.22.0,
 MingW cross compiler and only rudimentary tested on Windows Vista 64.
 
 Other tests were made on Linux with the "isql" command line tool
@@ -395,7 +395,7 @@
 - improve documentation
 
 
-2016-12-01
+2018-02-24
 Christian Werner
 mailto:[email protected]
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sqliteodbc-0.9995/VERSION 
new/sqliteodbc-0.9996/VERSION
--- old/sqliteodbc-0.9995/VERSION       2016-12-01 06:14:30.000000000 +0100
+++ new/sqliteodbc-0.9996/VERSION       2017-06-10 09:17:50.000000000 +0200
@@ -1 +1 @@
-0.9995
+0.9996
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sqliteodbc-0.9995/debian/changelog 
new/sqliteodbc-0.9996/debian/changelog
--- old/sqliteodbc-0.9995/debian/changelog      2016-12-01 06:41:38.000000000 
+0100
+++ new/sqliteodbc-0.9996/debian/changelog      2018-02-24 10:30:57.000000000 
+0100
@@ -1,6 +1,6 @@
-sqliteodbc (0.9995-1) unstable; urgency=low
+sqliteodbc (0.9996-1) unstable; urgency=low
 
   * automatically recreated by configure
 
- -- Christian Werner <[email protected]>  Thu, 01 Dec 2016 06:41:36 +0100
+ -- Christian Werner <[email protected]>  Sat, 24 Feb 2018 10:30:55 +0100
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sqliteodbc-0.9995/mingw-cross-build.sh 
new/sqliteodbc-0.9996/mingw-cross-build.sh
--- old/sqliteodbc-0.9995/mingw-cross-build.sh  2016-12-01 02:11:08.000000000 
+0100
+++ new/sqliteodbc-0.9996/mingw-cross-build.sh  2018-02-24 10:33:50.000000000 
+0100
@@ -25,8 +25,8 @@
 set -e
 
 VER2=2.8.17
-VER3=3.15.2
-VER3X=3150200
+VER3=3.22.0
+VER3X=3220000
 VERZ=1.2.8
 TCCVER=0.9.26
 
@@ -272,7 +272,7 @@
 echo "Preparing sqlite3 ..."
 echo "====================="
 test -r sqlite-src-${VER3X}.zip || \
-    wget -c http://www.sqlite.org/2014/sqlite-src-${VER3X}.zip \
+    wget -c http://www.sqlite.org/2018/sqlite-src-${VER3X}.zip \
       --no-check-certificate
 test -r sqlite-src-${VER3X}.zip || exit 1
 test -r extension-functions.c ||
@@ -290,6 +290,35 @@
 unzip sqlite-src-${VER3X}.zip
 ln -sf sqlite-src-${VER3X} sqlite3
 
+test "$VER3" = "3.22.0" \
+  && patch sqlite3/tool/mkshellc.tcl <<'EOD'
+--- sqlite3.orig/tool/mksheelc.tcl     2018-01-22 19:57:25.000000000 +0100
++++ sqlite3/tool/mksheelc.tcl  2018-02-21 19:25:44.000000000 +0100
+@@ -29,7 +29,7 @@
+ ** edit the src/shell.c.in" and/or some of the other files that are included
+ ** by "src/shell.c.in", then rerun the tool/mkshellc.tcl script.
+ */}
+-set in [open $topdir/src/shell.c.in rb]
++set in [open $topdir/src/shell.c.in r]
+ proc omit_redundant_typedefs {line} {
+   global typedef_seen
+   if {[regexp {^typedef .*;} $line]} {
+@@ -46,7 +46,7 @@
+   if {[regexp {^INCLUDE } $lx]} {
+     set cfile [lindex $lx 1]
+     puts $out "/************************* Begin $cfile ******************/"
+-    set in2 [open $topdir/src/$cfile rb]
++    set in2 [open $topdir/src/$cfile r]
+     while {![eof $in2]} {
+       set lx [omit_redundant_typedefs [gets $in2]]
+       if {[regexp {^#include "sqlite} $lx]} continue
+EOD
+
+test -r sqlite3/tool/mkshellc.tcl && \
+  sed -i -e 's/ rb/ r/g' sqlite3/tool/mkshellc.tcl
+test -r sqlite3/src/shell.c.in &&
+  ( cd sqlite3/src ; tclsh ../tool/mkshellc.tcl > shell.c )
+
 patch sqlite3/main.mk <<'EOD'
 --- sqlite3.orig/main.mk        2007-03-31 14:32:21.000000000 +0200
 +++ sqlite3/main.mk     2007-04-02 11:04:50.000000000 +0200
@@ -380,7 +409,8 @@
   -a "$VER3" != "3.9.1" -a "$VER3" != "3.9.2" -a "$VER3" != "3.10.0" \
   -a "$VER3" != "3.10.2" -a "$VER3" != "3.12.2" -a "$VER3" != "3.13.0" \
   -a "$VER3" != "3.14.0" -a "$VER3" != "3.14.1" -a "$VER3" != "3.15.0" \
-  -a "$VER3" != "3.15.1" -a "$VER3" != "3.15.2" \
+  -a "$VER3" != "3.15.1" -a "$VER3" != "3.15.2" -a "$VER3" != "3.19.3" \
+  -a "$VER3" != "3.22.0" \
   && patch sqlite3/src/libshell.c <<'EOD'
 --- sqlite3.orig/src/libshell.c  2007-01-08 23:40:05.000000000 +0100
 +++ sqlite3/src/libshell.c  2007-01-10 18:35:43.000000000 +0100
@@ -563,8 +593,26 @@
  #else
 EOD
 
+test "$VER3" = "3.22.0" \
+  && patch sqlite3/src/os_win.h <<'EOD'
+--- sqlite3.orig/src/os_win.h       2018-01-22 19:57:25.000000000 +0100
++++ sqlite3/src/os_win.h    2018-02-21 21:13:46.000000000 +0100
+@@ -22,8 +22,9 @@
+ 
+ #ifdef __CYGWIN__
+ # include <sys/cygwin.h>
+-# include <errno.h> /* amalgamator: dontcache */
+ #endif
++#include <sys/stat.h> /* amalgamator: dontcache */
++#include <errno.h> /* amalgamator: dontcache */
+ 
+ /*
+ ** Determine if we are dealing with Windows NT.
+EOD
+
 test "$VER3" = "3.13.0" -o "$VER3" = "3.14.0" -o "$VER3" = "3.14.1" \
   -o "$VER3" = "3.15.0" -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" \
+  -o "$VER3" = "3.19.3" -o "$VER3" = "3.22.0" \
   && patch sqlite3/src/libshell.c <<'EOD'
 --- sqlite3.orig/src/libshell.c.orig   2016-05-18 13:06:59.000000000 +0200
 +++ sqlite3/src/libshell.c     2016-06-04 17:02:05.000000000 +0200
@@ -702,7 +750,8 @@
   -a "$VER3" != "3.9.1" -a "$VER3" != "3.9.2" -a "$VER3" != "3.10.0" \
   -a "$VER3" != "3.10.2" -a "$VER3" != "3.12.2" -a "$VER3" != "3.13.0" \
   -a "$VER3" != "3.14.0" -a "$VER3" != "3.14.1" -a "$VER3" != "3.15.0" \
-  -a "$VER3" != "3.15.1" -a "$VER3" != "3.15.2" \
+  -a "$VER3" != "3.15.1" -a "$VER3" != "3.15.2" -a "$VER3" != "3.19.3" \
+  -a "$VER3" != "3.22.0" \
   && patch -d sqlite3 -p1 <<'EOD'
 diff -u sqlite3.orig/src/build.c sqlite3/src/build.c
 --- sqlite3.orig/src/build.c   2007-01-09 14:53:04.000000000 +0100
@@ -766,14 +815,14 @@
   -a "$VER3" != "3.9.2" -a "$VER3" != "3.10.0" -a "$VER3" != "3.10.2" \
   -a "$VER3" != "3.12.2" -a "$VER3" != "3.13.0" -a "$VER3" != "3.14.0" \
   -a "$VER3" != "3.14.1" -a "$VER3" != "3.15.0" -a "$VER3" != "3.15.1" \
-  -a "$VER3" != "3.15.2" \
+  -a "$VER3" != "3.15.2" -a "$VER3" != "3.19.3" -a "$VER3" != "3.22.0" \
   && patch -d sqlite3 -p1 <<'EOD'
 diff -u sqlite3.orig/src/tclsqlite.c sqlite3/src/tclsqlite.c
 --- sqlite3.orig/src/tclsqlite.c       2007-04-06 17:02:14.000000000 +0200
 +++ sqlite3/src/tclsqlite.c    2007-04-10 07:47:49.000000000 +0200
 @@ -14,6 +14,7 @@
  **
- ** $Id: mingw-cross-build.sh,v 1.106 2016/12/01 01:11:03 chw Exp chw $
+ ** $Id: mingw-cross-build.sh,v 1.107 2018/02/24 09:33:40 chw Exp chw $
  */
 +#ifndef NO_TCL     /* Omit this whole file if TCL is unavailable */
  #include "tcl.h"
@@ -792,7 +841,7 @@
   -o "$VER3" = "3.9.2" -o "$VER3" = "3.10.0" -o "$VER3" = "3.10.2" \
   -o "$VER3" = "3.12.2" -o "$VER3" = "3.13.0" -o "$VER3" = "3.14.0" \
   -o "$VER3" = "3.14.1" -o "$VER3" = "3.15.0" -o "$VER3" = "3.15.1" \
-  -o "$VER3" = "3.15.2" \
+  -o "$VER3" = "3.15.2" -o "$VER3" = "3.19.3" -o "$VER3" = "3.22.0" \
   && patch -d sqlite3 -p1 <<'EOD'
 --- sqlite3.orig/src/tclsqlite.c    2015-01-16 14:47:26.000000000 +0100
 +++ sqlite3/src/tclsqlite.c 2015-01-19 17:56:26.517386413 +0100
@@ -964,7 +1013,8 @@
   -a "$VER3" != "3.9.1" -a "$VER3" != "3.9.2" -a "$VER3" != "3.10.0" \
   -a "$VER3" != "3.10.2" -a "$VER3" != "3.12.2" -a "$VER3" != "3.13.0" \
   -a "$VER3" != "3.14.0" -a "$VER3" != "3.14.1" -a "$VER3" != "3.15.0" \
-  -a "$VER3" != "3.15.1" -a "$VER3" != "3.15.2" \
+  -a "$VER3" != "3.15.1" -a "$VER3" != "3.15.2" -a "$VER3" != "3.19.3" \
+  -a "$VER3" != "3.22.0" \
   && patch -d sqlite3 -p1 <<'EOD'
 --- sqlite3.orig/ext/fts3/fts3.c 2008-02-02 17:24:34.000000000 +0100
 +++ sqlite3/ext/fts3/fts3.c      2008-03-16 11:29:02.000000000 +0100
@@ -1062,6 +1112,7 @@
   -a "$VER3" != "3.10.0" -a "$VER3" != "3.10.2" -a "$VER3" != "3.12.2" \
   -a "$VER3" != "3.13.0" -a "$VER3" != "3.14.0" -a "$VER3" != "3.14.1" \
   -a "$VER3" != "3.15.0" -a "$VER3" != "3.15.1" -a "$VER3" != "3.15.2" \
+  -a "$VER3" != "3.19.3" -a "$VER3" != "3.22.0" \
   && patch -d sqlite3 -p1 <<'EOD'
 --- sqlite3.orig/ext/fts3/fts3_hash.c    2007-11-24 01:41:52.000000000 +0100
 +++ sqlite3/ext/fts3/fts3_hash.c 2008-03-16 11:39:57.000000000 +0100
@@ -1409,7 +1460,8 @@
   -a "$VER3" != "3.9.1" -a "$VER3" != "3.9.2" -a "$VER3" != "3.10.0" \
   -a "$VER3" != "3.10.2" -a "$VER3" != "3.12.2" -a "$VER3" != "3.13.0" \
   -a "$VER3" != "3.14.0" -a "$VER3" != "3.14.1" -a "$VER3" != "3.15.0" \
-  -a "$VER3" != "3.15.1" -a "$VER3" != "3.15.2" \
+  -a "$VER3" != "3.15.1" -a "$VER3" != "3.15.2" -a "$VER3" != "3.19.3" \
+  -a "$VER3" != "3.22.0" \
   && patch -d sqlite3 -p1 <<'EOD'
 --- sqlite3.orig/ext/rtree/rtree.c     2008-07-16 16:43:35.000000000 +0200
 +++ sqlite3/ext/rtree/rtree.c  2008-07-17 08:59:53.000000000 +0200
@@ -1491,7 +1543,8 @@
   -o "$VER3" = "3.9.1" -o "$VER3" = "3.9.2" -o "$VER3" = "3.10.0" \
   -o "$VER3" = "3.10.2" -o "$VER3" = "3.12.2" -o "$VER3" = "3.13.0" \
   -o "$VER3" = "3.14.0" -o "$VER3" = "3.14.1" -o "$VER3" = "3.15.0" \
-  -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" \
+  -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" -o "$VER3" = "3.19.3" \
+  -o "$VER3" = "3.22.0" \
   && patch -d sqlite3 -p1 <<'EOD'
 --- sqlite3.orig/ext/fts3/fts3_aux.c   2011-06-24 09:06:08.000000000 +0200
 +++ sqlite3/ext/fts3/fts3_aux.c        2011-06-25 06:44:08.000000000 +0200
@@ -1546,6 +1599,7 @@
   -o "$VER3" = "3.10.0" -o "$VER3" = "3.10.2" -o "$VER3" = "3.12.2" \
   -o "$VER3" = "3.13.0" -o "$VER3" = "3.14.0" -o "$VER3" = "3.14.1" \
   -o "$VER3" = "3.15.0" -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" \
+  -o "$VER3" = "3.19.3" -o "$VER3" = "3.22.0" \
   && patch -d sqlite3 -p1 <<'EOD'
 --- sqlite3.orig/ext/fts3/fts3.c       2011-09-19 20:46:52.000000000 +0200
 +++ sqlite3/ext/fts3/fts3.c    2011-09-20 09:47:40.000000000 +0200
@@ -1584,7 +1638,8 @@
   -o "$VER3" = "3.9.1" -o "$VER3" = "3.9.2" -o "$VER3" = "3.10.0" \
   -o "$VER3" = "3.10.2" -o "$VER3" = "3.12.2" -o "$VER3" = "3.13.0" \
   -o "$VER3" = "3.14.0" -o "$VER3" = "3.14.1" -o "$VER3" = "3.15.0" \
-  -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" \
+  -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" -o "$VER3" = "3.19.3" \
+  -o "$VER3" = "3.22.0" \
   && patch -d sqlite3 -p1 <<'EOD'
 --- sqlite3.orig/ext/fts3/fts3_expr.c  2011-06-24 09:06:08.000000000 +0200
 +++ sqlite3/ext/fts3/fts3_expr.c       2011-06-25 06:47:00.000000000 +0200
@@ -1744,7 +1799,8 @@
   -o "$VER3" = "3.9.1" -o "$VER3" = "3.9.2" -o "$VER3" = "3.10.0" \
   -o "$VER3" = "3.10.2" -o "$VER3" = "3.12.2" -o "$VER3" = "3.13.0" \
   -o "$VER3" = "3.14.0" -o "$VER3" = "3.14.1" -o "$VER3" = "3.15.0" \
-  -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" \
+  -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" -o "$VER3" = "3.19.3" \
+  -o "$VER3" = "3.22.0" \
   && patch -d sqlite3 -p1 <<'EOD'
 --- sqlite3.orig/src/loadext.c       2013-09-16 06:56:48.000000000 +0200
 +++ sqlite3/src/loadext.c   2013-09-16 06:58:14.000000000 +0200
@@ -1773,6 +1829,7 @@
   -o "$VER3" = "3.10.0" -o "$VER3" = "3.10.2" -o "$VER3" = "3.12.2" \
   -o "$VER3" = "3.13.0" -o "$VER3" = "3.14.0" -o "$VER3" = "3.14.1" \
   -o "$VER3" = "3.15.0" -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" \
+  -o "$VER3" = "3.19.3" -o "$VER3" = "3.22.0" \
   && patch -d sqlite3 -p1 <<'EOD'
 --- sqlite3.orig/ext/fts3/fts3.c      2014-03-26 10:26:28.000000000 +0100
 +++ sqlite3/ext/fts3/fts3.c  2014-03-26 16:54:39.000000000 +0100
@@ -1793,7 +1850,8 @@
   -o "$VER3" = "3.9.1" -o "$VER3" = "3.9.2" -o "$VER3" = "3.10.0" \
   -o "$VER3" = "3.10.2" -o "$VER3" = "3.12.2" -o "$VER3" = "3.13.0" \
   -o "$VER3" = "3.14.0" -o "$VER3" = "3.14.1" -o "$VER3" = "3.15.0" \
-  -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" \
+  -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" -o "$VER3" = "3.19.3" \
+  -o "$VER3" = "3.22.0" \
   && patch -d sqlite3 -p1 <<'EOD'
 --- sqlite3.orig/src/threads.c      2014-10-17 13:38:27.000000000 +0200
 +++ sqlite3/src/threads.c   2014-10-26 13:40:26.000000000 +0100
@@ -1812,6 +1870,7 @@
   -o "$VER3" = "3.10.0" -o "$VER3" = "3.10.2" -o "$VER3" = "3.12.2" \
   -o "$VER3" = "3.13.0" -o "$VER3" = "3.14.0" -o "$VER3" = "3.14.1" \
   -o "$VER3" = "3.15.0" -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" \
+  -o "$VER3" = "3.19.3" -o "$VER3" = "3.22.0" \
   && patch sqlite3/ext/fts5/tool/mkfts5c.tcl <<'EOD'
 --- mkfts5c.tcl.orig   2015-10-14 14:53:26.000000000 +0200
 +++ mkfts5c.tcl        2015-10-15 08:19:25.000000000 +0200
@@ -1831,6 +1890,7 @@
 test "$VER3" = "3.10.0" -o "$VER3" = "3.10.2" -o "$VER3" = "3.12.2" \
   -o "$VER3" = "3.13.0" -o "$VER3" = "3.14.0" -o "$VER3" = "3.14.1" \
   -o "$VER3" = "3.15.0" -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" \
+  -o "$VER3" = "3.19.3" -o "$VER3" = "3.22.0" \
   && perl -pi -e 's/ rb\]/ r\]/g' sqlite3/tool/mkopcodec.tcl \
       sqlite3/tool/tostr.tcl sqlite3/tool/addopcodes.tcl
 
@@ -1914,7 +1974,7 @@
   -o "$VER3" = "3.9.2" -o "$VER3" = "3.10.0" -o "$VER3" = "3.10.2" \
   -o "$VER3" = "3.12.2" -o "$VER3" = "3.13.0" -o "$VER3" = "3.14.0" \
   -o "$VER3" = "3.14.1" -o "$VER3" = "3.15.0" -o "$VER3" = "3.15.1" \
-  -o "$VER3" = "3.15.2" \
+  -o "$VER3" = "3.15.2" -o "$VER3" = "3.19.3" -o "$VER3" = "3.22.0" \
   && patch sqlite3/sqlite3.c <<'EOD'
 --- sqlite3.c.orig      2015-09-18 17:17:58.000000000 +0200
 +++ sqlite3.c   2015-09-18 17:50:01.000000000 +0200
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sqliteodbc-0.9995/mingw64-cross-build.sh 
new/sqliteodbc-0.9996/mingw64-cross-build.sh
--- old/sqliteodbc-0.9995/mingw64-cross-build.sh        2016-12-01 
02:11:09.000000000 +0100
+++ new/sqliteodbc-0.9996/mingw64-cross-build.sh        2018-02-24 
10:33:51.000000000 +0100
@@ -23,8 +23,8 @@
 set -e
 
 VER2=2.8.17
-VER3=3.15.2
-VER3X=3150200
+VER3=3.22.0
+VER3X=3220000
 VERZ=1.2.8
 
 nov2=false
@@ -261,7 +261,7 @@
 echo "Preparing sqlite3 ..."
 echo "====================="
 test -r sqlite-src-${VER3X}.zip || \
-    wget -c http://www.sqlite.org/2014/sqlite-src-${VER3X}.zip \
+    wget -c http://www.sqlite.org/2018/sqlite-src-${VER3X}.zip \
       --no-check-certificate
 test -r sqlite-src-${VER3X}.zip || exit 1
 test -r extension-functions.c ||
@@ -279,6 +279,35 @@
 unzip sqlite-src-${VER3X}.zip
 ln -sf sqlite-src-${VER3X} sqlite3
 
+test "$VER3" = "3.22.0" \
+  && patch sqlite3/tool/mkshellc.tcl <<'EOD'
+--- sqlite3.orig/tool/mksheelc.tcl     2018-01-22 19:57:25.000000000 +0100
++++ sqlite3/tool/mksheelc.tcl  2018-02-21 19:25:44.000000000 +0100
+@@ -29,7 +29,7 @@
+ ** edit the src/shell.c.in" and/or some of the other files that are included
+ ** by "src/shell.c.in", then rerun the tool/mkshellc.tcl script.
+ */}
+-set in [open $topdir/src/shell.c.in rb]
++set in [open $topdir/src/shell.c.in r]
+ proc omit_redundant_typedefs {line} {
+   global typedef_seen
+   if {[regexp {^typedef .*;} $line]} {
+@@ -46,7 +46,7 @@
+   if {[regexp {^INCLUDE } $lx]} {
+     set cfile [lindex $lx 1]
+     puts $out "/************************* Begin $cfile ******************/"
+-    set in2 [open $topdir/src/$cfile rb]
++    set in2 [open $topdir/src/$cfile r]
+     while {![eof $in2]} {
+       set lx [omit_redundant_typedefs [gets $in2]]
+       if {[regexp {^#include "sqlite} $lx]} continue
+EOD
+
+test -r sqlite3/tool/mkshellc.tcl && \
+  sed -i -e 's/ rb/ r/g' sqlite3/tool/mkshellc.tcl
+test -r sqlite3/src/shell.c.in &&
+  ( cd sqlite3/src ; tclsh ../tool/mkshellc.tcl > shell.c )
+
 patch sqlite3/main.mk <<'EOD'
 --- sqlite3.orig/main.mk        2007-03-31 14:32:21.000000000 +0200
 +++ sqlite3/main.mk     2007-04-02 11:04:50.000000000 +0200
@@ -369,7 +398,8 @@
   -a "$VER3" != "3.9.1" -a "$VER3" != "3.9.2" -a "$VER3" != "3.10.0" \
   -a "$VER3" != "3.10.2" -a "$VER3" != "3.12.2" -a "$VER3" != "3.13.0" \
   -a "$VER3" != "3.14.0" -a "$VER3" != "3.14.1" -a "$VER3" != "3.15.0" \
-  -a "$VER3" != "3.15.1" -a "$VER3" != "3.15.2" \
+  -a "$VER3" != "3.15.1" -a "$VER3" != "3.15.2" -a "$VER3" != "3.19.3" \
+  -a "$VER3" != "3.22.0" \
   && patch sqlite3/src/libshell.c <<'EOD'
 --- sqlite3.orig/src/libshell.c  2007-01-08 23:40:05.000000000 +0100
 +++ sqlite3/src/libshell.c  2007-01-10 18:35:43.000000000 +0100
@@ -552,8 +582,26 @@
  #else
 EOD
 
+test "$VER3" = "3.22.0" \
+  && patch sqlite3/src/os_win.h <<'EOD'
+--- sqlite3.orig/src/os_win.h       2018-01-22 19:57:25.000000000 +0100
++++ sqlite3/src/os_win.h    2018-02-21 21:13:46.000000000 +0100
+@@ -22,8 +22,9 @@
+ 
+ #ifdef __CYGWIN__
+ # include <sys/cygwin.h>
+-# include <errno.h> /* amalgamator: dontcache */
+ #endif
++#include <sys/stat.h> /* amalgamator: dontcache */
++#include <errno.h> /* amalgamator: dontcache */
+ 
+ /*
+ ** Determine if we are dealing with Windows NT.
+EOD
+
 test "$VER3" = "3.13.0" -o "$VER3" = "3.14.0" -o "$VER3" = "3.14.1" \
   -o "$VER3" = "3.15.0" -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" \
+  -o "$VER3" = "3.19.3" -o "$VER3" = "3.22.0" \
   && patch sqlite3/src/libshell.c <<'EOD'
 --- sqlite3.orig/src/libshell.c.orig   2016-05-18 13:06:59.000000000 +0200
 +++ sqlite3/src/libshell.c     2016-06-04 17:02:05.000000000 +0200
@@ -691,7 +739,8 @@
   -a "$VER3" != "3.9.1" -a "$VER3" != "3.9.2" -a "$VER3" != "3.10.0" \
   -a "$VER3" != "3.10.2" -a "$VER3" != "3.12.2" -a "$VER3" != "3.13.0" \
   -a "$VER3" != "3.14.0" -a "$VER3" != "3.14.1" -a "$VER3" != "3.15.0" \
-  -a "$VER3" != "3.15.1" -a "$VER3" != "3.15.2" \
+  -a "$VER3" != "3.15.1" -a "$VER3" != "3.15.2" -a "$VER3" != "3.19.3" \
+  -a "$VER3" != "3.22.0" \
   && patch -d sqlite3 -p1 <<'EOD'
 diff -u sqlite3.orig/src/build.c sqlite3/src/build.c
 --- sqlite3.orig/src/build.c   2007-01-09 14:53:04.000000000 +0100
@@ -755,14 +804,14 @@
   -a "$VER3" != "3.9.2" -a "$VER3" != "3.10.0" -a "$VER3" != "3.10.2" \
   -a "$VER3" != "3.12.2" -a "$VER3" != "3.13.0" -a "$VER3" != "3.14.0" \
   -a "$VER3" != "3.14.1" -a "$VER3" != "3.15.0" -a "$VER3" != "3.15.1" \
-  -a "$VER3" != "3.15.2" \
+  -a "$VER3" != "3.15.2" -a "$VER3" != "3.19.3" -a "$VER3" != "3.22.0" \
   && patch -d sqlite3 -p1 <<'EOD'
 diff -u sqlite3.orig/src/tclsqlite.c sqlite3/src/tclsqlite.c
 --- sqlite3.orig/src/tclsqlite.c       2007-04-06 17:02:14.000000000 +0200
 +++ sqlite3/src/tclsqlite.c    2007-04-10 07:47:49.000000000 +0200
 @@ -14,6 +14,7 @@
  **
- ** $Id: mingw64-cross-build.sh,v 1.66 2016/12/01 01:11:03 chw Exp chw $
+ ** $Id: mingw64-cross-build.sh,v 1.67 2018/02/24 09:33:40 chw Exp chw $
  */
 +#ifndef NO_TCL     /* Omit this whole file if TCL is unavailable */
  #include "tcl.h"
@@ -781,7 +830,7 @@
   -o "$VER3" = "3.9.2" -o "$VER3" = "3.10.0" -o "$VER3" = "3.10.2" \
   -o "$VER3" = "3.12.2" -o "$VER3" = "3.13.0" -o "$VER3" = "3.14.0" \
   -o "$VER3" = "3.14.1" -o "$VER3" = "3.15.0" -o "$VER3" = "3.15.1" \
-  -o "$VER3" = "3.15.2" \
+  -o "$VER3" = "3.15.2" -o "$VER3" = "3.19.3" -o "$VER3" = "3.22.0" \
   && patch -d sqlite3 -p1 <<'EOD'
 --- sqlite3.orig/src/tclsqlite.c    2015-01-16 14:47:26.000000000 +0100
 +++ sqlite3/src/tclsqlite.c 2015-01-19 17:56:26.517386413 +0100
@@ -953,7 +1002,8 @@
   -a "$VER3" != "3.9.1" -a "$VER3" != "3.9.2" -a "$VER3" != "3.10.0" \
   -a "$VER3" != "3.10.2" -a "$VER3" != "3.12.2" -a "$VER3" != "3.13.0" \
   -a "$VER3" != "3.14.0" -a "$VER3" != "3.14.1" -a "$VER3" != "3.15.0" \
-  -a "$VER3" != "3.15.1" -a "$VER3" != "3.15.2" \
+  -a "$VER3" != "3.15.1" -a "$VER3" != "3.15.2" -a "$VER3" != "3.19.3" \
+  -a "$VER3" != "3.22.0" \
   && patch -d sqlite3 -p1 <<'EOD'
 --- sqlite3.orig/ext/fts3/fts3.c 2008-02-02 17:24:34.000000000 +0100
 +++ sqlite3/ext/fts3/fts3.c      2008-03-16 11:29:02.000000000 +0100
@@ -1104,6 +1154,7 @@
   -a "$VER3" != "3.10.0" -a "$VER3" != "3.10.2" -a "$VER3" != "3.12.2" \
   -a "$VER3" != "3.13.0" -a "$VER3" != "3.14.0" -a "$VER3" != "3.14.1" \
   -a "$VER3" != "3.15.0" -a "$VER3" != "3.15.1" -a "$VER3" != "3.15.2" \
+  -a "$VER3" != "3.19.3" -a "$VER3" != "3.22.0" \
   && patch -d sqlite3 -p1 <<'EOD'
 --- sqlite3.orig/ext/fts3/fts3_hash.c    2007-11-24 01:41:52.000000000 +0100
 +++ sqlite3/ext/fts3/fts3_hash.c 2008-03-16 11:39:57.000000000 +0100
@@ -1451,7 +1502,8 @@
   -a "$VER3" != "3.9.1" -a "$VER3" != "3.9.2" -a "$VER3" != "3.10.0" \
   -a "$VER3" != "3.10.2" -a "$VER3" != "3.12.2" -a "$VER3" != "3.13.0" \
   -a "$VER3" != "3.14.0" -a "$VER3" != "3.14.1" -a "$VER3" != "3.15.0" \
-  -a "$VER3" != "3.15.1" -a "$VER3" != "3.15.2" \
+  -a "$VER3" != "3.15.1" -a "$VER3" != "3.15.2" -a "$VER3" != "3.19.3" \
+  -a "$VER3" != "3.22.0" \
   && patch -d sqlite3 -p1 <<'EOD'
 --- sqlite3.orig/ext/rtree/rtree.c     2008-07-16 16:43:35.000000000 +0200
 +++ sqlite3/ext/rtree/rtree.c  2008-07-17 08:59:53.000000000 +0200
@@ -1533,7 +1585,8 @@
   -o "$VER3" = "3.9.1" -o "$VER3" = "3.9.2" -o "$VER3" = "3.10.0" \
   -o "$VER3" = "3.10.2" -o "$VER3" = "3.12.2" -o "$VER3" = "3.13.0" \
   -o "$VER3" = "3.14.0" -o "$VER3" = "3.14.1" -o "$VER3" = "3.15.0" \
-  -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" \
+  -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" -o "$VER3" = "3.19.3" \
+  -o "$VER3" = "3.22.0" \
   && patch -d sqlite3 -p1 <<'EOD'
 --- sqlite3.orig/ext/fts3/fts3_aux.c   2011-06-24 09:06:08.000000000 +0200
 +++ sqlite3/ext/fts3/fts3_aux.c        2011-06-25 06:44:08.000000000 +0200
@@ -1588,6 +1641,7 @@
   -o "$VER3" = "3.10.0" -o "$VER3" = "3.10.2" -o "$VER3" = "3.12.2" \
   -o "$VER3" = "3.13.0" -o "$VER3" = "3.14.0" -o "$VER3" = "3.14.1" \
   -o "$VER3" = "3.15.0" -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" \
+  -o "$VER3" = "3.19.3" -o "$VER3" = "3.22.0" \
   && patch -d sqlite3 -p1 <<'EOD'
 --- sqlite3.orig/ext/fts3/fts3.c       2011-09-19 20:46:52.000000000 +0200
 +++ sqlite3/ext/fts3/fts3.c    2011-09-20 09:47:40.000000000 +0200
@@ -1626,7 +1680,8 @@
   -o "$VER3" = "3.9.1" -o "$VER3" = "3.9.2" -o "$VER3" = "3.10.0" \
   -o "$VER3" = "3.10.2" -o "$VER3" = "3.12.2" -o "$VER3" = "3.13.0" \
   -o "$VER3" = "3.14.0" -o "$VER3" = "3.14.1" -o "$VER3" = "3.15.0" \
-  -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" \
+  -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" -o "$VER3" = "3.19.3" \
+  -o "$VER3" = "3.22.0" \
   && patch -d sqlite3 -p1 <<'EOD'
 --- sqlite3.orig/ext/fts3/fts3_expr.c  2011-06-24 09:06:08.000000000 +0200
 +++ sqlite3/ext/fts3/fts3_expr.c       2011-06-25 06:47:00.000000000 +0200
@@ -1786,7 +1841,8 @@
   -o "$VER3" = "3.9.1" -o "$VER3" = "3.9.2" -o "$VER3" = "3.10.0" \
   -o "$VER3" = "3.10.2" -o "$VER3" = "3.12.2" -o "$VER3" = "3.13.0" \
   -o "$VER3" = "3.14.0" -o "$VER3" = "3.14.1" -o "$VER3" = "3.15.0" \
-  -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" \
+  -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" -o "$VER3" = "3.19.3" \
+  -o "$VER3" = "3.22.0" \
   && patch -d sqlite3 -p1 <<'EOD'
 --- sqlite3.orig/src/loadext.c       2013-09-16 06:56:48.000000000 +0200
 +++ sqlite3/src/loadext.c   2013-09-16 06:58:14.000000000 +0200
@@ -1815,6 +1871,7 @@
   -o "$VER3" = "3.10.0" -o "$VER3" = "3.10.2" -o "$VER3" = "3.12.2" \
   -o "$VER3" = "3.13.0" -o "$VER3" = "3.14.0" -o "$VER3" = "3.14.1" \
   -o "$VER3" = "3.15.0" -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" \
+  -o "$VER3" = "3.19.3" -o "$VER3" = "3.22.0" \
   && patch -d sqlite3 -p1 <<'EOD'
 --- sqlite3.orig/ext/fts3/fts3.c      2014-03-26 10:26:28.000000000 +0100
 +++ sqlite3/ext/fts3/fts3.c  2014-03-26 16:54:39.000000000 +0100
@@ -1835,7 +1892,8 @@
   -o "$VER3" = "3.9.1" -o "$VER3" = "3.9.2" -o "$VER3" = "3.10.0" \
   -o "$VER3" = "3.10.2" -o "$VER3" = "3.12.2" -o "$VER3" = "3.13.0" \
   -o "$VER3" = "3.14.0" -o "$VER3" = "3.14.1" -o "$VER3" = "3.15.0" \
-  -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" \
+  -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" -o "$VER3" = "3.19.3" \
+  -o "$VER3" = "3.22.0" \
   && patch -d sqlite3 -p1 <<'EOD'
 --- sqlite3.orig/src/threads.c      2014-10-17 13:38:27.000000000 +0200
 +++ sqlite3/src/threads.c   2014-10-26 13:40:26.000000000 +0100
@@ -1854,6 +1912,7 @@
   -o "$VER3" = "3.10.0" -o "$VER3" = "3.10.2" -o "$VER3" = "3.12.2" \
   -o "$VER3" = "3.13.0" -o "$VER3" = "3.14.0" -o "$VER3" = "3.14.1" \
   -o "$VER3" = "3.15.0" -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" \
+  -o "$VER3" = "3.19.3" -o "$VER3" = "3.22.0" \
   && patch sqlite3/ext/fts5/tool/mkfts5c.tcl <<'EOD'
 --- mkfts5c.tcl.orig   2015-10-14 14:53:26.000000000 +0200
 +++ mkfts5c.tcl        2015-10-15 08:19:25.000000000 +0200
@@ -1873,6 +1932,7 @@
 test "$VER3" = "3.10.0" -o "$VER3" = "3.10.2" -o "$VER3" = "3.12.2" \
   -o "$VER3" = "3.13.0" -o "$VER3" = "3.14.0" -o "$VER3" = "3.14.1" \
   -o "$VER3" = "3.15.0" -o "$VER3" = "3.15.1" -o "$VER3" = "3.15.2" \
+  -o "$VER3" = "3.19.3" -o "$VER3" = "3.22.0" \
   && perl -pi -e 's/ rb\]/ r\]/g' sqlite3/tool/mkopcodec.tcl \
       sqlite3/tool/tostr.tcl sqlite3/tool/addopcodes.tcl
 
@@ -1954,7 +2014,7 @@
   -o "$VER3" = "3.9.2" -o "$VER3" = "3.10.0" -o "$VER3" = "3.10.2" \
   -o "$VER3" = "3.12.2" -o "$VER3" = "3.13.0" -o "$VER3" = "3.14.0" \
   -o "$VER3" = "3.14.1" -o "$VER3" = "3.15.0" -o "$VER3" = "3.15.1" \
-  -o "$VER3" = "3.15.2" \
+  -o "$VER3" = "3.15.2" -o "$VER3" = "3.19.3" -o "$VER3" = "3.22.0" \
   && patch sqlite3/sqlite3.c <<'EOD'
 --- sqlite3.c.orig      2015-09-18 17:17:58.000000000 +0200
 +++ sqlite3.c   2015-09-18 17:50:01.000000000 +0200
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sqliteodbc-0.9995/sqlite+tcc.c 
new/sqliteodbc-0.9996/sqlite+tcc.c
--- old/sqliteodbc-0.9995/sqlite+tcc.c  2016-07-18 06:15:34.000000000 +0200
+++ new/sqliteodbc-0.9996/sqlite+tcc.c  2018-02-21 21:33:25.000000000 +0100
@@ -149,7 +149,11 @@
   SYM(rollback_hook),
   SYM(set_authorizer),
   SYM(set_auxdata),
+#if SQLITE_VERSION_NUMBER >= 3022000
+  SYM2(snprintf, xsnprintf),
+#else
   SYM(snprintf),
+#endif
   SYM(step),
   SYM(table_column_metadata),
   SYM(thread_cleanup),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sqliteodbc-0.9995/sqlite3odbc.c 
new/sqliteodbc-0.9996/sqlite3odbc.c
--- old/sqliteodbc-0.9995/sqlite3odbc.c 2016-11-30 19:09:32.000000000 +0100
+++ new/sqliteodbc-0.9996/sqlite3odbc.c 2018-02-24 10:33:25.000000000 +0100
@@ -2,9 +2,9 @@
  * @file sqlite3odbc.c
  * SQLite3 ODBC Driver main module.
  *
- * $Id: sqlite3odbc.c,v 1.176 2016/11/20 19:00:52 chw Exp chw $
+ * $Id: sqlite3odbc.c,v 1.177 2018/02/24 09:32:47 chw Exp chw $
  *
- * Copyright (c) 2004-2016 Christian Werner <[email protected]>
+ * Copyright (c) 2004-2018 Christian Werner <[email protected]>
  *
  * See the file "license.terms" for information on usage
  * and redistribution of this file and for a
@@ -910,28 +910,6 @@
                    uc[i++] = c;
                    ++str;
                }
-           } else if (c < 0xfc) {
-               if ((str[1] & 0xc0) == 0x80 && (str[2] & 0xc0) == 0x80 &&
-                   (str[3] & 0xc0) == 0x80 && (str[4] & 0xc0) == 0x80) {
-                   unsigned long t = ((c & 0x01) << 24) |
-                       ((str[1] & 0x3f) << 18) | ((str[2] & 0x3f) << 12) |
-                       ((str[3] & 0x3f) << 6) | (str[4] & 0x3f);
-
-                   if (sizeof (SQLWCHAR) == 2 * sizeof (char) &&
-                       t >= 0x10000) {
-                       t -= 0x10000;
-                       uc[i++] = 0xd800 | ((t >> 10) & 0x3ff);
-                       if (i >= ucLen) {
-                           break;
-                       }
-                       t = 0xdc00 | (t & 0x3ff);
-                   }
-                   uc[i++] = t;
-                   str += 5;
-               } else {
-                   uc[i++] = c;
-                   ++str;
-               }
            } else {
                /* ignore */
                ++str;
@@ -1024,24 +1002,11 @@
            *cp++ = 0xe0 | ((c >> 12) & 0x0f);
            *cp++ = 0x80 | ((c >> 6) & 0x3f);
            *cp++ = 0x80 | (c & 0x3f);
-       } else if (c < 0x200000) {
+       } else if (c <= 0x10ffff) {
            *cp++ = 0xf0 | ((c >> 18) & 0x07);
            *cp++ = 0x80 | ((c >> 12) & 0x3f);
            *cp++ = 0x80 | ((c >> 6) & 0x3f);
            *cp++ = 0x80 | (c & 0x3f);
-       } else if (c < 0x4000000) {
-           *cp++ = 0xf8 | ((c >> 24) & 0x03);
-           *cp++ = 0x80 | ((c >> 18) & 0x3f);
-           *cp++ = 0x80 | ((c >> 12) & 0x3f);
-           *cp++ = 0x80 | ((c >> 6) & 0x3f);
-           *cp++ = 0x80 | (c & 0x3f);
-       } else if (c < 0x80000000) {
-           *cp++ = 0xfc | ((c >> 31) & 0x01);
-           *cp++ = 0x80 | ((c >> 24) & 0x3f);
-           *cp++ = 0x80 | ((c >> 18) & 0x3f);
-           *cp++ = 0x80 | ((c >> 12) & 0x3f);
-           *cp++ = 0x80 | ((c >> 6) & 0x3f);
-           *cp++ = 0x80 | (c & 0x3f);
        }
     }
     *cp = '\0';
@@ -2497,6 +2462,54 @@
 }
 
 /**
+ * Check if query is a DDL statement.
+ * @param sql query string
+ * @result true or false
+ */
+
+static int
+checkddl(char *sql)
+{
+    int isddl = 0;
+
+    while (*sql && ISSPACE(*sql)) {
+       ++sql;
+    }
+    if (*sql && *sql != ';') {
+       int i, size;
+       static const struct {
+           int len;
+           const char *str;
+       } ddlstr[] = {
+           { 5, "alter" },
+           { 7, "analyze" },
+           { 6, "attach" },
+           { 5, "begin" },
+           { 6, "commit" },
+           { 6, "create" },
+           { 6, "detach" },
+           { 4, "drop" },
+           { 3, "end" },
+           { 7, "reindex" },
+           { 7, "release" },
+           { 8, "rollback" },
+           { 9, "savepoint" },
+           { 6, "vacuum" }
+       };
+
+       size = strlen(sql);
+       for (i = 0; i < array_size(ddlstr); i++) {
+           if (size >= ddlstr[i].len &&
+               strncasecmp(sql, ddlstr[i].str, ddlstr[i].len) == 0) {
+               isddl = 1;
+               break;
+           }
+       }
+    }
+    return isddl;
+}
+
+/**
  * Fixup query string with optional parameter markers.
  * @param sql original query string
  * @param sqlLen length of query string or SQL_NTS
@@ -2569,46 +2582,7 @@
        case ';':
            if (!inq) {
                if (isddl < 0) {
-                   char *qq = out;
-
-                   while (*qq && ISSPACE(*qq)) {
-                       ++qq;
-                   }
-                   if (*qq && *qq != ';') {
-                       int i;
-                       static const struct {
-                           int len;
-                           const char *str;
-                       } ddlstr[] = {
-                           { 5, "alter" },
-                           { 7, "analyze" },
-                           { 6, "attach" },
-                           { 5, "begin" },
-                           { 6, "commit" },
-                           { 6, "create" },
-                           { 6, "detach" },
-                           { 4, "drop" },
-                           { 3, "end" },
-                           { 7, "reindex" },
-                           { 7, "release" },
-                           { 8, "rollback" },
-                           { 9, "savepoint" },
-                           { 6, "vacuum" }
-                       };
-
-                       size = strlen(qq);
-                       for (i = 0; i < array_size(ddlstr); i++) {
-                           if (size >= ddlstr[i].len &&
-                               strncasecmp(qq, ddlstr[i].str, ddlstr[i].len)
-                               == 0) {
-                               isddl = 1;
-                               break;
-                           }
-                       }
-                       if (isddl != 1) {
-                           isddl = 0;
-                       }
-                   }
+                   isddl = checkddl(out);
                }
                if (isddl == 0) {
                    char *qq = q;
@@ -2715,6 +2689,9 @@
        *nparam = np;
     }
     if (isselect) {
+       if (isddl < 0) {
+           isddl = checkddl(out);
+       }
        if (isddl > 0) {
            *isselect = 2;
        } else {
@@ -8403,10 +8380,21 @@
 #endif
     switch (attr) {
     case SQL_ATTR_CONNECTION_POOLING:
-       ret = SQL_ERROR;
+       if (val) {
+           *((SQLINTEGER *) val) = e->pool ?
+               SQL_CP_ONE_PER_DRIVER : SQL_CP_OFF;
+       }
+       if (lenp) {
+           *lenp = sizeof (SQLINTEGER);
+       }
+       ret = SQL_SUCCESS;
        break;
     case SQL_ATTR_CP_MATCH:
-       ret = SQL_NO_DATA;
+       *((SQLINTEGER *) val) = SQL_CP_RELAXED_MATCH;
+       if (lenp) {
+           *lenp = sizeof (SQLINTEGER);
+       }
+       ret = SQL_SUCCESS;
        break;
     case SQL_ATTR_OUTPUT_NTS:
        if (val) {
@@ -8460,10 +8448,16 @@
 #endif
     switch (attr) {
     case SQL_ATTR_CONNECTION_POOLING:
-       ret = SQL_SUCCESS;
+       if (val == (SQLPOINTER) SQL_CP_ONE_PER_DRIVER) {
+           e->pool = 1;
+           ret = SQL_SUCCESS;
+       } else if (val == (SQLPOINTER) SQL_CP_OFF) {
+           e->pool = 0;
+           ret = SQL_SUCCESS;
+       }
        break;
     case SQL_ATTR_CP_MATCH:
-       ret = SQL_NO_DATA;
+       ret = SQL_SUCCESS;
        break;
     case SQL_ATTR_OUTPUT_NTS:
        if (val == (SQLPOINTER) SQL_TRUE) {
@@ -8477,8 +8471,7 @@
        if (val == (SQLPOINTER) SQL_OV_ODBC2) {
            e->ov3 = 0;
            ret = SQL_SUCCESS;
-       }
-       if (val == (SQLPOINTER) SQL_OV_ODBC3) {
+       } else if (val == (SQLPOINTER) SQL_OV_ODBC3) {
            e->ov3 = 1;
            ret = SQL_SUCCESS;
        }
@@ -11704,6 +11697,7 @@
     }
     e->magic = ENV_MAGIC;
     e->ov3 = 0;
+    e->pool = 0;
 #if defined(_WIN32) || defined(_WIN64)
     InitializeCriticalSection(&e->cs);
 #else
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sqliteodbc-0.9995/sqlite3odbc.h 
new/sqliteodbc-0.9996/sqlite3odbc.h
--- old/sqliteodbc-0.9995/sqlite3odbc.h 2016-08-14 12:08:37.000000000 +0200
+++ new/sqliteodbc-0.9996/sqlite3odbc.h 2018-02-24 10:33:26.000000000 +0100
@@ -15,9 +15,9 @@
  * @file sqlite3odbc.h
  * Header file for SQLite3 ODBC driver.
  *
- * $Id: sqlite3odbc.h,v 1.48 2016/08/14 10:08:33 chw Exp chw $
+ * $Id: sqlite3odbc.h,v 1.49 2018/02/24 09:32:47 chw Exp chw $
  *
- * Copyright (c) 2004-2016 Christian Werner <[email protected]>
+ * Copyright (c) 2004-2018 Christian Werner <[email protected]>
  *
  * See the file "license.terms" for information on usage
  * and redistribution of this file and for a
@@ -96,6 +96,7 @@
 typedef struct {
     int magic;                 /**< Magic cookie */
     int ov3;                   /**< True for SQL_OV_ODBC3 */
+    int pool;                  /**< True for SQL_CP_ONE_PER_DRIVER */
 #if defined(_WIN32) || defined(_WIN64)
     CRITICAL_SECTION cs;       /**< For serializing most APIs */
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sqliteodbc-0.9995/sqlite4odbc.c 
new/sqliteodbc-0.9996/sqlite4odbc.c
--- old/sqliteodbc-0.9995/sqlite4odbc.c 2016-11-30 19:09:33.000000000 +0100
+++ new/sqliteodbc-0.9996/sqlite4odbc.c 2018-02-24 10:33:28.000000000 +0100
@@ -2,9 +2,9 @@
  * @file sqlite4odbc.c
  * SQLite4 ODBC Driver main module.
  *
- * $Id: sqlite4odbc.c,v 1.21 2016/11/20 19:00:52 chw Exp chw $
+ * $Id: sqlite4odbc.c,v 1.22 2018/02/24 09:32:47 chw Exp chw $
  *
- * Copyright (c) 2014-2016 Christian Werner <[email protected]>
+ * Copyright (c) 2014-2018 Christian Werner <[email protected]>
  *
  * See the file "license.terms" for information on usage
  * and redistribution of this file and for a
@@ -883,31 +883,6 @@
                    uc[i++] = c;
                    ++str;
                }
-           } else if (c < 0xfc) {
-               if ((str[1] & 0xc0) == 0x80 && (str[2] & 0xc0) == 0x80 &&
-                   (str[3] & 0xc0) == 0x80 && (str[4] & 0xc0) == 0x80) {
-                   unsigned long t = ((c & 0x01) << 24) |
-                       ((str[1] & 0x3f) << 18) | ((str[2] & 0x3f) << 12) |
-                       ((str[3] & 0x3f) << 6) | (str[4] & 0x3f);
-
-                   if (sizeof (SQLWCHAR) == 2 * sizeof (char) &&
-                       t >= 0x10000) {
-                       t -= 0x10000;
-                       uc[i++] = 0xd800 | ((t >> 10) & 0x3ff);
-                       if (i >= ucLen) {
-                           break;
-                       }
-                       t = 0xdc00 | (t & 0x3ff);
-                   }
-                   uc[i++] = t;
-                   str += 5;
-               } else {
-                   uc[i++] = c;
-                   ++str;
-               }
-           } else {
-               /* ignore */
-               ++str;
            }
        }
        if (i < ucLen) {
@@ -997,24 +972,11 @@
            *cp++ = 0xe0 | ((c >> 12) & 0x0f);
            *cp++ = 0x80 | ((c >> 6) & 0x3f);
            *cp++ = 0x80 | (c & 0x3f);
-       } else if (c < 0x200000) {
+       } else if (c <= 0x10ffff) {
            *cp++ = 0xf0 | ((c >> 18) & 0x07);
            *cp++ = 0x80 | ((c >> 12) & 0x3f);
            *cp++ = 0x80 | ((c >> 6) & 0x3f);
            *cp++ = 0x80 | (c & 0x3f);
-       } else if (c < 0x4000000) {
-           *cp++ = 0xf8 | ((c >> 24) & 0x03);
-           *cp++ = 0x80 | ((c >> 18) & 0x3f);
-           *cp++ = 0x80 | ((c >> 12) & 0x3f);
-           *cp++ = 0x80 | ((c >> 6) & 0x3f);
-           *cp++ = 0x80 | (c & 0x3f);
-       } else if (c < 0x80000000) {
-           *cp++ = 0xfc | ((c >> 31) & 0x01);
-           *cp++ = 0x80 | ((c >> 24) & 0x3f);
-           *cp++ = 0x80 | ((c >> 18) & 0x3f);
-           *cp++ = 0x80 | ((c >> 12) & 0x3f);
-           *cp++ = 0x80 | ((c >> 6) & 0x3f);
-           *cp++ = 0x80 | (c & 0x3f);
        }
     }
     *cp = '\0';
@@ -2482,6 +2444,54 @@
 }
 
 /**
+ * Check if query is a DDL statement.
+ * @param sql query string
+ * @result true or false
+ */
+
+static int
+checkddl(char *sql)
+{
+    int isddl = 0;
+
+    while (*sql && ISSPACE(*sql)) {
+       ++sql;
+    }
+    if (*sql && *sql != ';') {
+       int i, size;
+       static const struct {
+           int len;
+           const char *str;
+       } ddlstr[] = {
+           { 5, "alter" },
+           { 7, "analyze" },
+           { 6, "attach" },
+           { 5, "begin" },
+           { 6, "commit" },
+           { 6, "create" },
+           { 6, "detach" },
+           { 4, "drop" },
+           { 3, "end" },
+           { 7, "reindex" },
+           { 7, "release" },
+           { 8, "rollback" },
+           { 9, "savepoint" },
+           { 6, "vacuum" }
+       };
+
+       size = strlen(sql);
+       for (i = 0; i < array_size(ddlstr); i++) {
+           if (size >= ddlstr[i].len &&
+               strncasecmp(sql, ddlstr[i].str, ddlstr[i].len) == 0) {
+               isddl = 1;
+               break;
+           }
+       }
+    }
+    return isddl;
+}
+
+/**
  * Fixup query string with optional parameter markers.
  * @param sql original query string
  * @param sqlLen length of query string or SQL_NTS
@@ -2552,46 +2562,7 @@
        case ';':
            if (!inq) {
                if (isddl < 0) {
-                   char *qq = out;
-
-                   while (*qq && ISSPACE(*qq)) {
-                       ++qq;
-                   }
-                   if (*qq && *qq != ';') {
-                       int i;
-                       static const struct {
-                           int len;
-                           const char *str;
-                       } ddlstr[] = {
-                           { 5, "alter" },
-                           { 7, "analyze" },
-                           { 6, "attach" },
-                           { 5, "begin" },
-                           { 6, "commit" },
-                           { 6, "create" },
-                           { 6, "detach" },
-                           { 4, "drop" },
-                           { 3, "end" },
-                           { 7, "reindex" },
-                           { 7, "release" },
-                           { 8, "rollback" },
-                           { 9, "savepoint" },
-                           { 6, "vacuum" }
-                       };
-
-                       size = strlen(qq);
-                       for (i = 0; i < array_size(ddlstr); i++) {
-                           if (size >= ddlstr[i].len &&
-                               strncasecmp(qq, ddlstr[i].str, ddlstr[i].len)
-                               == 0) {
-                               isddl = 1;
-                               break;
-                           }
-                       }
-                       if (isddl != 1) {
-                           isddl = 0;
-                       }
-                   }
+                   isddl = checkddl(out);
                }
                if (isddl == 0) {
                    char *qq = q;
@@ -2698,6 +2669,9 @@
        *nparam = np;
     }
     if (isselect) {
+       if (isddl < 0) {
+           isddl = checkddl(out);
+       }
        if (isddl > 0) {
            *isselect = 2;
        } else {
@@ -7956,10 +7930,21 @@
 #endif
     switch (attr) {
     case SQL_ATTR_CONNECTION_POOLING:
-       ret = SQL_ERROR;
+       if (val) {
+           *((SQLINTEGER *) val) = e->pool ?
+               SQL_CP_ONE_PER_DRIVER : SQL_CP_OFF;
+       }
+       if (lenp) {
+           *lenp = sizeof (SQLINTEGER);
+       }
+       ret = SQL_SUCCESS;
        break;
     case SQL_ATTR_CP_MATCH:
-       ret = SQL_NO_DATA;
+       *((SQLINTEGER *) val) = SQL_CP_RELAXED_MATCH;
+       if (lenp) {
+           *lenp = sizeof (SQLINTEGER);
+       }
+       ret = SQL_SUCCESS;
        break;
     case SQL_ATTR_OUTPUT_NTS:
        if (val) {
@@ -8013,10 +7998,16 @@
 #endif
     switch (attr) {
     case SQL_ATTR_CONNECTION_POOLING:
-       ret = SQL_SUCCESS;
+       if (val == (SQLPOINTER) SQL_CP_ONE_PER_DRIVER) {
+           e->pool = 1;
+           ret = SQL_SUCCESS;
+       } else if (val == (SQLPOINTER) SQL_CP_OFF) {
+           e->pool = 0;
+           ret = SQL_SUCCESS;
+       }
        break;
     case SQL_ATTR_CP_MATCH:
-       ret = SQL_NO_DATA;
+       ret = SQL_SUCCESS;
        break;
     case SQL_ATTR_OUTPUT_NTS:
        if (val == (SQLPOINTER) SQL_TRUE) {
@@ -8030,8 +8021,7 @@
        if (val == (SQLPOINTER) SQL_OV_ODBC2) {
            e->ov3 = 0;
            ret = SQL_SUCCESS;
-       }
-       if (val == (SQLPOINTER) SQL_OV_ODBC3) {
+       } else if (val == (SQLPOINTER) SQL_OV_ODBC3) {
            e->ov3 = 1;
            ret = SQL_SUCCESS;
        }
@@ -11086,6 +11076,7 @@
     }
     e->magic = ENV_MAGIC;
     e->ov3 = 0;
+    e->pool = 0;
 #if defined(_WIN32) || defined(_WIN64)
     InitializeCriticalSection(&e->cs);
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sqliteodbc-0.9995/sqlite4odbc.h 
new/sqliteodbc-0.9996/sqlite4odbc.h
--- old/sqliteodbc-0.9995/sqlite4odbc.h 2016-08-14 12:08:37.000000000 +0200
+++ new/sqliteodbc-0.9996/sqlite4odbc.h 2018-02-24 10:33:29.000000000 +0100
@@ -15,9 +15,9 @@
  * @file sqlite4odbc.h
  * Header file for SQLite4 ODBC driver.
  *
- * $Id: sqlite4odbc.h,v 1.7 2016/08/14 10:08:33 chw Exp chw $
+ * $Id: sqlite4odbc.h,v 1.8 2018/02/24 09:32:47 chw Exp chw $
  *
- * Copyright (c) 2013-2016 Christian Werner <[email protected]>
+ * Copyright (c) 2013-2018 Christian Werner <[email protected]>
  *
  * See the file "license.terms" for information on usage
  * and redistribution of this file and for a
@@ -96,6 +96,7 @@
 typedef struct {
     int magic;                 /**< Magic cookie */
     int ov3;                   /**< True for SQL_OV_ODBC3 */
+    int pool;                  /**< True for SQL_CP_ONE_PER_DRIVER */
 #if defined(_WIN32) || defined(_WIN64)
     CRITICAL_SECTION cs;       /**< For serializing most APIs */
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sqliteodbc-0.9995/sqliteodbc.c 
new/sqliteodbc-0.9996/sqliteodbc.c
--- old/sqliteodbc-0.9995/sqliteodbc.c  2016-11-30 19:09:33.000000000 +0100
+++ new/sqliteodbc-0.9996/sqliteodbc.c  2018-02-24 10:33:27.000000000 +0100
@@ -2,9 +2,9 @@
  * @file sqliteodbc.c
  * SQLite ODBC Driver main module.
  *
- * $Id: sqliteodbc.c,v 1.222 2016/11/20 19:00:52 chw Exp chw $
+ * $Id: sqliteodbc.c,v 1.223 2018/02/24 09:32:47 chw Exp chw $
  *
- * Copyright (c) 2001-2016 Christian Werner <[email protected]>
+ * Copyright (c) 2001-2018 Christian Werner <[email protected]>
  * OS/2 Port Copyright (c) 2004 Lorne R. Sunley <[email protected]>
  *
  * See the file "license.terms" for information on usage
@@ -546,28 +546,6 @@
                    uc[i++] = c;
                    ++str;
                }
-           } else if (c < 0xfc) {
-               if ((str[1] & 0xc0) == 0x80 && (str[2] & 0xc0) == 0x80 &&
-                   (str[3] & 0xc0) == 0x80 && (str[4] & 0xc0) == 0x80) {
-                   unsigned long t = ((c & 0x01) << 24) |
-                       ((str[1] & 0x3f) << 18) | ((str[2] & 0x3f) << 12) |
-                       ((str[3] & 0x3f) << 6) | (str[4] & 0x3f);
-
-                   if (sizeof (SQLWCHAR) == 2 * sizeof (char) &&
-                       t >= 0x10000) {
-                       t -= 0x10000;
-                       uc[i++] = 0xd800 | ((t >> 10) & 0x3ff);
-                       if (i >= ucLen) {
-                           break;
-                       }
-                       t = 0xdc00 | (t & 0x3ff);
-                   }
-                   uc[i++] = t;
-                   str += 5;
-               } else {
-                   uc[i++] = c;
-                   ++str;
-               }
            } else {
                /* ignore */
                ++str;
@@ -660,24 +638,11 @@
            *cp++ = 0xe0 | ((c >> 12) & 0x0f);
            *cp++ = 0x80 | ((c >> 6) & 0x3f);
            *cp++ = 0x80 | (c & 0x3f);
-       } else if (c < 0x200000) {
+       } else if (c <= 0x10ffff) {
            *cp++ = 0xf0 | ((c >> 18) & 0x07);
            *cp++ = 0x80 | ((c >> 12) & 0x3f);
            *cp++ = 0x80 | ((c >> 6) & 0x3f);
            *cp++ = 0x80 | (c & 0x3f);
-       } else if (c < 0x4000000) {
-           *cp++ = 0xf8 | ((c >> 24) & 0x03);
-           *cp++ = 0x80 | ((c >> 18) & 0x3f);
-           *cp++ = 0x80 | ((c >> 12) & 0x3f);
-           *cp++ = 0x80 | ((c >> 6) & 0x3f);
-           *cp++ = 0x80 | (c & 0x3f);
-       } else if (c < 0x80000000) {
-           *cp++ = 0xfc | ((c >> 31) & 0x01);
-           *cp++ = 0x80 | ((c >> 24) & 0x3f);
-           *cp++ = 0x80 | ((c >> 18) & 0x3f);
-           *cp++ = 0x80 | ((c >> 12) & 0x3f);
-           *cp++ = 0x80 | ((c >> 6) & 0x3f);
-           *cp++ = 0x80 | (c & 0x3f);
        }
     }
     *cp = '\0';
@@ -1651,6 +1616,49 @@
     return type;
 }
 
+ /**
+  * Check if query is a DDL statement.
+  * @param sql query string
+  * @result true or false
+  */
+
+static int
+checkddl(char *sql)
+{
+    int isddl = 0;
+
+    while (*sql && ISSPACE(*sql)) {
+       ++sql;
+    }
+    if (*sql && *sql != ';') {
+       int i, size;
+       static const struct {
+           int len;
+           const char *str;
+       } ddlstr[] = {
+           { 6, "attach" },
+           { 5, "begin" },
+           { 6, "commit" },
+           { 6, "create" },
+           { 6, "detach" },
+           { 4, "drop" },
+           { 3, "end" },
+           { 8, "rollback" },
+           { 6, "vacuum" }
+       };
+
+       size = strlen(sql);
+       for (i = 0; i < array_size(ddlstr); i++) {
+           if (size >= ddlstr[i].len &&
+               strncasecmp(sql, ddlstr[i].str, ddlstr[i].len) == 0) {
+               isddl = 1;
+               break;
+           }
+       }
+    }
+    return isddl;
+}
+
 /**
  * Fixup query string with optional parameter markers.
  * @param sql original query string
@@ -1755,41 +1763,7 @@
        case ';':
            if (!inq) {
                if (isddl < 0) {
-                   char *qq = out;
-
-                   while (*qq && ISSPACE(*qq)) {
-                       ++qq;
-                   }
-                   if (*qq && *qq != ';') {
-                       int i;
-                       static const struct {
-                           int len;
-                           const char *str;
-                       } ddlstr[] = {
-                           { 6, "attach" },
-                           { 5, "begin" },
-                           { 6, "commit" },
-                           { 6, "create" },
-                           { 6, "detach" },
-                           { 4, "drop" },
-                           { 3, "end" },
-                           { 8, "rollback" },
-                           { 6, "vacuum" }
-                       };
-
-                       size = strlen(qq);
-                       for (i = 0; i < array_size(ddlstr); i++) {
-                           if (size >= ddlstr[i].len &&
-                               strncasecmp(qq, ddlstr[i].str, ddlstr[i].len)
-                               == 0) {
-                               isddl = 1;
-                               break;
-                           }
-                       }
-                       if (isddl != 1) {
-                           isddl = 0;
-                       }
-                   }
+                   isddl = checkddl(out);
                }
                if (isddl == 0) {
                    char *qq = q;
@@ -1884,6 +1858,9 @@
        *nparam = np;
     }
     if (isselect) {
+       if (isddl < 0) {
+           isddl = checkddl(out);
+       }
        if (isddl > 0) {
            *isselect = 2;
        } else {
@@ -6647,10 +6624,21 @@
 #endif
     switch (attr) {
     case SQL_ATTR_CONNECTION_POOLING:
-       ret = SQL_ERROR;
+       if (val) {
+           *((SQLINTEGER *) val) = e->pool ?
+               SQL_CP_ONE_PER_DRIVER : SQL_CP_OFF;
+       }
+       if (lenp) {
+           *lenp = sizeof (SQLINTEGER);
+       }
+       ret = SQL_SUCCESS;
        break;
     case SQL_ATTR_CP_MATCH:
-       ret = SQL_NO_DATA;
+       *((SQLINTEGER *) val) = SQL_CP_RELAXED_MATCH;
+       if (lenp) {
+           *lenp = sizeof (SQLINTEGER);
+       }
+       ret = SQL_SUCCESS;
        break;
     case SQL_ATTR_OUTPUT_NTS:
        if (val) {
@@ -6704,10 +6692,16 @@
 #endif
     switch (attr) {
     case SQL_ATTR_CONNECTION_POOLING:
-       ret = SQL_SUCCESS;
+       if (val == (SQLPOINTER) SQL_CP_ONE_PER_DRIVER) {
+           e->pool = 1;
+           ret = SQL_SUCCESS;
+       } else if (val == (SQLPOINTER) SQL_CP_OFF) {
+           e->pool = 0;
+           ret = SQL_SUCCESS;
+       }
        break;
     case SQL_ATTR_CP_MATCH:
-       ret = SQL_NO_DATA;
+       ret = SQL_SUCCESS;
        break;
     case SQL_ATTR_OUTPUT_NTS:
        if (val == (SQLPOINTER) SQL_TRUE) {
@@ -6722,8 +6716,7 @@
        if (val == (SQLPOINTER) SQL_OV_ODBC2) {
            e->ov3 = 0;
            ret = SQL_SUCCESS;
-       }
-       if (val == (SQLPOINTER) SQL_OV_ODBC3) {
+       } else if (val == (SQLPOINTER) SQL_OV_ODBC3) {
            e->ov3 = 1;
            ret = SQL_SUCCESS;
        }
@@ -8691,6 +8684,7 @@
     }
     e->magic = ENV_MAGIC;
     e->ov3 = 0;
+    e->pool = 0;
 #if defined(_WIN32) || defined(_WIN64)
     InitializeCriticalSection(&e->cs);
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sqliteodbc-0.9995/sqliteodbc.h 
new/sqliteodbc-0.9996/sqliteodbc.h
--- old/sqliteodbc-0.9995/sqliteodbc.h  2016-08-14 12:08:38.000000000 +0200
+++ new/sqliteodbc-0.9996/sqliteodbc.h  2018-02-24 10:33:27.000000000 +0100
@@ -15,9 +15,9 @@
  * @file sqliteodbc.h
  * Header file for SQLite ODBC driver.
  *
- * $Id: sqliteodbc.h,v 1.64 2016/08/14 10:08:33 chw Exp chw $
+ * $Id: sqliteodbc.h,v 1.65 2018/02/24 09:32:47 chw Exp chw $
  *
- * Copyright (c) 2001-2016 Christian Werner <[email protected]>
+ * Copyright (c) 2001-2018 Christian Werner <[email protected]>
  *
  * See the file "license.terms" for information on usage
  * and redistribution of this file and for a
@@ -111,6 +111,7 @@
 typedef struct {
     int magic;                 /**< Magic cookie */
     int ov3;                   /**< True for SQL_OV_ODBC3 */
+    int pool;                  /**< True for SQL_CP_ONE_PER_DRIVER */
 #if defined(_WIN32) || defined(_WIN64)
     CRITICAL_SECTION cs;       /**< For serializing most APIs */
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sqliteodbc-0.9995/sqliteodbc.spec 
new/sqliteodbc-0.9996/sqliteodbc.spec
--- old/sqliteodbc-0.9995/sqliteodbc.spec       2016-12-01 06:41:38.000000000 
+0100
+++ new/sqliteodbc-0.9996/sqliteodbc.spec       2018-02-24 10:30:57.000000000 
+0100
@@ -1,5 +1,5 @@
 %define name sqliteodbc
-%define version 0.9995
+%define version 0.9996
 %define release 1
 
 Name: %{name}
@@ -102,5 +102,5 @@
 %{_libdir}/*.so*
 
 %changelog
-* Thu Dec 01 2016 ...
+* Sat Feb 24 2018 ...
 - automatically recreated by configure ...


Reply via email to