diff options
author | Israel Lins <israelins85@yahoo.com.br> | 2013-02-07 16:15:24 -0300 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-02-09 01:39:54 +0100 |
commit | 6c151605bc18f811d5018417f287e816561fc4ad (patch) | |
tree | 2ce1ce320a6ca12f22a558a8de1c61de3c783f9b /src | |
parent | f03d4bdae811844bb2e04be2386be0504ad94992 (diff) |
QSqlResult: consolidate SQL parsing for binding
Consolidated SQL parsing for binding values, removing repeated code.
Change-Id: I77aadcfd2673b067f7deb52b826d7b5a2ba2ae2a
Reviewed-by: Mark Brand <mabrand@mabrand.nl>
Diffstat (limited to 'src')
-rw-r--r-- | src/sql/kernel/qsqlresult.cpp | 29 |
1 files changed, 3 insertions, 26 deletions
diff --git a/src/sql/kernel/qsqlresult.cpp b/src/sql/kernel/qsqlresult.cpp index 1f9bcec603..b720e40d8a 100644 --- a/src/sql/kernel/qsqlresult.cpp +++ b/src/sql/kernel/qsqlresult.cpp @@ -616,34 +616,11 @@ bool QSqlResult::savePrepare(const QString& query) */ bool QSqlResult::prepare(const QString& query) { + d->sql = query; if (d->holders.isEmpty()) { - int n = query.size(); - - bool inQuote = false; - int i = 0; - - while (i < n) { - QChar ch = query.at(i); - if (ch == QLatin1Char(':') && !inQuote - && (i == 0 || query.at(i - 1) != QLatin1Char(':')) - && (i + 1 < n && qIsAlnum(query.at(i + 1)))) { - int pos = i + 2; - while (pos < n && qIsAlnum(query.at(pos))) - ++pos; - - QString holder(query.mid(i, pos - i)); - d->indexes[holder].append(d->holders.size()); - d->holders.append(QHolder(holder, i)); - i = pos; - } else { - if (ch == QLatin1Char('\'')) - inQuote = !inQuote; - ++i; - } - } - d->values.resize(d->holders.size()); + // parse the query to memorize parameter location + d->namedToPositionalBinding(); } - d->sql = query; return true; // fake prepares should always succeed } |