[SCM] qtbase packaging branch, master, updated. debian/5.9.2+dfsg-4-5-g43cbf50

Dmitry Shachnev mitya57 at moszumanska.debian.org
Thu Nov 23 08:29:31 UTC 2017


Gitweb-URL: http://git.debian.org/?p=pkg-kde/qt/qtbase.git;a=commitdiff;h=43cbf50

The following commit has been merged in the master branch:
commit 43cbf50662fed86825f055c79ea8f576384851f5
Author: Dmitry Shachnev <mitya57 at gmail.com>
Date:   Thu Nov 23 11:29:07 2017 +0300

    Backport upstream patches for PostgreSQL 10 support.
    
    Closes: #879960.
---
 debian/changelog                  |   1 +
 debian/patches/postgresql_10.diff | 408 ++++++++++++++++++++++++++++++++++++++
 debian/patches/series             |   1 +
 3 files changed, 410 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index a9eec96..2e8a842 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -5,6 +5,7 @@ qtbase-opensource-src (5.9.2+dfsg-5) UNRELEASED; urgency=medium
     passed to qmake as -qtconf option for cross-building.
   * Ship /usr/bin/${DEB_HOST_GNU_TYPE}-qmake wrapper script in qt5-qmake, for
     using qmake with autoconf and AC_CHECK_TOOL.
