summaryrefslogtreecommitdiffstats
path: root/src/sql/drivers
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2013-02-18 16:14:52 +0100
committerFrederik Gladhorn <frederik.gladhorn@digia.com>2013-02-18 16:14:52 +0100
commitf4900d340a4c620b56871995741696d28e53c167 (patch)
tree66d4ed6e4e8012e8a534717e87bf15cf8a992652 /src/sql/drivers
parent7c33ae6a7bbbd42ce70acf77aa55c1bc2a23c8ec (diff)
parent843de37bca944110fdf3aab161d680e3845d2dd2 (diff)
Merge remote-tracking branch 'origin/stable' into dev
Conflicts: src/widgets/styles/qmacstyle_mac.mm Change-Id: If8326db9e7da3cbf45dbf7475fdff9915c7723b1
Diffstat (limited to 'src/sql/drivers')
-rw-r--r--src/sql/drivers/db2/qsql_db2.cpp2
-rw-r--r--src/sql/drivers/psql/qsql_psql.cpp27
2 files changed, 4 insertions, 25 deletions
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));
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 <qsocketnotifier.h>
#include <qstringlist.h>
#include <qmutex.h>
+#include <QtSql/private/qsqlresult_p.h>
#include <libpq-fe.h>
#include <pg_config.h>
@@ -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<QVariant> 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);