File qt3-extensions_sqlite3.patch of Package qt3

diff -Naru qt3_orig/plugins/src/sqldrivers/sqlite/sqlite.pro qt3/plugins/src/sqldrivers/sqlite/sqlite.pro
--- qt3_orig/plugins/src/sqldrivers/sqlite/sqlite.pro	2019-04-03 12:55:51.566383781 +0900
+++ qt3/plugins/src/sqldrivers/sqlite/sqlite.pro	2019-04-03 15:48:42.021172331 +0900
@@ -11,7 +11,7 @@
 unix {
 	OBJECTS_DIR = .obj
 	!contains( LIBS, .*sqlite.* ) {
-		LIBS    *= -lsqlite
+		LIBS    *= -lsqlite3
 	}
 }
 
diff -Naru qt3_orig/src/sql/drivers/sqlite/qsql_sqlite.cpp qt3/src/sql/drivers/sqlite/qsql_sqlite.cpp
--- qt3_orig/src/sql/drivers/sqlite/qsql_sqlite.cpp	2008-01-16 04:09:13.000000000 +0900
+++ qt3/src/sql/drivers/sqlite/qsql_sqlite.cpp	2019-04-03 17:10:10.307183989 +0900
@@ -29,10 +29,10 @@
 #  if !defined Q_WS_WIN32
 #    include <unistd.h>
 #  endif
-#  include <sqlite.h>
+#  include <sqlite3.h>
 #endif
 
-typedef struct sqlite_vm sqlite_vm;
+#include <stdlib.h>
 
 #define QSQLITE_DRIVER_NAME "QSQLITE"
 
@@ -53,13 +53,13 @@
 {
 public:
     QSQLiteDriverPrivate();
-    sqlite *access;
+    sqlite3 *access;
     bool utf8;
 };
 
 QSQLiteDriverPrivate::QSQLiteDriverPrivate() : access(0)
 {
-    utf8 = (qstrcmp(sqlite_encoding, "UTF-8") == 0);
+    utf8 = -1; // (qstrcmp(sqlite_encoding, "UTF-8") == 0); // not defined for sqlite3, is this right?
 }
 
 class QSQLiteResultPrivate
@@ -74,12 +74,12 @@
     void finalize();
 
     QSQLiteResult* q;
-    sqlite *access;
+    sqlite3 *access;
 
     // and we have too keep our own struct for the data (sqlite works via
     // callback.
     const char *currentTail;
-    sqlite_vm *currentMachine;
+    sqlite3_stmt *currentStatement;
 
     uint skippedStatus: 1; // the status of the fetchNext() that's skipped
     QtSqlCachedResult::RowCache *skipRow;
@@ -91,7 +91,7 @@
 static const uint initial_cache_size = 128;
 
 QSQLiteResultPrivate::QSQLiteResultPrivate(QSQLiteResult* res) : q(res), access(0), currentTail(0),
-    currentMachine(0), skippedStatus(FALSE), skipRow(0), utf8(FALSE)
+    currentStatement(0), skippedStatus(FALSE), skipRow(0), utf8(FALSE)
 {
 }
 
@@ -100,7 +100,7 @@
     finalize();
     rInf.clear();
     currentTail = 0;
-    currentMachine = 0;
+    currentStatement = 0;
     skippedStatus = FALSE;
     delete skipRow;
     skipRow = 0;
