summaryrefslogtreecommitdiffstats
path: root/src/sql/kernel
diff options
context:
space:
mode:
authorMark Brand <mabrand@mabrand.nl>2013-02-11 10:23:43 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-02-15 12:16:42 +0100
commitb8073b841404f0f5b9a6f87faba375c6eb45f3d0 (patch)
tree2b002c54aafbb28c0e1341446391890847ff5e8c /src/sql/kernel
parente2b9dab539b9cb55763c28bf343269d18fe8e385 (diff)
QSqlResultPrivate: parameterize input query for parsing
Change-Id: If57f4fcea2e00a1910df5a5bd2b556289f4ffb21 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/kernel')
-rw-r--r--src/sql/kernel/qsqlresult.cpp26
-rw-r--r--src/sql/kernel/qsqlresult_p.h4
2 files changed, 15 insertions, 15 deletions
diff --git a/src/sql/kernel/qsqlresult.cpp b/src/sql/kernel/qsqlresult.cpp
index b73c80f192..6ae9c2b314 100644
--- a/src/sql/kernel/qsqlresult.cpp
+++ b/src/sql/kernel/qsqlresult.cpp
@@ -81,9 +81,9 @@ static bool qIsAlnum(QChar ch)
return u - 'a' < 26 || u - 'A' < 26 || u - '0' < 10 || u == '_';
}
-QString QSqlResultPrivate::positionalToNamedBinding()
+QString QSqlResultPrivate::positionalToNamedBinding(const QString &query)
{
- int n = sql.size();
+ int n = query.size();
QString result;
result.reserve(n * 5 / 4);
@@ -91,7 +91,7 @@ QString QSqlResultPrivate::positionalToNamedBinding()
int count = 0;
for (int i = 0; i < n; ++i) {
- QChar ch = sql.at(i);
+ QChar ch = query.at(i);
if (ch == QLatin1Char('?') && !inQuote) {
result += fieldSerial(count++);
} else {
@@ -104,9 +104,9 @@ QString QSqlResultPrivate::positionalToNamedBinding()
return result;
}
-QString QSqlResultPrivate::namedToPositionalBinding()
+QString QSqlResultPrivate::namedToPositionalBinding(const QString &query)
{
- int n = sql.size();
+ int n = query.size();
QString result;
result.reserve(n);
@@ -115,14 +115,14 @@ QString QSqlResultPrivate::namedToPositionalBinding()
int i = 0;
while (i < n) {
- QChar ch = sql.at(i);
+ QChar ch = query.at(i);
if (ch == QLatin1Char(':') && !inQuote
- && (i == 0 || sql.at(i - 1) != QLatin1Char(':'))
- && (i + 1 < n && qIsAlnum(sql.at(i + 1)))) {
+ && (i == 0 || query.at(i - 1) != QLatin1Char(':'))
+ && (i + 1 < n && qIsAlnum(query.at(i + 1)))) {
int pos = i + 2;
- while (pos < n && qIsAlnum(sql.at(pos)))
+ while (pos < n && qIsAlnum(query.at(pos)))
++pos;
- QString holder(sql.mid(i, pos - i));
+ QString holder(query.mid(i, pos - i));
indexes[holder].append(count++);
holders.append(QHolder(holder, i));
result += QLatin1Char('?');
@@ -529,10 +529,10 @@ bool QSqlResult::savePrepare(const QString& query)
return prepare(query);
// parse the query to memorize parameter location
- d->executedQuery = d->namedToPositionalBinding();
+ d->executedQuery = d->namedToPositionalBinding(query);
if (driver()->hasFeature(QSqlDriver::NamedPlaceholders))
- d->executedQuery = d->positionalToNamedBinding();
+ d->executedQuery = QSqlResultPrivate::positionalToNamedBinding(query);
return prepare(d->executedQuery);
}
@@ -549,7 +549,7 @@ bool QSqlResult::prepare(const QString& query)
d->sql = query;
if (d->holders.isEmpty()) {
// parse the query to memorize parameter location
- d->namedToPositionalBinding();
+ d->namedToPositionalBinding(query);
}
return true; // fake prepares should always succeed
}
diff --git a/src/sql/kernel/qsqlresult_p.h b/src/sql/kernel/qsqlresult_p.h
index 95148853df..e70e2e32e9 100644
--- a/src/sql/kernel/qsqlresult_p.h
+++ b/src/sql/kernel/qsqlresult_p.h
@@ -107,8 +107,8 @@ public:
}
static QString fieldSerial(int);
- QString positionalToNamedBinding();
- QString namedToPositionalBinding();
+ static QString positionalToNamedBinding(const QString &query);
+ QString namedToPositionalBinding(const QString &query);
QString holderAt(int index) const;
QSqlResult *q;