From 2fc5edffa4f4dfadad17b88253be59ea6961109b Mon Sep 17 00:00:00 2001 From: Mark Brand Date: Sun, 10 Feb 2013 23:53:31 +0100 Subject: qpsql: reuse QSqlResultPrivate::positionalToNamedBinding reuse QSqlResultPrivate::positionalToNamedBinding for psql Change-Id: I48713c3f94eb880cafff5fddbeadaa0746a405a9 Reviewed-by: Israel Lins Albuquerque Reviewed-by: Konstantin Ritt Reviewed-by: Mark Brand --- src/sql/drivers/psql/qsql_psql.cpp | 27 +++------------------------ 1 file changed, 3 insertions(+), 24 deletions(-) (limited to 'src/sql/drivers') diff --git a/src/sql/drivers/psql/qsql_psql.cpp b/src/sql/drivers/psql/qsql_psql.cpp index 1d96e9f93b..0eadceb1d1 100644 --- a/src/sql/drivers/psql/qsql_psql.cpp +++ b/src/sql/drivers/psql/qsql_psql.cpp @@ -53,6 +53,7 @@ #include #include #include +#include #include #include @@ -183,6 +184,7 @@ class QPSQLResultPrivate { public: QPSQLResultPrivate(QPSQLResult *qq): q(qq), driver(0), result(0), currentSize(-1), preparedQueriesEnabled(false) {} + static QString fieldSerial(int i) { return QLatin1Char('$') + QString::number(i + 1); } QPSQLResult *q; const QPSQLDriverPrivate *driver; @@ -515,29 +517,6 @@ void QPSQLResult::virtual_hook(int id, void *data) QSqlResult::virtual_hook(id, data); } -static QString qReplacePlaceholderMarkers(const QString &query) -{ - const int originalLength = query.length(); - bool inQuote = false; - int markerIdx = 0; - QString result; - result.reserve(originalLength + 23); - for (int i = 0; i < originalLength; ++i) { - const QChar ch = query.at(i); - if (ch == QLatin1Char('?') && !inQuote) { - result += QLatin1Char('$'); - result += QString::number(++markerIdx); - } else { - if (ch == QLatin1Char('\'')) - inQuote = !inQuote; - result += ch; - } - } - - result.squeeze(); - return result; -} - static QString qCreateParamString(const QVector boundValues, const QSqlDriver *driver) { if (boundValues.isEmpty()) @@ -581,7 +560,7 @@ bool QPSQLResult::prepare(const QString &query) qDeallocatePreparedStmt(d); const QString stmtId = qMakePreparedStmtId(); - const QString stmt = QString::fromLatin1("PREPARE %1 AS ").arg(stmtId).append(qReplacePlaceholderMarkers(query)); + const QString stmt = QString::fromLatin1("PREPARE %1 AS ").arg(stmtId).append(QSqlResultPrivate::positionalToNamedBinding(query, QPSQLResultPrivate::fieldSerial)); PGresult *result = d->driver->exec(stmt); -- cgit v1.2.3 From c8e34ed678145f2e5709d39007e27e186d1bc1f9 Mon Sep 17 00:00:00 2001 From: Karim Pinter Date: Fri, 15 Feb 2013 12:30:05 +0200 Subject: Fix DB2 driver X64 Linux Build On X64 Linux DB2 driver build give an error on BIGINT conversion to QVariant, casting it to qint64 solved the problem. Task-number: QTBUG-20172 Change-Id: I7ef31cbe643c90b40b86cf3d7c4d3b711eabf2f5 Reviewed-by: Mark Brand --- src/sql/drivers/db2/qsql_db2.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/sql/drivers') diff --git a/src/sql/drivers/db2/qsql_db2.cpp b/src/sql/drivers/db2/qsql_db2.cpp index 537f77a8a3..9406861d4c 100644 --- a/src/sql/drivers/db2/qsql_db2.cpp +++ b/src/sql/drivers/db2/qsql_db2.cpp @@ -1030,7 +1030,7 @@ QVariant QDB2Result::data(int field) v = new QVariant(qGetIntData(d->hStmt, field, isNull)); break; case QSql::LowPrecisionInt64: - v = new QVariant(qGetBigIntData(d->hStmt, field, isNull)); + v = new QVariant((qint64) qGetBigIntData(d->hStmt, field, isNull)); break; case QSql::LowPrecisionDouble: v = new QVariant(qGetDoubleData(d->hStmt, field, isNull)); -- cgit v1.2.3