diff options
author | Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> | 2015-02-17 14:29:09 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> | 2015-02-18 11:01:15 +0000 |
commit | 916af48cff66e0acbeb6da39997498ce3b9626ce (patch) | |
tree | 7ab51827d5816daa06c1697876d8ccc63102550f /tests/auto/sql | |
parent | 2f5c2ec12f3c45a0806b5872c206a680e9fce014 (diff) |
PostgreSQL: Fix special floating point handling for 'float' types.
Introduce a template function to determine the special values
via macro and use that for QVariant::Double and QMetaType::Float.
Task-number: QTBUG-44381
Change-Id: I379dd82b22d467b0aebaa42f4f0f5c52472a5c47
Reviewed-by: Andy Shaw <andy.shaw@digia.com>
Diffstat (limited to 'tests/auto/sql')
-rw-r--r-- | tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp index 9502343bd7..d2b4474dd4 100644 --- a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp +++ b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp @@ -34,6 +34,8 @@ #include <QtTest/QtTest> #include <QtSql/QtSql> +#include <numeric> + #include "../qsqldatabase/tst_databases.h" const QString qtest(qTableName("qtest", __FILE__, QSqlDatabase())); @@ -159,6 +161,8 @@ private slots: void bindBool(); void psql_bindWithDoubleColonCastOperator_data() { generic_data("QPSQL"); } void psql_bindWithDoubleColonCastOperator(); + void psql_specialFloatValues_data() { generic_data("QPSQL"); } + void psql_specialFloatValues(); void queryOnInvalidDatabase_data() { generic_data(); } void queryOnInvalidDatabase(); void createQueryOnClosedDatabase_data() { generic_data(); } @@ -2437,6 +2441,38 @@ void tst_QSqlQuery::psql_bindWithDoubleColonCastOperator() QCOMPARE( q.executedQuery(), QString( "select sum((fld1 - fld2)::int) from " + tablename + " where id1 = 1 and id2 =2 and id3=3" ) ); } +void tst_QSqlQuery::psql_specialFloatValues() +{ + if (!std::numeric_limits<float>::has_quiet_NaN) + QSKIP("Platform does not have quiet_NaN"); + if (!std::numeric_limits<float>::has_infinity) + QSKIP("Platform does not have infinity"); + + QFETCH( QString, dbName ); + QSqlDatabase db = QSqlDatabase::database( dbName ); + + CHECK_DATABASE( db ); + QSqlQuery query(db); + const QString tableName = qTableName("floattest", __FILE__, db); + QVERIFY_SQL( query, exec("create table " + tableName + " (value float)" ) ); + QVERIFY_SQL(query, prepare("insert into " + tableName + " values(:value)") ); + + QVariantList data; + data << QVariant(double(42.42)) + << QVariant(std::numeric_limits<double>::quiet_NaN()) + << QVariant(std::numeric_limits<double>::infinity()) + << QVariant(float(42.42)) + << QVariant(std::numeric_limits<float>::quiet_NaN()) + << QVariant(std::numeric_limits<float>::infinity()); + + foreach (const QVariant &v, data) { + query.bindValue(":value", v); + QVERIFY_SQL( query, exec() ); + } + + QVERIFY_SQL( query, exec("drop table " + tableName) ); +} + /* For task 157397: Using QSqlQuery with an invalid QSqlDatabase does not set the last error of the query. This test function will output some warnings, that's ok. |