diff options
author | Christian Ehrlicher <ch.ehrlicher@gmx.de> | 2018-03-04 20:29:21 +0100 |
---|---|---|
committer | Edward Welbourne <edward.welbourne@qt.io> | 2018-03-23 17:03:23 +0000 |
commit | 69948f48997e2995cf212d878839acb4e7c396c3 (patch) | |
tree | 7a1ae4e212c1f42568a673daa5f02115900ab689 /src | |
parent | 25956a1e7cef0fef39c94638b44c07457b452d00 (diff) |
QSqlResult: use QVector<int> instead QList<int> for indexes value
Minor tweak: QList<int> is taking 64bit per entry, QVector<int>
only 32bit - this should reduce memory usage a little bit.
Change-Id: I3e17269feb4840343f5cecfc71f8fccd70edc80f
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp | 9 | ||||
-rw-r--r-- | src/sql/kernel/qsqlresult.cpp | 6 | ||||
-rw-r--r-- | 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<int>& indexList) { + const auto countIndexes = [](int counter, const QVector<int> &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<QVariant> prunedValues; - QList<int> handledIndexes; + QVector<int> 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<int>& indexes = d->indexes[d->fieldSerial(index)]; + QVector<int> &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<int> indexes = d->indexes.value(placeholder); + const QVector<int> 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<int> indexes = d->indexes.value(placeholder); + const QVector<int> 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<int, QSql::ParamType> types; QVector<QVariant> values; - typedef QHash<QString, QList<int> > IndexMap; + typedef QHash<QString, QVector<int> > IndexMap; IndexMap indexes; typedef QVector<QHolder> QHolderVector; |