diff options
-rw-r--r-- | src/sql/kernel/qsqlresult.cpp | 4 | ||||
-rw-r--r-- | src/sql/kernel/qsqlresult_p.h | 7 |
2 files changed, 8 insertions, 3 deletions
diff --git a/src/sql/kernel/qsqlresult.cpp b/src/sql/kernel/qsqlresult.cpp index 6ae9c2b314..2ebfba0788 100644 --- a/src/sql/kernel/qsqlresult.cpp +++ b/src/sql/kernel/qsqlresult.cpp @@ -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 QSqlResultPrivate::positionalToNamedBinding(const QString &query, QString (fieldSerialFunc)(int idx)) { int n = query.size(); @@ -93,7 +93,7 @@ QString QSqlResultPrivate::positionalToNamedBinding(const QString &query) for (int i = 0; i < n; ++i) { QChar ch = query.at(i); if (ch == QLatin1Char('?') && !inQuote) { - result += fieldSerial(count++); + result += fieldSerialFunc(count++); } else { if (ch == QLatin1Char('\'')) inQuote = !inQuote; diff --git a/src/sql/kernel/qsqlresult_p.h b/src/sql/kernel/qsqlresult_p.h index e70e2e32e9..246b914ec7 100644 --- a/src/sql/kernel/qsqlresult_p.h +++ b/src/sql/kernel/qsqlresult_p.h @@ -106,8 +106,13 @@ 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); + static QString positionalToNamedBinding(const QString &query, QString (fieldSerialFunc)(int idx) = fieldSerial); QString namedToPositionalBinding(const QString &query); QString holderAt(int index) const; |