diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/sql/kernel/qsqldatabase/tst_databases.h | 2 | ||||
-rw-r--r-- | tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp | 42 |
2 files changed, 43 insertions, 1 deletions
diff --git a/tests/auto/sql/kernel/qsqldatabase/tst_databases.h b/tests/auto/sql/kernel/qsqldatabase/tst_databases.h index af6dc6b9f4..8b080324d5 100644 --- a/tests/auto/sql/kernel/qsqldatabase/tst_databases.h +++ b/tests/auto/sql/kernel/qsqldatabase/tst_databases.h @@ -493,7 +493,7 @@ public: { const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db); if (dbType == QSqlDriver::PostgreSQL) - return QLatin1String("timestamp"); + return QLatin1String("timestamptz"); if (dbType == QSqlDriver::Oracle && getOraVersion(db) >= 9) return QLatin1String("timestamp(0)"); return QLatin1String("datetime"); diff --git a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp index f5d71a75cf..1943b6ec92 100644 --- a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp +++ b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp @@ -224,6 +224,9 @@ private slots: void QTBUG_2192_data() { generic_data(); } void QTBUG_2192(); + void QTBUG_36211_data() { generic_data("QPSQL"); } + void QTBUG_36211(); + void sqlite_constraint_data() { generic_data("QSQLITE"); } void sqlite_constraint(); @@ -3558,6 +3561,45 @@ void tst_QSqlQuery::QTBUG_2192() } } +void tst_QSqlQuery::QTBUG_36211() +{ + QFETCH( QString, dbName ); + QSqlDatabase db = QSqlDatabase::database( dbName ); + CHECK_DATABASE( db ); + if (tst_Databases::getDatabaseType(db) == QSqlDriver::PostgreSQL) { + const QString tableName(qTableName("bug36211", __FILE__, db)); + tst_Databases::safeDropTable( db, tableName ); + + QSqlQuery q(db); + QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (dtwtz timestamptz, dtwotz timestamp)").arg(tableName))); + + QTimeZone l_tzBrazil("BRT"); + QTimeZone l_tzChina("CST"); + QDateTime dt = QDateTime(QDate(2014, 10, 30), QTime(14, 12, 02, 357)); + QVERIFY_SQL(q, prepare("INSERT INTO " + tableName + " (dtwtz, dtwotz) VALUES (:dt, :dt)")); + q.bindValue(":dt", dt); + QVERIFY_SQL(q, exec()); + q.bindValue(":dt", dt.toTimeZone(l_tzBrazil)); + QVERIFY_SQL(q, exec()); + q.bindValue(":dt", dt.toTimeZone(l_tzChina)); + QVERIFY_SQL(q, exec()); + + QVERIFY_SQL(q, exec("SELECT dtwtz, dtwotz FROM " + tableName)); + + for (int i = 0; i < 3; ++i) { + QVERIFY_SQL(q, next()); + + for (int j = 0; j < 2; ++j) { + // Check if retrieved value preserves reported precision + int precision = qMax(0, q.record().field(j).precision()); + int diff = qAbs(q.value(j).toDateTime().msecsTo(dt)); + int keep = qMin(1000, (int)qPow(10.0, precision)); + QVERIFY(diff <= 1000 - keep); + } + } + } +} + void tst_QSqlQuery::oraOCINumber() { QFETCH( QString, dbName ); |