ODBC: fix loss of milliseconds when binding QDateTime
Caused by operator precedence error. Follow-up to commit b8b79a0f37ec74fd5b4ad829e522a384ba3622ae Task-number: QTBUG-2192 Change-Id: I17decd18c469b48a0bc938ae05c16cced8042219 Reviewed-by: Mark Brand <mabrand@mabrand.nl>
This commit is contained in:
parent
18be0749eb
commit
36b6d4afc9
@ -1407,7 +1407,7 @@ bool QODBCResult::exec()
|
||||
|
||||
// (How many leading digits do we want to keep? With SQL Server 2005, this should be 3: 123000000)
|
||||
int keep = (int)qPow(10.0, 9 - qMin(9, precision));
|
||||
dt->fraction /= keep * keep;
|
||||
dt->fraction = (dt->fraction / keep) * keep;
|
||||
}
|
||||
|
||||
r = SQLBindParameter(d->hStmt,
|
||||
|
@ -3458,14 +3458,19 @@ void tst_QSqlQuery::QTBUG_2192()
|
||||
QSqlQuery q(db);
|
||||
QVERIFY_SQL(q, exec(QString("CREATE TABLE " + tableName + " (dt %1)").arg(tst_Databases::dateTimeTypeName(db))));
|
||||
|
||||
QDateTime dt = QDateTime(QDate(2012, 7, 4), QTime(23, 59, 59, 999));
|
||||
QVERIFY_SQL(q, prepare("INSERT INTO " + tableName + " (dt) VALUES (?)"));
|
||||
q.bindValue(0, QVariant(QDateTime(QDate(2012, 7, 4), QTime(23, 59, 59, 999))));
|
||||
q.bindValue(0, dt);
|
||||
QVERIFY_SQL(q, exec());
|
||||
|
||||
// Check if value was stored with at least second precision.
|
||||
QVERIFY_SQL(q, exec("SELECT dt FROM " + tableName));
|
||||
QVERIFY_SQL(q, next());
|
||||
QVERIFY(q.value(0).toDateTime().msecsTo(QDateTime(QDate(2012, 7, 4), QTime(23, 59, 59, 999))) < 1000 );
|
||||
|
||||
// Check if retrieved value preserves reported precision
|
||||
int precision = qMax(0, q.record().field("dt").precision());
|
||||
int diff = qAbs(q.value(0).toDateTime().msecsTo(dt));
|
||||
int keep = qMin(1000, (int)qPow(10.0, precision));
|
||||
QVERIFY(diff <= 1000 - keep);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user