summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Ehrlicher <ch.ehrlicher@gmx.de>2018-03-04 20:29:21 +0100
committerEdward Welbourne <edward.welbourne@qt.io>2018-03-23 17:03:23 +0000
commit69948f48997e2995cf212d878839acb4e7c396c3 (patch)
tree7a1ae4e212c1f42568a673daa5f02115900ab689
parent25956a1e7cef0fef39c94638b44c07457b452d00 (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>
-rw-r--r--src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp9
-rw-r--r--src/sql/kernel/qsqlresult.cpp6
-rw-r--r--src/sql/kernel/qsqlresult_p.h2
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;