From a924b4d58f66da44cd9a5ed8896f80a5121bac4a Mon Sep 17 00:00:00 2001 From: Christian Ehrlicher Date: Thu, 15 Feb 2018 21:34:50 +0100 Subject: psql: do not try to get table name when PQftable returns InvalidOid When the table for a selected column can't be determined (e.g. because there is no table for it), PQftable returns InvalidOid. This was not covered and a query to determine the table name was executed every time which slowed down calls to QSqlQuery::value(QString). Task-number: QTBUG-65226 Change-Id: Idd8fbaaef7b01ca4151439f46cad2cce6f1c93e9 Reviewed-by: Andy Shaw --- .../sql/kernel/qsqlrecord/tst_qsqlrecord.cpp | 33 ++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'tests/benchmarks') diff --git a/tests/benchmarks/sql/kernel/qsqlrecord/tst_qsqlrecord.cpp b/tests/benchmarks/sql/kernel/qsqlrecord/tst_qsqlrecord.cpp index 465dabca0e..8d7e70f8c9 100644 --- a/tests/benchmarks/sql/kernel/qsqlrecord/tst_qsqlrecord.cpp +++ b/tests/benchmarks/sql/kernel/qsqlrecord/tst_qsqlrecord.cpp @@ -50,6 +50,10 @@ public slots: private slots: void benchmarkRecord_data() { generic_data(); } void benchmarkRecord(); + void benchFieldName_data() { generic_data(); } + void benchFieldName(); + void benchFieldIndex_data() { generic_data(); } + void benchFieldIndex(); private: void generic_data(const QString &engine = QString()); @@ -188,4 +192,33 @@ void tst_QSqlRecord::benchmarkRecord() tst_Databases::safeDropTables(db, QStringList() << tableName); } +void tst_QSqlRecord::benchFieldName() +{ + QFETCH(QString, dbName); + QSqlDatabase db = QSqlDatabase::database(dbName); + if (tst_Databases::getDatabaseType(db) == QSqlDriver::PostgreSQL) { + QSqlQuery qry(db); + QVERIFY_SQL(qry, exec("SELECT GENERATE_SERIES(1,5000) AS r")); + QBENCHMARK { + while (qry.next()) + qry.value("r"); + } + } +} + +void tst_QSqlRecord::benchFieldIndex() +{ + QFETCH(QString, dbName); + QSqlDatabase db = QSqlDatabase::database(dbName); + if (tst_Databases::getDatabaseType(db) == QSqlDriver::PostgreSQL) { + QSqlQuery qry(db); + QVERIFY_SQL(qry, exec("SELECT GENERATE_SERIES(1,5000) AS r")); + qry = db.exec("SELECT GENERATE_SERIES(1,5000) AS r"); + QBENCHMARK { + while (qry.next()) + qry.value(0); + } + } +} + #include "tst_qsqlrecord.moc" -- cgit v1.2.3