From 69948f48997e2995cf212d878839acb4e7c396c3 Mon Sep 17 00:00:00 2001 From: Christian Ehrlicher Date: Sun, 4 Mar 2018 20:29:21 +0100 Subject: QSqlResult: use QVector instead QList for indexes value Minor tweak: QList is taking 64bit per entry, QVector only 32bit - this should reduce memory usage a little bit. Change-Id: I3e17269feb4840343f5cecfc71f8fccd70edc80f Reviewed-by: Andy Shaw --- src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp | 9 +++++---- src/sql/kernel/qsqlresult.cpp | 6 +++--- src/sql/kernel/qsqlresult_p.h | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp b/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp index cb3d905f46..91d2e9b205 100644 --- a/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp +++ b/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp @@ -471,7 +471,7 @@ bool QSQLiteResult::exec() // can end up in a case where for virtual tables it returns 0 even though it // has parameters if (paramCount > 1 && paramCount < values.count()) { - const auto countIndexes = [](int counter, const QList& indexList) { + const auto countIndexes = [](int counter, const QVector &indexList) { return counter + indexList.length(); }; @@ -485,13 +485,14 @@ bool QSQLiteResult::exec() // placeholders. So we need to ensure the QVector has only one instance of // each value as SQLite will do the rest for us. QVector prunedValues; - QList handledIndexes; + QVector handledIndexes; for (int i = 0, currentIndex = 0; i < values.size(); ++i) { if (handledIndexes.contains(i)) continue; const auto placeHolder = QString::fromUtf8(sqlite3_bind_parameter_name(d->stmt, currentIndex + 1)); - handledIndexes << d->indexes[placeHolder]; - prunedValues << values.at(d->indexes[placeHolder].first()); + const auto &indexes = d->indexes.value(placeHolder); + handledIndexes << indexes; + prunedValues << values.at(indexes.first()); ++currentIndex; } values = prunedValues; diff --git a/src/sql/kernel/qsqlresult.cpp b/src/sql/kernel/qsqlresult.cpp index cdb1379502..915a980bf0 100644 --- a/src/sql/kernel/qsqlresult.cpp +++ b/src/sql/kernel/qsqlresult.cpp @@ -690,7 +690,7 @@ void QSqlResult::bindValue(int index, const QVariant& val, QSql::ParamType param { Q_D(QSqlResult); d->binds = PositionalBinding; - QList& indexes = d->indexes[d->fieldSerial(index)]; + QVector &indexes = d->indexes[d->fieldSerial(index)]; if (!indexes.contains(index)) indexes.append(index); if (d->values.count() <= index) @@ -717,7 +717,7 @@ void QSqlResult::bindValue(const QString& placeholder, const QVariant& val, d->binds = NamedBinding; // if the index has already been set when doing emulated named // bindings - don't reset it - const QList indexes = d->indexes.value(placeholder); + const QVector indexes = d->indexes.value(placeholder); for (int idx : indexes) { if (d->values.count() <= idx) d->values.resize(idx + 1); @@ -764,7 +764,7 @@ QVariant QSqlResult::boundValue(int index) const QVariant QSqlResult::boundValue(const QString& placeholder) const { Q_D(const QSqlResult); - QList indexes = d->indexes.value(placeholder); + const QVector indexes = d->indexes.value(placeholder); return d->values.value(indexes.value(0,-1)); } diff --git a/src/sql/kernel/qsqlresult_p.h b/src/sql/kernel/qsqlresult_p.h index 7b312800c1..f0816a7fb5 100644 --- a/src/sql/kernel/qsqlresult_p.h +++ b/src/sql/kernel/qsqlresult_p.h @@ -135,7 +135,7 @@ public: QString executedQuery; QHash types; QVector values; - typedef QHash > IndexMap; + typedef QHash > IndexMap; IndexMap indexes; typedef QVector QHolderVector; -- cgit v1.2.3