summaryrefslogtreecommitdiffstats
path: root/tests/auto/sql
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@theqtcompany.com>2015-02-17 14:29:09 +0100
committerFriedemann Kleint <Friedemann.Kleint@theqtcompany.com>2015-02-18 11:01:15 +0000
commit916af48cff66e0acbeb6da39997498ce3b9626ce (patch)
tree7ab51827d5816daa06c1697876d8ccc63102550f /tests/auto/sql
parent2f5c2ec12f3c45a0806b5872c206a680e9fce014 (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.cpp36
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.