summaryrefslogtreecommitdiffstats
path: root/tests/auto/sql/kernel
diff options
context:
space:
mode:
authorChristian Ehrlicher <ch.ehrlicher@gmx.de>2021-01-01 20:07:29 +0100
committerChristian Ehrlicher <ch.ehrlicher@gmx.de>2021-01-10 13:02:14 +0100
commitb211148e4b4167483e1a78a45ae8fef97e5a4f2d (patch)
tree884d9e657a8a5e5ae2cbde9b3f781bcf3855968d /tests/auto/sql/kernel
parent161e8f4d5dbaa568975d61d770144484e14a62e0 (diff)
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 <andy.shaw@qt.io>
Diffstat (limited to 'tests/auto/sql/kernel')
-rw-r--r--tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp37
1 files changed, 37 insertions, 0 deletions
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);