summaryrefslogtreecommitdiffstats
path: root/src/sql
diff options
context:
space:
mode:
authorMark Brand <mabrand@mabrand.nl>2013-02-11 10:38:17 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-02-15 12:16:59 +0100
commit67a71731c75856ede684b40c30e75b2630abd853 (patch)
treebb2d385a356617e0134695a922987bbf42acbc4f /src/sql
parentb8073b841404f0f5b9a6f87faba375c6eb45f3d0 (diff)
QSqlResultPrivate: parameterize fieldSerial function for parsing
Change-Id: Ibaffadec9bf9e6e0d5609b7327b369d560e8e2ce 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/kernel/qsqlresult.cpp4
-rw-r--r--src/sql/kernel/qsqlresult_p.h7
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;