@@ -111,16 +111,14 @@
 
 void QSQLiteResultPrivate::finalize()
 {
-    if (!currentMachine)
+    if (!currentStatement)
         return;
 
-    char* err = 0;
-    int res = sqlite_finalize(currentMachine, &err);
-    if (err) {
-        q->setLastError(QSqlError("Unable to fetch results", err, QSqlError::Statement, res));
-        sqlite_freemem(err);
+    int res = sqlite3_finalize(currentStatement);
+    if (res != SQLITE_OK) {
+        q->setLastError(QSqlError("Unable to fetch results", "", QSqlError::Statement, res));
     }
-    currentMachine = 0;
+    currentStatement = 0;
 }
 
 // called on first fetch
@@ -148,8 +146,8 @@
 bool QSQLiteResultPrivate::fetchNext(QtSqlCachedResult::RowCache* row)
 {
     // may be caching.
-    const char **fvals;
-    const char **cnames;
+    const char **fvals = 0;
+    const char **cnames = 0;
     int colNum;
     int res;
     int i;
@@ -163,11 +161,11 @@
 	return skippedStatus;
     }
 
-    if (!currentMachine)
+    if (!currentStatement)
 	return FALSE;
 
     // keep trying while busy, wish I could implement this better.
-    while ((res = sqlite_step(currentMachine, &colNum, &fvals, &cnames)) == SQLITE_BUSY) {
+    while ((res = sqlite3_step(currentStatement)) == SQLITE_BUSY) {
 	// sleep instead requesting result again immidiately.
 #if defined Q_WS_WIN32
 	Sleep(1000);
@@ -176,24 +174,50 @@
 #endif
     }
 
+    colNum = sqlite3_column_count(currentStatement);
+    if (colNum > 0) {
+        cnames = (const char **) malloc(sizeof(const char *) * colNum * 2);
+	if (!cnames) return FALSE;
+	fvals = (const char **) malloc(sizeof(const char *) * colNum);
+	if (!fvals) {
+	    free(cnames);
+	    return FALSE;
+	}
+
+	for(i = 0; i< colNum; ++i) {
+	    cnames[i] = sqlite3_column_name(currentStatement, i);
+	    cnames[i + colNum] = sqlite3_column_decltype(currentStatement, i);
+	    fvals[i] = (const char *)sqlite3_column_text(currentStatement, i);
+	}
+    }
+
     switch(res) {
     case SQLITE_ROW:
 	// check to see if should fill out columns
 	if (rInf.isEmpty())
 	    // must be first call.
 	    init(cnames, colNum, &row);
-	if (!fvals)
+	if (!fvals) {
+	    if (cnames) free(cnames);
 	    return FALSE;
-	if (!row)
+	}
+	if (!row) {
+	    if (cnames) free(cnames);
+	    if (fvals) free(fvals);
 	    return TRUE;
+	}
 	for (i = 0; i < colNum; ++i)
 	    (*row)[i] = utf8 ? QString::fromUtf8(fvals[i]) : QString(fvals[i]);
+	if (cnames) free(cnames);
+	if (fvals) free(fvals);
 	return TRUE;
     case SQLITE_DONE:
 	if (rInf.isEmpty())
 	    // must be first call.
 	    init(cnames, colNum);
 	q->setAt(QSql::AfterLast);
+	if (cnames) free(cnames);
+	if (fvals) free(fvals);
 	return FALSE;
     case SQLITE_ERROR:
     case SQLITE_MISUSE:
@@ -201,8 +225,12 @@
 	// something wrong, don't get col info, but still return false
 	finalize(); // finalize to get the error message.
 	q->setAt(QSql::AfterLast);
+	if (cnames) free(cnames);
+	if (fvals) free(fvals);
 	return FALSE;
     }
+    if (cnames) free(cnames);
+    if (fvals) free(fvals);
     return FALSE;
 }
 
@@ -235,18 +263,16 @@
 
     // Um, ok.  callback based so.... pass private static function for this.
     setSelect(FALSE);
-    char *err = 0;
-    int res = sqlite_compile(d->access,
+    int res = sqlite3_prepare(d->access,
                                 d->utf8 ? (const char*)query.utf8().data() : query.ascii(),
-                                &(d->currentTail),
-                                &(d->currentMachine),
-                                &err);
-    if (res != SQLITE_OK || err) {
-        setLastError(QSqlError("Unable to execute statement", err, QSqlError::Statement, res));
-        sqlite_freemem(err);
+				-1,
+				&(d->currentStatement),
+                                &(d->currentTail));
+    if (res != SQLITE_OK) {
+        setLastError(QSqlError("Unable to execute statement", "", QSqlError::Statement, res));
     }
     //if (*d->currentTail != '\000' then there is more sql to eval
-    if (!d->currentMachine) {
+    if (!d->currentStatement) {
 	setActive(FALSE);
 	return FALSE;
     }
@@ -272,7 +298,7 @@
 
 int QSQLiteResult::numRowsAffected()
 {
-    return sqlite_changes(d->access);
+    return sqlite3_changes(d->access);
 }
 
 /////////////////////////////////////////////////////////
@@ -283,7 +309,7 @@
     d = new QSQLiteDriverPrivate();
 }
 
-QSQLiteDriver::QSQLiteDriver(sqlite *connection, QObject *parent, const char *name)
+QSQLiteDriver::QSQLiteDriver(sqlite3 *connection, QObject *parent, const char *name)
     : QSqlDriver(parent, name ? name : QSQLITE_DRIVER_NAME)
 {
     d = new QSQLiteDriverPrivate();
@@ -325,11 +351,10 @@
     if (db.isEmpty())
 	return FALSE;
 
-    char* err = 0;
-    d->access = sqlite_open(QFile::encodeName(db), 0, &err);
-    if (err) {
-        setLastError(QSqlError("Error to open database", err, QSqlError::Connection));
-        sqlite_freemem(err);
+    int err = 0;
+    err = sqlite3_open(QFile::encodeName(db), &(d->access));
+    if (err != SQLITE_OK) {
+        setLastError(QSqlError("Error to open database", "", QSqlError::Connection));
         err = 0;
     }
 
@@ -345,7 +370,7 @@
 void QSQLiteDriver::close()
 {
     if (isOpen()) {
-        sqlite_close(d->access);
+        sqlite3_close(d->access);
         d->access = 0;
         setOpen(FALSE);
         setOpenError(FALSE);
@@ -363,13 +388,13 @@
         return FALSE;
 
     char* err;
-    int res = sqlite_exec(d->access, "BEGIN", 0, this, &err);
+    int res = sqlite3_exec(d->access, "BEGIN", 0, this, &err);
 
     if (res == SQLITE_OK)
         return TRUE;
 
     setLastError(QSqlError("Unable to begin transaction", err, QSqlError::Transaction, res));
-    sqlite_freemem(err);
+    sqlite3_free(err);
     return FALSE;
 }
 
@@ -379,13 +404,13 @@
         return FALSE;
 
     char* err;
-    int res = sqlite_exec(d->access, "COMMIT", 0, this, &err);
+    int res = sqlite3_exec(d->access, "COMMIT", 0, this, &err);
 
     if (res == SQLITE_OK)
         return TRUE;
 
     setLastError(QSqlError("Unable to commit transaction", err, QSqlError::Transaction, res));
-    sqlite_freemem(err);
+    sqlite3_free(err);
     return FALSE;
 }
 
@@ -395,13 +420,13 @@
         return FALSE;
 
     char* err;
-    int res = sqlite_exec(d->access, "ROLLBACK", 0, this, &err);
+    int res = sqlite3_exec(d->access, "ROLLBACK", 0, this, &err);
 
     if (res == SQLITE_OK)
         return TRUE;
 
     setLastError(QSqlError("Unable to rollback Transaction", err, QSqlError::Transaction, res));
-    sqlite_freemem(err);
+    sqlite3_free(err);
     return FALSE;
 }
 
diff -Naru qt3_orig/src/sql/drivers/sqlite/qsql_sqlite.h qt3/src/sql/drivers/sqlite/qsql_sqlite.h
--- qt3_orig/src/sql/drivers/sqlite/qsql_sqlite.h	2008-01-16 04:09:13.000000000 +0900
+++ qt3/src/sql/drivers/sqlite/qsql_sqlite.h	2019-04-03 15:35:37.363444448 +0900
@@ -32,7 +32,7 @@
 class QSQLiteDriverPrivate;
 class QSQLiteResultPrivate;
 class QSQLiteDriver;
-struct sqlite;
+struct sqlite3;
 
 class QSQLiteResult : public QtSqlCachedResult
 {
@@ -57,7 +57,7 @@
     friend class QSQLiteResult;
 public:
     QSQLiteDriver(QObject *parent = 0, const char *name = 0);
-    QSQLiteDriver(sqlite *connection, QObject *parent = 0, const char *name = 0);
+    QSQLiteDriver(sqlite3 *connection, QObject *parent = 0, const char *name = 0);
     ~QSQLiteDriver();
     bool hasFeature(DriverFeature f) const;
     bool open(const QString & db,
openSUSE Build Service is sponsored by