diff options
author | Christian Ehrlicher <ch.ehrlicher@gmx.de> | 2023-01-25 21:28:38 +0100 |
---|---|---|
committer | Christian Ehrlicher <ch.ehrlicher@gmx.de> | 2023-02-08 23:20:42 +0100 |
commit | e30ed4d4318f95ca704873aba745ca222d03edcb (patch) | |
tree | bef87860144a4e8e4fd6a8f0d35a7cfc9a859beb /src/plugins/sqldrivers | |
parent | 7cbdc8abbda12488f51317313347bbc220b42fe0 (diff) |
SQL/DB2: apply misc changes
Similar to the ODBC changes from 901c86032c
Change-Id: I552b2e43d380080bfac62d61b0e27ba42d13024d
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
Diffstat (limited to 'src/plugins/sqldrivers')
-rw-r--r-- | src/plugins/sqldrivers/db2/qsql_db2.cpp | 81 |
1 files changed, 39 insertions, 42 deletions
diff --git a/src/plugins/sqldrivers/db2/qsql_db2.cpp b/src/plugins/sqldrivers/db2/qsql_db2.cpp index df2b35ecd1..c2ca844d9d 100644 --- a/src/plugins/sqldrivers/db2/qsql_db2.cpp +++ b/src/plugins/sqldrivers/db2/qsql_db2.cpp @@ -14,6 +14,7 @@ #include <QDebug> #include <QtSql/private/qsqldriver_p.h> #include <QtSql/private/qsqlresult_p.h> +#include "private/qtools_p.h" #if defined(Q_CC_BOR) // DB2's sqlsystm.h (included through sqlcli1.h) defines the SQL_BIGINT_TYPE @@ -43,10 +44,13 @@ class QDB2DriverPrivate : public QSqlDriverPrivate Q_DECLARE_PUBLIC(QDB2Driver) public: - QDB2DriverPrivate() : QSqlDriverPrivate(), hEnv(0), hDbc(0) { dbmsType = QSqlDriver::DB2; } - SQLHANDLE hEnv; - SQLHANDLE hDbc; + QDB2DriverPrivate() : QSqlDriverPrivate(QSqlDriver::DB2) {} + SQLHANDLE hEnv = 0; + SQLHANDLE hDbc = 0; QString user; + + void qSplitTableQualifier(const QString &qualifier, QString &catalog, + QString &schema, QString &table) const; }; class QDB2ResultPrivate; @@ -461,34 +465,27 @@ static QByteArray qGetBinaryData(SQLHANDLE hStmt, int column, SQLLEN& lengthIndi return fieldVal; } -static void qSplitTableQualifier(const QString & qualifier, QString * catalog, - QString * schema, QString * table) +void QDB2DriverPrivate::qSplitTableQualifier(const QString &qualifier, QString &catalog, + QString &schema, QString &table) const { - if (!catalog || !schema || !table) - return; - QStringList l = qualifier.split(u'.'); - if (l.count() > 3) - return; // can't possibly be a valid table qualifier - int i = 0, n = l.count(); - if (n == 1) { - *table = qualifier; - } else { - for (QStringList::Iterator it = l.begin(); it != l.end(); ++it) { - if (n == 3) { - if (i == 0) - *catalog = *it; - else if (i == 1) - *schema = *it; - else if (i == 2) - *table = *it; - } else if (n == 2) { - if (i == 0) - *schema = *it; - else if (i == 1) - *table = *it; - } - i++; - } + const QList<QStringView> l = QStringView(qualifier).split(u'.'); + switch (l.count()) { + case 1: + table = qualifier; + break; + case 2: + schema = l.at(0).toString(); + table = l.at(1).toString(); + break; + case 3: + catalog = l.at(0).toString(); + schema = l.at(1).toString(); + table = l.at(2).toString(); + break; + default: + qSqlWarning(QString::fromLatin1("QODBCDriver::splitTableQualifier: Unable to split table qualifier '%1'") + .arg(qualifier), this); + break; } } @@ -1353,7 +1350,7 @@ QSqlRecord QDB2Driver::record(const QString& tableName) const SQLHANDLE hStmt; QString catalog, schema, table; - qSplitTableQualifier(tableName, &catalog, &schema, &table); + d->qSplitTableQualifier(tableName, catalog, schema, table); if (schema.isEmpty()) schema = d->user; @@ -1509,7 +1506,7 @@ QSqlIndex QDB2Driver::primaryIndex(const QString& tablename) const return index; } QString catalog, schema, table; - qSplitTableQualifier(tablename, &catalog, &schema, &table); + d->qSplitTableQualifier(tablename, catalog, schema, table); if (isIdentifierEscaped(catalog, QSqlDriver::TableName)) catalog = stripDelimiters(catalog, QSqlDriver::TableName); @@ -1674,17 +1671,17 @@ QString QDB2Driver::formatValue(const QSqlField &field, bool trimStrings) const } } case QMetaType::QByteArray: { - QByteArray ba = field.value().toByteArray(); - QString res; - res += "BLOB(X'"_L1; - static const char hexchars[] = "0123456789abcdef"; - for (int i = 0; i < ba.size(); ++i) { - uchar s = (uchar) ba[i]; - res += QLatin1Char(hexchars[s >> 4]); - res += QLatin1Char(hexchars[s & 0x0f]); + const QByteArray ba = field.value().toByteArray(); + QString r; + r.reserve(ba.size() * 2 + 9); + r += "BLOB(X'"_L1; + for (const char c : ba) { + const uchar s = uchar(c); + r += QLatin1Char(QtMiscUtils::toHexLower(s >> 4)); + r += QLatin1Char(QtMiscUtils::toHexLower(s & 0x0f)); } - res += "')"_L1; - return res; + r += "')"_L1; + return r; } default: return QSqlDriver::formatValue(field, trimStrings); |