diff options
author | Mark Brand <mabrand@mabrand.nl> | 2013-03-21 22:32:40 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-04-02 14:31:47 +0200 |
commit | 4131bfb2c28d0554805bbfcf009b422bda820c09 (patch) | |
tree | 9b01fe9d0cbef800243982e8874d772a6f7221e8 /src/sql/kernel/qsqlresult.cpp | |
parent | db6190d6fe261712236b61a208f821c1c0fd7f00 (diff) |
make QSqlResultPrivate::fieldSerial() virtual
The Qt psql driver has its own implementation of fieldSerial() it uses
when it invokes positionalToNamedBinding() to generate a query using
its native naming style. Now that QPSQLResultPrivate is derived from
QSqlResultPrivate this can be implemented more conventionally using
a virtual function instead of pointers to static functions.
Note that this change preserves the current behavior of
executedQuery() which will continue to return the query with
positional syntax that is presented to virtual prepare() by
QSqlResult::savePrepare(). Since the driver does not have the
NamedPlaceholders feature, QSqlResult::savePrepare() will not use
positionaltoNamedBinding() to set executedQuery. Although
QPSQLResult::prepare() calls positionaltoNamedBinding(),
it does not put the result into executedQuery.
Change-Id: I7740f386cbfec9eadd9e4d6a7df3e590294655a5
Reviewed-by: Israel Lins Albuquerque <israelins85@yahoo.com.br>
Reviewed-by: Mark Brand <mabrand@mabrand.nl>
Diffstat (limited to 'src/sql/kernel/qsqlresult.cpp')
-rw-r--r-- | src/sql/kernel/qsqlresult.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
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; |