From b211148e4b4167483e1a78a45ae8fef97e5a4f2d Mon Sep 17 00:00:00 2001 From: Christian Ehrlicher Date: Fri, 1 Jan 2021 20:07:29 +0100 Subject: Sql ODBC driver: add direct support for float and short datatype This patch adds native support for SQL_REAL (float) and SQL_SMALLINT (short). Previously those datatypes were mapped to double and integer. [ChangeLog][QtSql] The ODBC driver now properly maps QMetaType::Float to real sql datatype and QMetaType::Short to smallint Fixes: QTBUG-8963 Fixes: QTBUG-57279 Change-Id: Ifec4c609734dbe6165c1ebdadb461c2aae47ba78 Reviewed-by: Andy Shaw --- .../sql/kernel/qsqldatabase/tst_qsqldatabase.cpp | 37 ++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'tests/auto/sql/kernel') diff --git a/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp b/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp index f5a158e3c1..0ef4caeafa 100644 --- a/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp +++ b/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp @@ -99,6 +99,8 @@ private slots: void recordSQLServer(); void recordIBase_data() {generic_data("QIBASE"); } void recordIBase(); + void recordODBC_data() { generic_data("QODBC"); } + void recordODBC(); void eventNotificationIBase_data() { generic_data("QIBASE"); } void eventNotificationIBase(); @@ -1016,6 +1018,41 @@ void tst_QSqlDatabase::recordIBase() commonFieldTest(fieldDefs, db, fieldCount); } +void tst_QSqlDatabase::recordODBC() +{ + QFETCH(QString, dbName); + QSqlDatabase db = QSqlDatabase::database(dbName); + CHECK_DATABASE(db); + + static QDateTime dt(QDate::currentDate(), QTime(1, 2, 3, 0)); + static const FieldDef fieldDefs[] = { + FieldDef("decimal(10, 9)", QMetaType::Double, 1.123456789), + FieldDef("numeric(5, 2)", QMetaType::Double, 123.67), + FieldDef("float", QMetaType::Double, 1.123456789), + FieldDef("double precision", QMetaType::Double, 1.123456789), + FieldDef("real", QMetaType::Float, 1.12345), + +// FieldDef("tinyint", QMetaType::Char, 127), // not supported by psqlODBC + FieldDef("smallint", QMetaType::Short, 32767), + FieldDef("integer", QMetaType::Int, 2147483647), + FieldDef("bigint", QMetaType::LongLong, Q_INT64_C(9223372036854775807)), + + FieldDef("date", QMetaType::QDate, QDate::currentDate()), + FieldDef("timestamp", QMetaType::QDateTime, dt, false), + FieldDef("time", QMetaType::QTime, dt.time()), + FieldDef("char(20)", QMetaType::QString, "Blah"), + FieldDef("varchar(20)", QMetaType::QString, "BlahBlah"), + FieldDef("text", QMetaType::QString, QString("blah6")), + + FieldDef() + }; + + const int fieldCount = createFieldTable(fieldDefs, db); + QVERIFY(fieldCount > 0); + + commonFieldTest(fieldDefs, db, fieldCount); +} + void tst_QSqlDatabase::recordSQLite() { QFETCH(QString, dbName); -- cgit v1.2.3