summaryrefslogtreecommitdiffstats
path: root/tests/benchmarks/sql/kernel/qsqlrecord/tst_bench_qsqlrecord.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/benchmarks/sql/kernel/qsqlrecord/tst_bench_qsqlrecord.cpp')
-rw-r--r--tests/benchmarks/sql/kernel/qsqlrecord/tst_bench_qsqlrecord.cpp110
1 files changed, 110 insertions, 0 deletions
diff --git a/tests/benchmarks/sql/kernel/qsqlrecord/tst_bench_qsqlrecord.cpp b/tests/benchmarks/sql/kernel/qsqlrecord/tst_bench_qsqlrecord.cpp
new file mode 100644
index 0000000000..55ec1983ee
--- /dev/null
+++ b/tests/benchmarks/sql/kernel/qsqlrecord/tst_bench_qsqlrecord.cpp
@@ -0,0 +1,110 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QTest>
+#include <QtSql/QtSql>
+
+#include "../../../../auto/sql/kernel/qsqldatabase/tst_databases.h"
+
+class tst_QSqlRecord : public QObject
+{
+ Q_OBJECT
+
+public slots:
+ void initTestCase();
+ void cleanupTestCase();
+ void cleanup();
+
+private slots:
+ void benchmarkRecord_data() { generic_data(); }
+ void benchmarkRecord();
+ void benchFieldName_data() { generic_data("QPSQL"); }
+ void benchFieldName();
+ void benchFieldIndex_data() { generic_data("QPSQL"); }
+ void benchFieldIndex();
+
+private:
+ void generic_data(const QString &engine = QString());
+
+ tst_Databases dbs;
+};
+
+QTEST_MAIN(tst_QSqlRecord)
+
+void tst_QSqlRecord::initTestCase()
+{
+ dbs.open();
+}
+
+void tst_QSqlRecord::cleanupTestCase()
+{
+ dbs.close();
+}
+
+void tst_QSqlRecord::cleanup()
+{
+}
+
+void tst_QSqlRecord::generic_data(const QString &engine)
+{
+ if (dbs.fillTestTable(engine) == 0) {
+ if (engine.isEmpty())
+ QSKIP("No database drivers are available in this Qt configuration");
+ else
+ QSKIP(QString("No database drivers of type %1 are available in this Qt configuration").arg(engine).toLocal8Bit());
+ }
+}
+
+void tst_QSqlRecord::benchmarkRecord()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ TableScope ts(db, "record", __FILE__);
+ {
+ QSqlQuery qry(db);
+ QVERIFY_SQL(qry, exec("create table " + ts.tableName() +
+ " (id int NOT NULL, t_varchar varchar(20), "
+ "t_char char(20), primary key(id))"));
+ // Limit to 500: at 600, the set-up takes nearly 5 minutes
+ for (int i = 0; i < 500; i++)
+ QVERIFY_SQL(qry, exec(QString("INSERT INTO " + ts.tableName() +
+ " VALUES (%1, 'VarChar%1', 'Char%1')").arg(i)));
+ QVERIFY_SQL(qry, exec(QString("SELECT * from ") + ts.tableName()));
+ QBENCHMARK {
+ while (qry.next())
+ qry.record();
+ QVERIFY(qry.seek(0));
+ }
+ }
+}
+
+void tst_QSqlRecord::benchFieldName()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ QCOMPARE(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");
+ QVERIFY(qry.seek(0));
+ }
+}
+
+void tst_QSqlRecord::benchFieldIndex()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ QCOMPARE(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(0);
+ QVERIFY(qry.seek(0));
+ }
+}
+
+#include "tst_bench_qsqlrecord.moc"