summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/sql/drivers/psql/qsql_psql.cpp4
-rw-r--r--src/sql/kernel/qsqlresult.cpp10
-rw-r--r--src/sql/kernel/qsqlresult_p.h9
3 files changed, 9 insertions, 14 deletions
diff --git a/src/sql/drivers/psql/qsql_psql.cpp b/src/sql/drivers/psql/qsql_psql.cpp
index 6b642dcb15..13c985d1df 100644
--- a/src/sql/drivers/psql/qsql_psql.cpp
+++ b/src/sql/drivers/psql/qsql_psql.cpp
@@ -202,7 +202,7 @@ public:
preparedQueriesEnabled(false)
{ }
- static QString fieldSerial(int i) { return QLatin1Char('$') + QString::number(i + 1); }
+ QString fieldSerial(int i) const { return QLatin1Char('$') + QString::number(i + 1); }
void deallocatePreparedStmt();
const QPSQLDriverPrivate * privDriver() const {Q_Q(const QPSQLResult); return reinterpret_cast<const QPSQLDriver *>(q->driver())->d; }
@@ -594,7 +594,7 @@ bool QPSQLResult::prepare(const QString &query)
d->deallocatePreparedStmt();
const QString stmtId = qMakePreparedStmtId();
- const QString stmt = QString::fromLatin1("PREPARE %1 AS ").arg(stmtId).append(QSqlResultPrivate::positionalToNamedBinding(query, QPSQLResultPrivate::fieldSerial));
+ const QString stmt = QString::fromLatin1("PREPARE %1 AS ").arg(stmtId).append(d->positionalToNamedBinding(query));
PGresult *result = d->privDriver()->exec(stmt);
diff --git a/src/sql/kernel/qsqlresult.cpp b/src/sql/kernel/qsqlresult.cpp
index db55ad7813..e3203f983c 100644
--- a/src/sql/kernel/qsqlresult.cpp
+++ b/src/sql/kernel/qsqlresult.cpp
@@ -61,7 +61,7 @@ QString QSqlResultPrivate::holderAt(int index) const
}
// return a unique id for bound names
-QString QSqlResultPrivate::fieldSerial(int i)
+QString QSqlResultPrivate::fieldSerial(int i) const
{
ushort arr[] = { ':', 'f', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
ushort *ptr = &arr[1];
@@ -81,7 +81,7 @@ static bool qIsAlnum(QChar ch)
return u - 'a' < 26 || u - 'A' < 26 || u - '0' < 10 || u == '_';
}
-QString QSqlResultPrivate::positionalToNamedBinding(const QString &query, QString (fieldSerialFunc)(int idx))
+QString QSqlResultPrivate::positionalToNamedBinding(const QString &query) const
{
int n = query.size();
@@ -106,7 +106,7 @@ QString QSqlResultPrivate::positionalToNamedBinding(const QString &query, QStrin
result += ch;
} else {
if (ch == QLatin1Char('?')) {
- result += fieldSerialFunc(count++);
+ result += fieldSerial(count++);
} else {
if (ch == QLatin1Char('\'') || ch == QLatin1Char('"') || ch == QLatin1Char('`'))
closingQuote = ch;
@@ -594,7 +594,7 @@ bool QSqlResult::savePrepare(const QString& query)
d->executedQuery = d->namedToPositionalBinding(query);
if (driver()->hasFeature(QSqlDriver::NamedPlaceholders))
- d->executedQuery = QSqlResultPrivate::positionalToNamedBinding(query);
+ d->executedQuery = d->positionalToNamedBinding(query);
return prepare(d->executedQuery);
}
@@ -680,7 +680,7 @@ void QSqlResult::bindValue(int index, const QVariant& val, QSql::ParamType param
{
Q_D(QSqlResult);
d->binds = PositionalBinding;
- d->indexes[QSqlResultPrivate::fieldSerial(index)].append(index);
+ d->indexes[d->fieldSerial(index)].append(index);
if (d->values.count() <= index)
d->values.resize(index + 1);
d->values[index] = val;
diff --git a/src/sql/kernel/qsqlresult_p.h b/src/sql/kernel/qsqlresult_p.h
index 46ee6ce195..7f0459f3a8 100644
--- a/src/sql/kernel/qsqlresult_p.h
+++ b/src/sql/kernel/qsqlresult_p.h
@@ -108,13 +108,8 @@ public:
clearIndex();;
}
- // positionalToNamedBinding uses fieldSerial() by default, which converts to Oracle-style names,
- // because this style is used in the API. A driver can reuse positionalToNamedBinding()
- // internally for its own naming style by supplying its own fieldSerialFunc. We cannot make
- // fieldSerial() virtual because it would allow a driver to impose its naming style on
- // executedQuery when set by QSqlResult::savePrepare().
- static QString fieldSerial(int);
- static QString positionalToNamedBinding(const QString &query, QString (fieldSerialFunc)(int idx) = fieldSerial);
+ virtual QString fieldSerial(int) const;
+ QString positionalToNamedBinding(const QString &query) const;
QString namedToPositionalBinding(const QString &query);
QString holderAt(int index) const;