summaryrefslogtreecommitdiffstats
path: root/tests/auto/sql
diff options
context:
space:
mode:
authorChristian Ehrlicher <ch.ehrlicher@gmx.de>2018-02-07 20:12:33 +0100
committerChristian Ehrlicher <ch.ehrlicher@gmx.de>2018-03-07 18:35:57 +0000
commit3185b40d5de1092ed2bdd83f72478a344c5fc9e9 (patch)
tree044e6b8d3182b13b94529f2a62dabdb6f98a93d5 /tests/auto/sql
parent70cfe551b285b4a3e770aabbca8f8bdcfadffb09 (diff)
SQL/Postgres: Fix support for nan, inf and -inf
Postgresql needs a special value for nan and +/- inf. This was considered during insert but not during select. Also remove some pre-c++11 inf/nan - handling and replace it with Qt equivalents. Change-Id: I044ca58e9cf673f4b100b05a0d8e25c8a9c29ec5 Reviewed-by: Robert Szefner <robertsz27@interia.pl> Reviewed-by: Andy Shaw <andy.shaw@qt.io>
Diffstat (limited to 'tests/auto/sql')
-rw-r--r--tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp b/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp
index 427bc092a5..89978319a0 100644
--- a/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp
+++ b/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp
@@ -126,6 +126,8 @@ private slots:
void formatValueTrimStrings();
void precisionPolicy_data() { generic_data(); }
void precisionPolicy();
+ void infinityAndNan_data() { generic_data(); }
+ void infinityAndNan();
void multipleThreads_data() { generic_data(); }
void multipleThreads();
@@ -1467,6 +1469,46 @@ void tst_QSqlDatabase::precisionPolicy()
db.setNumericalPrecisionPolicy(oldPrecision);
}
+void tst_QSqlDatabase::infinityAndNan()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+
+ if (tst_Databases::getDatabaseType(db) != QSqlDriver::PostgreSQL)
+ QSKIP("checking for infinity/nan currently only works for PostgreSQL");
+
+ QSqlQuery q(db);
+ const QString tableName(qTableName("infititytest", __FILE__, db));
+ tst_Databases::safeDropTables(db, {tableName});
+ QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (id smallint, val double precision)").arg(tableName)));
+
+ QVERIFY_SQL(q, prepare(QString("INSERT INTO %1 VALUES (?, ?)").arg(tableName)));
+
+ q.bindValue(0, 1);
+ q.bindValue(1, qQNaN());
+ QVERIFY_SQL(q, exec());
+ q.bindValue(0, 2);
+ q.bindValue(1, qInf());
+ QVERIFY_SQL(q, exec());
+ q.bindValue(0, 3);
+ q.bindValue(1, -qInf());
+ QVERIFY_SQL(q, exec());
+
+ QVERIFY_SQL(q, exec(QString("SELECT val FROM %1 ORDER BY id").arg(tableName)));
+
+ QVERIFY_SQL(q, next());
+ QVERIFY(qIsNaN(q.value(0).toDouble()));
+
+ QVERIFY_SQL(q, next());
+ QVERIFY(qIsInf(q.value(0).toDouble()));
+ QVERIFY(q.value(0).toDouble() > 0);
+
+ QVERIFY_SQL(q, next());
+ QVERIFY(qIsInf(q.value(0).toDouble()));
+ QVERIFY(q.value(0).toDouble() < 0);
+}
+
// This test needs a ODBC data source containing MYSQL in it's name
void tst_QSqlDatabase::mysqlOdbc_unsignedIntegers()
{