summaryrefslogtreecommitdiffstats
path: root/src/sql
diff options
context:
space:
mode:
authorMark Brand <mabrand@mabrand.nl>2013-02-10 23:53:31 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-02-15 12:17:17 +0100
commit2fc5edffa4f4dfadad17b88253be59ea6961109b (patch)
tree8e3b0401649d4abaaa068e8277f8e978244158f9 /src/sql
parent67a71731c75856ede684b40c30e75b2630abd853 (diff)
qpsql: reuse QSqlResultPrivate::positionalToNamedBinding
reuse QSqlResultPrivate::positionalToNamedBinding for psql Change-Id: I48713c3f94eb880cafff5fddbeadaa0746a405a9 Reviewed-by: Israel Lins Albuquerque <israelins85@yahoo.com.br> Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Mark Brand <mabrand@mabrand.nl>
Diffstat (limited to 'src/sql')
-rw-r--r--src/sql/drivers/psql/qsql_psql.cpp27
1 files changed, 3 insertions, 24 deletions
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);