+  * Backport upstream patches for PostgreSQL 10 support (closes: #879960).
 
  -- Debian Qt/KDE Maintainers <debian-qt-kde at lists.debian.org>  Tue, 07 Nov 2017 13:57:18 +0300
 
diff --git a/debian/patches/postgresql_10.diff b/debian/patches/postgresql_10.diff
new file mode 100644
index 0000000..3a9efa4
--- /dev/null
+++ b/debian/patches/postgresql_10.diff
@@ -0,0 +1,408 @@
+Description: add support for PostreSQL version 9.x and later
+Origin: upstream, commits:
+ https://code.qt.io/cgit/qt/qtbase.git/commit/?id=435c4b2ccbbb7284
+ https://code.qt.io/cgit/qt/qtbase.git/commit/?id=ff914ea59c3788b2
+ https://code.qt.io/cgit/qt/qtbase.git/commit/?id=b35a27676bec7f79
+Last-Update: 2017-11-23
+
+--- a/src/plugins/sqldrivers/psql/qsql_psql.cpp
++++ b/src/plugins/sqldrivers/psql/qsql_psql.cpp
+@@ -181,13 +181,14 @@
+     QPSQLDriver::Protocol getPSQLVersion();
+     bool setEncodingUtf8();
+     void setDatestyle();
++    void setByteaOutput();
+     void detectBackslashEscape();
+ };
+ 
+ void QPSQLDriverPrivate::appendTables(QStringList &tl, QSqlQuery &t, QChar type)
+ {
+     QString query;
+-    if (pro >= QPSQLDriver::Version73) {
++    if (pro >= QPSQLDriver::Version7_3) {
+         query = QString::fromLatin1("select pg_class.relname, pg_namespace.nspname from pg_class "
+                   "left join pg_namespace on (pg_class.relnamespace = pg_namespace.oid) "
+                   "where (pg_class.relkind = '%1') and (pg_class.relname !~ '^Inv') "
+@@ -525,7 +526,7 @@
+ QVariant QPSQLResult::lastInsertId() const
+ {
+     Q_D(const QPSQLResult);
+-    if (d->drv_d_func()->pro >= QPSQLDriver::Version81) {
++    if (d->drv_d_func()->pro >= QPSQLDriver::Version8_1) {
+         QSqlQuery qry(driver()->createResult());
+         // Most recent sequence value obtained from nextval
+         if (qry.exec(QLatin1String("SELECT lastval();")) && qry.next())
+@@ -693,11 +694,25 @@
+     PQclear(result);
+ }
+ 
++void QPSQLDriverPrivate::setByteaOutput()
++{
++    if (pro >= QPSQLDriver::Version9) {
++        // Server version before QPSQLDriver::Version9 only supports escape mode for bytea type,
++        // but bytea format is set to hex by default in PSQL 9 and above. So need to force the
++        // server to use the old escape mode when connects to the new server.
++        PGresult *result = exec("SET bytea_output TO escape");
++        int status = PQresultStatus(result);
++        if (status != PGRES_COMMAND_OK)
++            qWarning("%s", PQerrorMessage(connection));
++        PQclear(result);
++    }
++}
++
+ void QPSQLDriverPrivate::detectBackslashEscape()
+ {
+     // standard_conforming_strings option introduced in 8.2
+     // http://www.postgresql.org/docs/8.2/static/runtime-config-compatible.html
+-    if (pro < QPSQLDriver::Version82) {
++    if (pro < QPSQLDriver::Version8_2) {
+         hasBackslashEscape = true;
+     } else {
+         hasBackslashEscape = false;
+@@ -719,11 +734,11 @@
+     {
+         switch (vMin) {
+         case 1:
+-            return QPSQLDriver::Version71;
++            return QPSQLDriver::Version7_1;
+         case 3:
+-            return QPSQLDriver::Version73;
++            return QPSQLDriver::Version7_3;
+         case 4:
+-            return QPSQLDriver::Version74;
++            return QPSQLDriver::Version7_4;
+         default:
+             return QPSQLDriver::Version7;
+         }
+@@ -733,76 +748,102 @@
+     {
+         switch (vMin) {
+         case 1:
+-            return QPSQLDriver::Version81;
++            return QPSQLDriver::Version8_1;
+         case 2:
+-            return QPSQLDriver::Version82;
++            return QPSQLDriver::Version8_2;
+         case 3:
+-            return QPSQLDriver::Version83;
++            return QPSQLDriver::Version8_3;
+         case 4:
+-            return QPSQLDriver::Version84;
++            return QPSQLDriver::Version8_4;
+         default:
+             return QPSQLDriver::Version8;
+         }
+         break;
+     }
+     case 9:
+-        return QPSQLDriver::Version9;
++    {
++        switch (vMin) {
++        case 1:
++            return QPSQLDriver::Version9_1;
++        case 2:
++            return QPSQLDriver::Version9_2;
++        case 3:
++            return QPSQLDriver::Version9_3;
++        case 4:
++            return QPSQLDriver::Version9_4;
++        case 5:
++            return QPSQLDriver::Version9_5;
++        case 6:
++            return QPSQLDriver::Version9_6;
++        default:
++            return QPSQLDriver::Version9;
++        }
+         break;
++    }
++    case 10:
++        return QPSQLDriver::Version10;
+     default:
++        if (vMaj > 10)
++            return QPSQLDriver::UnknownLaterVersion;
+         break;
+     }
+     return QPSQLDriver::VersionUnknown;
+ }
+ 
++static QPSQLDriver::Protocol qFindPSQLVersion(const QString &versionString)
++{
++    const QRegExp rx(QStringLiteral("(\d+)(?:\.(\d+))?"));
++    if (rx.indexIn(versionString) != -1) {
++        // Beginning with PostgreSQL version 10, a major release is indicated by
++        // increasing the first part of the version, e.g. 10 to 11.
++        // Before version 10, a major release was indicated by increasing either
++        // the first or second part of the version number, e.g. 9.5 to 9.6.
++        int vMaj = rx.cap(1).toInt();
++        int vMin;
++        if (vMaj >= 10) {
++            vMin = 0;
++        } else {
++            if (rx.cap(2).isEmpty())
++                return QPSQLDriver::VersionUnknown;
++            vMin = rx.cap(2).toInt();
++        }
++        return qMakePSQLVersion(vMaj, vMin);
++    }
++
++    return QPSQLDriver::VersionUnknown;
++}
++
+ QPSQLDriver::Protocol QPSQLDriverPrivate::getPSQLVersion()
+ {
+     QPSQLDriver::Protocol serverVersion = QPSQLDriver::Version6;
+     PGresult* result = exec("select version()");
+     int status = PQresultStatus(result);
+     if (status == PGRES_COMMAND_OK || status == PGRES_TUPLES_OK) {
+-        QString val = QString::fromLatin1(PQgetvalue(result, 0, 0));
+-
+-        QRegExp rx(QLatin1String("(\d+)\.(\d+)"));
+-        rx.setMinimal(true); // enforce non-greedy RegExp
++        serverVersion = qFindPSQLVersion(
++            QString::fromLatin1(PQgetvalue(result, 0, 0)));
++    }
++    PQclear(result);
+ 
+-        if (rx.indexIn(val) != -1) {
+-            int vMaj = rx.cap(1).toInt();
+-            int vMin = rx.cap(2).toInt();
+-            serverVersion = qMakePSQLVersion(vMaj, vMin);
++    QPSQLDriver::Protocol clientVersion =
+ #if defined(PG_MAJORVERSION)
+-            if (rx.indexIn(QLatin1String(PG_MAJORVERSION)) != -1)
++        qFindPSQLVersion(QLatin1String(PG_MAJORVERSION));
+ #elif defined(PG_VERSION)
+-            if (rx.indexIn(QLatin1String(PG_VERSION)) != -1)
++        qFindPSQLVersion(QLatin1String(PG_VERSION));
+ #else
+-            if (0)
++        QPSQLDriver::VersionUnknown;
+ #endif
+-            {
+-                vMaj = rx.cap(1).toInt();
+-                vMin = rx.cap(2).toInt();
+-                QPSQLDriver::Protocol clientVersion = qMakePSQLVersion(vMaj, vMin);
+-
+-                if (serverVersion >= QPSQLDriver::Version9 && clientVersion < QPSQLDriver::Version9) {
+-                    //Client version before QPSQLDriver::Version9 only supports escape mode for bytea type,
+-                    //but bytea format is set to hex by default in PSQL 9 and above. So need to force the
+-                    //server use the old escape mode when connects to the new server with old client library.
+-                    PQclear(result);
+-                    result = exec("SET bytea_output=escape; ");
+-                    status = PQresultStatus(result);
+-                } else if (serverVersion == QPSQLDriver::VersionUnknown) {
+-                    serverVersion = clientVersion;
+-                    if (serverVersion != QPSQLDriver::VersionUnknown)
+-                        qWarning("The server version of this PostgreSQL is unknown, falling back to the client version.");
+-                }
+-            }
+-        }
++
++    if (serverVersion == QPSQLDriver::VersionUnknown) {
++        serverVersion = clientVersion;
++        if (serverVersion != QPSQLDriver::VersionUnknown)
++            qWarning("The server version of this PostgreSQL is unknown, falling back to the client version.");
+     }
+-    PQclear(result);
+ 
+-    //keep the old behavior unchanged
++    // Keep the old behavior unchanged
+     if (serverVersion == QPSQLDriver::VersionUnknown)
+         serverVersion = QPSQLDriver::Version6;
+ 
+-    if (serverVersion < QPSQLDriver::Version71) {
++    if (serverVersion < QPSQLDriver::Version7_3) {
+         qWarning("This version of PostgreSQL is not supported and may not work.");
+     }
+ 
+@@ -852,7 +893,7 @@
+         return true;
+     case PreparedQueries:
+     case PositionalPlaceholders:
+-        return d->pro >= QPSQLDriver::Version82;
++        return d->pro >= QPSQLDriver::Version8_2;
+     case BatchOperations:
+     case NamedPlaceholders:
+     case SimpleLocking:
+@@ -861,7 +902,7 @@
+     case CancelQuery:
+         return false;
+     case BLOB:
+-        return d->pro >= QPSQLDriver::Version71;
++        return d->pro >= QPSQLDriver::Version7_1;
+     case Unicode:
+         return d->isUtf8;
+     }
+@@ -924,6 +965,7 @@
+     d->detectBackslashEscape();
+     d->isUtf8 = d->setEncodingUtf8();
+     d->setDatestyle();
++    d->setByteaOutput();
+ 
+     setOpen(true);
+     setOpenError(false);
+@@ -988,12 +1030,7 @@
+     // This hack is used to tell if the transaction has succeeded for the protocol versions of
+     // PostgreSQL below. For 7.x and other protocol versions we are left in the dark.
+     // This hack can dissapear once there is an API to query this sort of information.
+-    if (d->pro == QPSQLDriver::Version8 ||
+-        d->pro == QPSQLDriver::Version81 ||
+-        d->pro == QPSQLDriver::Version82 ||
+-        d->pro == QPSQLDriver::Version83 ||
+-        d->pro == QPSQLDriver::Version84 ||
+-        d->pro == QPSQLDriver::Version9) {
++    if (d->pro >= QPSQLDriver::Version8) {
+         transaction_failed = qstrcmp(PQcmdStatus(res), "ROLLBACK") == 0;
+     }
+ 
+@@ -1080,8 +1117,7 @@
+     else
+         schema = std::move(schema).toLower();
+ 
+-    switch(d->pro) {
+-    case QPSQLDriver::Version6:
++    if (d->pro == QPSQLDriver::Version6) {
+         stmt = QLatin1String("select pg_att1.attname, int(pg_att1.atttypid), pg_cl.relname "
+                 "from pg_attribute pg_att1, pg_attribute pg_att2, pg_class pg_cl, pg_index pg_ind "
+                 "where pg_cl.relname = '%1_pkey' "
+@@ -1090,9 +1126,7 @@
+                 "and pg_att1.attrelid = pg_ind.indrelid "
+                 "and pg_att1.attnum = pg_ind.indkey[pg_att2.attnum-1] "
+                 "order by pg_att2.attnum");
+-        break;
+-    case QPSQLDriver::Version7:
+-    case QPSQLDriver::Version71:
++    } else if (d->pro == QPSQLDriver::Version7 || d->pro == QPSQLDriver::Version7_1) {
+         stmt = QLatin1String("select pg_att1.attname, pg_att1.atttypid::int, pg_cl.relname "
+                 "from pg_attribute pg_att1, pg_attribute pg_att2, pg_class pg_cl, pg_index pg_ind "
+                 "where pg_cl.relname = '%1_pkey' "
+@@ -1101,15 +1135,7 @@
+                 "and pg_att1.attrelid = pg_ind.indrelid "
+                 "and pg_att1.attnum = pg_ind.indkey[pg_att2.attnum-1] "
+                 "order by pg_att2.attnum");
+-        break;
+-    case QPSQLDriver::Version73:
+-    case QPSQLDriver::Version74:
+-    case QPSQLDriver::Version8:
+-    case QPSQLDriver::Version81:
+-    case QPSQLDriver::Version82:
+-    case QPSQLDriver::Version83:
+-    case QPSQLDriver::Version84:
+-    case QPSQLDriver::Version9:
++    } else if (d->pro >= QPSQLDriver::Version7_3) {
+         stmt = QLatin1String("SELECT pg_attribute.attname, pg_attribute.atttypid::int, "
+                 "pg_class.relname "
+                 "FROM pg_attribute, pg_class "
+@@ -1124,10 +1150,8 @@
+         else
+             stmt = stmt.arg(QString::fromLatin1("pg_class.relnamespace = (select oid from "
+                    "pg_namespace where pg_namespace.nspname = '%1') AND ").arg(schema));
+-        break;
+-    case QPSQLDriver::VersionUnknown:
+-        qFatal("PSQL version is unknown");
+-        break;
++    } else {
++        qFatal("QPSQLDriver::primaryIndex(tablename): unknown PSQL version, query statement not set");
+     }
+ 
+     i.exec(stmt.arg(tbl));
+@@ -1161,8 +1185,7 @@
+         schema = std::move(schema).toLower();
+ 
+     QString stmt;
+-    switch(d->pro) {
+-    case QPSQLDriver::Version6:
++    if (d->pro == QPSQLDriver::Version6) {
+         stmt = QLatin1String("select pg_attribute.attname, int(pg_attribute.atttypid), "
+                 "pg_attribute.attnotnull, pg_attribute.attlen, pg_attribute.atttypmod, "
+                 "int(pg_attribute.attrelid), pg_attribute.attnum "
+@@ -1170,8 +1193,7 @@
+                 "where pg_class.relname = '%1' "
+                 "and pg_attribute.attnum > 0 "
+                 "and pg_attribute.attrelid = pg_class.oid ");
+-        break;
+-    case QPSQLDriver::Version7:
++    } else if (d->pro == QPSQLDriver::Version7) {
+         stmt = QLatin1String("select pg_attribute.attname, pg_attribute.atttypid::int, "
+                 "pg_attribute.attnotnull, pg_attribute.attlen, pg_attribute.atttypmod, "
+                 "pg_attribute.attrelid::int, pg_attribute.attnum "
+@@ -1179,8 +1201,7 @@
+                 "where pg_class.relname = '%1' "
+                 "and pg_attribute.attnum > 0 "
+                 "and pg_attribute.attrelid = pg_class.oid ");
+-        break;
+-    case QPSQLDriver::Version71:
++    } else if (d->pro == QPSQLDriver::Version7_1) {
+         stmt = QLatin1String("select pg_attribute.attname, pg_attribute.atttypid::int, "
+                 "pg_attribute.attnotnull, pg_attribute.attlen, pg_attribute.atttypmod, "
+                 "pg_attrdef.adsrc "
+@@ -1191,15 +1212,7 @@
+                 "and pg_attribute.attnum > 0 "
+                 "and pg_attribute.attrelid = pg_class.oid "
+                 "order by pg_attribute.attnum ");
+-        break;
+-    case QPSQLDriver::Version73:
+-    case QPSQLDriver::Version74:
+-    case QPSQLDriver::Version8:
+-    case QPSQLDriver::Version81:
+-    case QPSQLDriver::Version82:
+-    case QPSQLDriver::Version83:
+-    case QPSQLDriver::Version84:
+-    case QPSQLDriver::Version9:
++    } else if (d->pro >= QPSQLDriver::Version7_3) {
+         stmt = QLatin1String("select pg_attribute.attname, pg_attribute.atttypid::int, "
+                 "pg_attribute.attnotnull, pg_attribute.attlen, pg_attribute.atttypmod, "
+                 "pg_attrdef.adsrc "
+@@ -1217,15 +1230,13 @@
+         else
+             stmt = stmt.arg(QString::fromLatin1("pg_class.relnamespace = (select oid from "
+                    "pg_namespace where pg_namespace.nspname = '%1')").arg(schema));
+-        break;
+-    case QPSQLDriver::VersionUnknown:
+-        qFatal("PSQL version is unknown");
+-        break;
++    } else {
++        qFatal("QPSQLDriver::record(tablename): unknown PSQL version, query statement not set");
+     }
+ 
+     QSqlQuery query(createResult());
+     query.exec(stmt.arg(tbl));
+-    if (d->pro >= QPSQLDriver::Version71) {
++    if (d->pro >= QPSQLDriver::Version7_1) {
+         while (query.next()) {
+             int len = query.value(3).toInt();
+             int precision = query.value(4).toInt();
+--- a/src/plugins/sqldrivers/psql/qsql_psql_p.h
++++ b/src/plugins/sqldrivers/psql/qsql_psql_p.h
+@@ -76,15 +76,23 @@
+         VersionUnknown = -1,
+         Version6 = 6,
+         Version7 = 7,
+-        Version71 = 8,
+-        Version73 = 9,
+-        Version74 = 10,
++        Version7_1 = 8,
++        Version7_3 = 9,
++        Version7_4 = 10,
+         Version8 = 11,
+-        Version81 = 12,
+-        Version82 = 13,
+-        Version83 = 14,
+-        Version84 = 15,
+-        Version9 = 16
++        Version8_1 = 12,
++        Version8_2 = 13,
++        Version8_3 = 14,
++        Version8_4 = 15,
++        Version9 = 16,
++        Version9_1 = 17,
++        Version9_2 = 18,
++        Version9_3 = 19,
++        Version9_4 = 20,
++        Version9_5 = 21,
++        Version9_6 = 22,
++        Version10 = 23,
++        UnknownLaterVersion = 100000
+     };
+ 
+     explicit QPSQLDriver(QObject *parent=0);
diff --git a/debian/patches/series b/debian/patches/series
index 4475651..fce1e1e 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,5 +1,6 @@
 # Backported from upstream.
 qglxconvenience_nullptr.diff
+postgresql_10.diff
 
 # Debian specific.
 gnukfreebsd.diff

-- 
qtbase packaging



More information about the pkg-kde-commits mailing list