From f03d4bdae811844bb2e04be2386be0504ad94992 Mon Sep 17 00:00:00 2001 From: Mark Brand Date: Tue, 5 Feb 2013 18:22:43 +0100 Subject: QSqlResult: note in doc about misnamed method Change-Id: I488a915622445527c529b35db639ec3b6e887d1d Reviewed-by: Israel Lins Albuquerque Reviewed-by: Mark Brand --- src/sql/kernel/qsqlresult.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/sql/kernel/qsqlresult.cpp') diff --git a/src/sql/kernel/qsqlresult.cpp b/src/sql/kernel/qsqlresult.cpp index 3a45ccbcce7..1f9bcec603c 100644 --- a/src/sql/kernel/qsqlresult.cpp +++ b/src/sql/kernel/qsqlresult.cpp @@ -584,6 +584,8 @@ void QSqlResult::setForwardOnly(bool forward) functionality where possible. Returns true if the query is prepared successfully; otherwise returns false. + Note: This method should have been called "safePrepare()". + \sa prepare() */ bool QSqlResult::savePrepare(const QString& query) -- cgit v1.2.3 From 6c151605bc18f811d5018417f287e816561fc4ad Mon Sep 17 00:00:00 2001 From: Israel Lins Date: Thu, 7 Feb 2013 16:15:24 -0300 Subject: QSqlResult: consolidate SQL parsing for binding Consolidated SQL parsing for binding values, removing repeated code. Change-Id: I77aadcfd2673b067f7deb52b826d7b5a2ba2ae2a Reviewed-by: Mark Brand --- src/sql/kernel/qsqlresult.cpp | 29 +++-------------------------- 1 file changed, 3 insertions(+), 26 deletions(-) (limited to 'src/sql/kernel/qsqlresult.cpp') diff --git a/src/sql/kernel/qsqlresult.cpp b/src/sql/kernel/qsqlresult.cpp index 1f9bcec603c..b720e40d8ab 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 } -- cgit v1.2.3 From 8fd7d46b3a698a212d958e61036dd493cb7c9ca5 Mon Sep 17 00:00:00 2001 From: Mark Brand Date: Sat, 9 Feb 2013 00:34:25 +0100 Subject: QSqlResult::savePrepare() simplify logic Change-Id: If0b54a4c17f1c71c2bb33ae4d514ad6a9cc17e4c Reviewed-by: Israel Lins Albuquerque Reviewed-by: Mark Brand --- src/sql/kernel/qsqlresult.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'src/sql/kernel/qsqlresult.cpp') diff --git a/src/sql/kernel/qsqlresult.cpp b/src/sql/kernel/qsqlresult.cpp index b720e40d8ab..2509d5a8b3a 100644 --- a/src/sql/kernel/qsqlresult.cpp +++ b/src/sql/kernel/qsqlresult.cpp @@ -597,13 +597,12 @@ bool QSqlResult::savePrepare(const QString& query) if (!driver()->hasFeature(QSqlDriver::PreparedQueries)) return prepare(query); - if (driver()->hasFeature(QSqlDriver::NamedPlaceholders)) { - // parse the query to memorize parameter location - d->namedToPositionalBinding(); + // parse the query to memorize parameter location + d->executedQuery = d->namedToPositionalBinding(); + + if (driver()->hasFeature(QSqlDriver::NamedPlaceholders)) d->executedQuery = d->positionalToNamedBinding(); - } else { - d->executedQuery = d->namedToPositionalBinding(); - } + return prepare(d->executedQuery); } -- cgit v1.2.3 From 00d8de8589fc799015af1aa9a84e268fba4d6a74 Mon Sep 17 00:00:00 2001 From: Mark Brand Date: Sun, 10 Feb 2013 20:45:12 +0100 Subject: move QSqlResultPrivate to private header Change-Id: Ice5464989530d521f65703daa080cb2094afef3c Reviewed-by: Oswald Buddenhagen Reviewed-by: Israel Lins Albuquerque Reviewed-by: Mark Brand --- src/sql/kernel/qsqlresult.cpp | 69 +------------------------------------------ 1 file changed, 1 insertion(+), 68 deletions(-) (limited to 'src/sql/kernel/qsqlresult.cpp') diff --git a/src/sql/kernel/qsqlresult.cpp b/src/sql/kernel/qsqlresult.cpp index 2509d5a8b3a..b3e7ad5b385 100644 --- a/src/sql/kernel/qsqlresult.cpp +++ b/src/sql/kernel/qsqlresult.cpp @@ -50,78 +50,11 @@ #include "qvector.h" #include "qsqldriver.h" #include "qpointer.h" +#include "qsqlresult_p.h" #include QT_BEGIN_NAMESPACE -struct QHolder { - QHolder(const QString& hldr = QString(), int index = -1): holderName(hldr), holderPos(index) {} - bool operator==(const QHolder& h) const { return h.holderPos == holderPos && h.holderName == holderName; } - bool operator!=(const QHolder& h) const { return h.holderPos != holderPos || h.holderName != holderName; } - QString holderName; - int holderPos; -}; - -class QSqlResultPrivate -{ -public: - QSqlResultPrivate(QSqlResult* d) - : q(d), idx(QSql::BeforeFirstRow), active(false), - isSel(false), forwardOnly(false), precisionPolicy(QSql::LowPrecisionDouble), bindCount(0), binds(QSqlResult::PositionalBinding) - {} - - void clearValues() - { - values.clear(); - bindCount = 0; - } - - void resetBindCount() - { - bindCount = 0; - } - - void clearIndex() - { - indexes.clear(); - holders.clear(); - types.clear(); - } - - void clear() - { - clearValues(); - clearIndex();; - } - - QString positionalToNamedBinding(); - QString namedToPositionalBinding(); - QString holderAt(int index) const; - -public: - QSqlResult* q; - QPointer sqldriver; - int idx; - QString sql; - bool active; - bool isSel; - QSqlError error; - bool forwardOnly; - QSql::NumericalPrecisionPolicy precisionPolicy; - - int bindCount; - QSqlResult::BindingSyntax binds; - - QString executedQuery; - QHash types; - QVector values; - typedef QHash > IndexMap; - IndexMap indexes; - - typedef QVector QHolderVector; - QHolderVector holders; -}; - static QString qFieldSerial(int); QString QSqlResultPrivate::holderAt(int index) const -- cgit v1.2.3