diff options
-rw-r--r-- | src/sql/drivers/psql/qsql_psql.cpp | 4 | ||||
-rw-r--r-- | src/sql/kernel/qsqlresult.cpp | 10 | ||||
-rw-r--r-- | src/sql/kernel/qsqlresult_p.h | 9 |
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; |