summaryrefslogtreecommitdiffstats
path: root/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp')
-rw-r--r--tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp245
1 files changed, 114 insertions, 131 deletions
diff --git a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
index ff458d6f2b..1a100ce706 100644
--- a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
+++ b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
@@ -97,7 +97,7 @@ private slots:
void record_sqlite();
void finish_data() { generic_data(); }
void finish();
- void sqlite_finish_data() { generic_data(); }
+ void sqlite_finish_data() { generic_data("QSQLITE"); }
void sqlite_finish();
void nextResult_data() { generic_data(); }
void nextResult();
@@ -107,14 +107,14 @@ private slots:
void forwardOnly();
// bug specific tests
- void bitField_data() {generic_data("QTDS"); }
- void bitField();
- void nullBlob_data() { generic_data("QOCI"); }
- void nullBlob();
+ void tds_bitField_data() { generic_data("QTDS"); }
+ void tds_bitField();
+ void oci_nullBlob_data() { generic_data("QOCI"); }
+ void oci_nullBlob();
void blob_data() { generic_data(); }
void blob();
- void rawField_data() { generic_data("QOCI"); }
- void rawField();
+ void oci_rawField_data() { generic_data("QOCI"); }
+ void oci_rawField();
void precision_data() { generic_data(); }
void precision();
void nullResult_data() { generic_data(); }
@@ -131,8 +131,8 @@ private slots:
void synonyms();
void oraOutValues_data() { generic_data("QOCI"); }
void oraOutValues();
- void mysqlOutValues_data() { generic_data("QMYSQL"); }
- void mysqlOutValues();
+ void mysql_outValues_data() { generic_data("QMYSQL"); }
+ void mysql_outValues();
void oraClob_data() { generic_data("QOCI"); }
void oraClob();
void oraLong_data() { generic_data("QOCI"); }
@@ -163,8 +163,8 @@ private slots:
void lastQuery();
void bindBool_data() { generic_data(); }
void bindBool();
- void bindWithDoubleColonCastOperator_data() { generic_data(); }
- void bindWithDoubleColonCastOperator();
+ void psql_bindWithDoubleColonCastOperator_data() { generic_data("QPSQL"); }
+ void psql_bindWithDoubleColonCastOperator();
void queryOnInvalidDatabase_data() { generic_data(); }
void queryOnInvalidDatabase();
void createQueryOnClosedDatabase_data() { generic_data(); }
@@ -286,7 +286,7 @@ void tst_QSqlQuery::cleanup()
QFETCH( QString, dbName );
QSqlDatabase db = QSqlDatabase::database( dbName );
CHECK_DATABASE( db );
-
+ const QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db);
if ( QTest::currentTestFunction() == QLatin1String( "numRowsAffected" )
|| QTest::currentTestFunction() == QLatin1String( "transactions" )
|| QTest::currentTestFunction() == QLatin1String( "size" )
@@ -295,8 +295,7 @@ void tst_QSqlQuery::cleanup()
populateTestTables( db );
}
- if ( QTest::currentTestFailed() && ( db.driverName().startsWith( "QOCI" )
- || db.driverName().startsWith( "QODBC" ) ) ) {
+ if (QTest::currentTestFailed() && (dbType == QSqlDriverPrivate::Oracle || db.driverName().startsWith("QODBC"))) {
//since Oracle ODBC totally craps out on error, we init again
db.close();
db.open();
@@ -315,6 +314,7 @@ void tst_QSqlQuery::generic_data(const QString& engine)
void tst_QSqlQuery::dropTestTables( QSqlDatabase db )
{
+ QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db);
QStringList tablenames;
// drop all the table in case a testcase failed
tablenames << qtest
@@ -351,24 +351,24 @@ void tst_QSqlQuery::dropTestTables( QSqlDatabase db )
<< qTableName("qtest_oraOCINumber", __FILE__, db)
<< qTableName("bug2192", __FILE__, db);
- if ( db.driverName().startsWith("QPSQL") )
+ if (dbType == QSqlDriverPrivate::PostgreSQL)
tablenames << qTableName("task_233829", __FILE__, db);
- if ( db.driverName().startsWith("QSQLITE") )
+ if (dbType == QSqlDriverPrivate::SQLite)
tablenames << qTableName("record_sqlite", __FILE__, db);
- if ( tst_Databases::isSqlServer( db ) || db.driverName().startsWith( "QOCI" ) )
+ if (dbType == QSqlDriverPrivate::MSSqlServer || dbType == QSqlDriverPrivate::Oracle)
tablenames << qTableName("qtest_longstr", __FILE__, db);
- if (tst_Databases::isSqlServer( db ))
+ if (dbType == QSqlDriverPrivate::MSSqlServer)
db.exec("DROP PROCEDURE " + qTableName("test141895_proc", __FILE__, db));
- if (tst_Databases::isMySQL( db ))
- db.exec("DROP PROCEDURE IF EXISTS "+qTableName("bug6852_proc", __FILE__, db));
+ if (dbType == QSqlDriverPrivate::MySqlServer)
+ db.exec("DROP PROCEDURE IF EXISTS "+ qTableName("bug6852_proc", __FILE__, db));
tst_Databases::safeDropTables( db, tablenames );
- if ( db.driverName().startsWith( "QOCI" ) ) {
+ if (dbType == QSqlDriverPrivate::Oracle) {
QSqlQuery q( db );
q.exec("DROP PACKAGE " + qTableName("pkg", __FILE__, db));
}
@@ -377,20 +377,20 @@ void tst_QSqlQuery::dropTestTables( QSqlDatabase db )
void tst_QSqlQuery::createTestTables( QSqlDatabase db )
{
QSqlQuery q( db );
-
- if ( db.driverName().startsWith( "QMYSQL" ) )
+ QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db);
+ if (dbType == QSqlDriverPrivate::MySqlServer)
// ### stupid workaround until we find a way to hardcode this
// in the MySQL server startup script
q.exec( "set table_type=innodb" );
- else if(tst_Databases::isPostgreSQL(db))
+ else if (dbType == QSqlDriverPrivate::PostgreSQL)
QVERIFY_SQL( q, exec("set client_min_messages='warning'"));
- if(tst_Databases::isPostgreSQL(db))
+ if (dbType == QSqlDriverPrivate::PostgreSQL)
QVERIFY_SQL( q, exec( "create table " + qtest + " (id serial NOT NULL, t_varchar varchar(20), t_char char(20), primary key(id)) WITH OIDS" ) );
else
QVERIFY_SQL( q, exec( "create table " + qtest + " (id int "+tst_Databases::autoFieldName(db) +" NOT NULL, t_varchar varchar(20), t_char char(20), primary key(id))" ) );
- if ( tst_Databases::isSqlServer( db ) || db.driverName().startsWith( "QTDS" ) )
+ if (dbType == QSqlDriverPrivate::MSSqlServer || dbType == QSqlDriverPrivate::Sybase)
QVERIFY_SQL(q, exec("create table " + qTableName("qtest_null", __FILE__, db) + " (id int null, t_varchar varchar(20) null)"));
else
QVERIFY_SQL(q, exec("create table " + qTableName("qtest_null", __FILE__, db) + " (id int, t_varchar varchar(20))"));
@@ -429,8 +429,8 @@ void tst_QSqlQuery::char1Select()
QVERIFY_SQL(q, exec("insert into " + tbl + " values ('a')"));
QVERIFY_SQL(q, exec("select * from " + tbl));
QVERIFY( q.next() );
-
- if ( db.driverName().startsWith( "QIBASE" ) )
+ QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db);
+ if (dbType == QSqlDriverPrivate::Interbase)
QCOMPARE( q.value( 0 ).toString().left( 1 ), QString( "a" ) );
else
QCOMPARE( q.value( 0 ).toString(), QString( "a" ) );
@@ -444,8 +444,8 @@ void tst_QSqlQuery::char1SelectUnicode()
QFETCH( QString, dbName );
QSqlDatabase db = QSqlDatabase::database( dbName );
CHECK_DATABASE( db );
-
- if(db.driverName().startsWith("QDB2"))
+ QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db);
+ if (dbType == QSqlDriverPrivate::DB2)
QSKIP("Needs someone with more Unicode knowledge than I have to fix");
if ( db.driver()->hasFeature( QSqlDriver::Unicode ) ) {
@@ -458,16 +458,14 @@ void tst_QSqlQuery::char1SelectUnicode()
QString createQuery;
const QString char1SelectUnicode(qTableName("char1SU", __FILE__, db));
- if ( tst_Databases::isSqlServer( db ) )
+ if (dbType == QSqlDriverPrivate::MSSqlServer)
createQuery = "create table " + char1SelectUnicode + "(id nchar(1))";
- else if ( db.driverName().startsWith( "QDB2" )
- || db.driverName().startsWith( "QOCI" )
- || db.driverName().startsWith( "QPSQL" ) )
+ else if (dbType == QSqlDriverPrivate::DB2 || dbType == QSqlDriverPrivate::Oracle || dbType == QSqlDriverPrivate::PostgreSQL)
createQuery = "create table " + char1SelectUnicode + " (id char(3))";
- else if ( db.driverName().startsWith( "QIBASE" ) )
+ else if (dbType == QSqlDriverPrivate::Interbase)
createQuery = "create table " + char1SelectUnicode +
" (id char(1) character set unicode_fss)";
- else if ( db.driverName().startsWith( "QMYSQL" ) )
+ else if (dbType == QSqlDriverPrivate::MySqlServer)
createQuery = "create table " + char1SelectUnicode + " (id char(1)) "
"default character set 'utf8'";
else
@@ -531,18 +529,18 @@ void tst_QSqlQuery::oraRowId()
QCOMPARE( q.value( 0 ).toString(), QString( "b" ) );
}
-void tst_QSqlQuery::mysqlOutValues()
+void tst_QSqlQuery::mysql_outValues()
{
QFETCH( QString, dbName );
QSqlDatabase db = QSqlDatabase::database( dbName );
CHECK_DATABASE( db );
+ if (tst_Databases::getMySqlVersion(db).section(QChar('.'), 0, 0 ).toInt() < 5)
+ QSKIP( "Test requires MySQL >= 5.0");
+
const QString hello(qTableName("hello", __FILE__, db)), qtestproc(qTableName("qtestproc", __FILE__, db));
QSqlQuery q( db );
- if ( db.driverName().startsWith( "QMYSQL" ) && tst_Databases::getMySqlVersion( db ).section( QChar('.'), 0, 0 ).toInt()<5 )
- QSKIP( "Test requires MySQL >= 5.0");
-
q.exec( "drop function " + hello );
QVERIFY_SQL(q, exec("create function " + hello + " (s char(20)) returns varchar(50) READS SQL DATA return concat('Hello ', s)"));
@@ -593,10 +591,11 @@ void tst_QSqlQuery::bindBool()
QSqlDatabase db = QSqlDatabase::database( dbName );
CHECK_DATABASE( db );
QSqlQuery q(db);
-
+ QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db);
const QString tableName(qTableName("bindBool", __FILE__, db));
+
q.exec("DROP TABLE " + tableName);
- QString colType = db.driverName().startsWith("QPSQL") ? QLatin1String("BOOLEAN") : QLatin1String("INT");
+ QString colType = dbType == QSqlDriverPrivate::PostgreSQL ? QLatin1String("BOOLEAN") : QLatin1String("INT");
QVERIFY_SQL(q, exec("CREATE TABLE " + tableName + " (id INT, flag " + colType + " NOT NULL, PRIMARY KEY(id))"));
for (int i = 0; i < 2; ++i) {
@@ -849,14 +848,14 @@ void tst_QSqlQuery::outValues()
QSqlQuery q( db );
q.setForwardOnly( true );
-
- if ( db.driverName().startsWith( "QOCI" ) ) {
+ QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db);
+ if (dbType == QSqlDriverPrivate::Oracle) {
QVERIFY_SQL( q, exec( "create or replace procedure " + tst_outValues + "(x out int) is\n"
"begin\n"
" x := 42;\n"
"end;\n" ) );
QVERIFY( q.prepare( "call " + tst_outValues + "(?)" ) );
- } else if ( db.driverName().startsWith( "QDB2" ) ) {
+ } else if (dbType == QSqlDriverPrivate::DB2) {
q.exec( "drop procedure " + tst_outValues ); //non-fatal
QVERIFY_SQL( q, exec( "CREATE PROCEDURE " + tst_outValues + " (OUT x int)\n"
"LANGUAGE SQL\n"
@@ -864,7 +863,7 @@ void tst_QSqlQuery::outValues()
" SET x = 42;\n"
"END P1" ) );
QVERIFY( q.prepare( "call " + tst_outValues + "(?)" ) );
- } else if ( tst_Databases::isSqlServer( db ) ) {
+ } else if (dbType == QSqlDriverPrivate::MSSqlServer) {
q.exec( "drop procedure " + tst_outValues ); //non-fatal
QVERIFY_SQL( q, exec( "create procedure " + tst_outValues + " (@x int out) as\n"
"begin\n"
@@ -938,7 +937,7 @@ void tst_QSqlQuery::value()
QFETCH( QString, dbName );
QSqlDatabase db = QSqlDatabase::database( dbName );
CHECK_DATABASE( db );
-
+ const QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db);
QSqlQuery q( db );
QVERIFY_SQL( q, exec( "select id, t_varchar, t_char from " + qtest + " order by id" ) );
int i = 1;
@@ -947,14 +946,14 @@ void tst_QSqlQuery::value()
QCOMPARE( q.value( 0 ).toInt(), i );
QCOMPARE( q.value( "id" ).toInt(), i );
- if ( db.driverName().startsWith( "QIBASE" ) )
+ if (dbType == QSqlDriverPrivate::Interbase)
QVERIFY( q.value( 1 ).toString().startsWith( "VarChar" + QString::number( i ) ) );
else if ( q.value( 1 ).toString().right( 1 ) == " " )
QCOMPARE( q.value( 1 ).toString(), ( "VarChar" + QString::number( i ) + " " ) );
else
QCOMPARE( q.value( 1 ).toString(), ( "VarChar" + QString::number( i ) ) );
- if ( db.driverName().startsWith( "QIBASE" ) )
+ if (dbType == QSqlDriverPrivate::Interbase)
QVERIFY( q.value( 2 ).toString().startsWith( "Char" + QString::number( i ) ) );
else if ( q.value( 2 ).toString().right( 1 ) != " " )
QCOMPARE( q.value( 2 ).toString(), ( "Char" + QString::number( i ) ) );
@@ -1397,24 +1396,21 @@ void tst_QSqlQuery::isNull()
}
/*! TDS specific BIT field test */
-void tst_QSqlQuery::bitField()
+void tst_QSqlQuery::tds_bitField()
{
QFETCH( QString, dbName );
QSqlDatabase db = QSqlDatabase::database( dbName );
CHECK_DATABASE( db );
-
- if ( !db.driverName().startsWith( "QTDS" ) )
- QSKIP( "TDS specific test");
-
+ const QString tableName = qTableName("qtest_bittest", __FILE__, db);
QSqlQuery q( db );
- QVERIFY_SQL(q, exec("create table " + qTableName("qtest_bittest", __FILE__, db) + " (bitty bit)"));
+ QVERIFY_SQL(q, exec("create table " + tableName + " (bitty bit)"));
- QVERIFY_SQL(q, exec("insert into " + qTableName("qtest_bittest", __FILE__, db) + " values (0)"));
+ QVERIFY_SQL(q, exec("insert into " + tableName + " values (0)"));
- QVERIFY_SQL(q, exec("insert into " + qTableName("qtest_bittest", __FILE__, db) + " values (1)"));
+ QVERIFY_SQL(q, exec("insert into " + tableName + " values (1)"));
- QVERIFY_SQL(q, exec("select bitty from " + qTableName("qtest_bittest", __FILE__, db)));
+ QVERIFY_SQL(q, exec("select bitty from " + tableName));
QVERIFY( q.next() );
@@ -1427,7 +1423,7 @@ void tst_QSqlQuery::bitField()
/*! Oracle specific NULL BLOB test */
-void tst_QSqlQuery::nullBlob()
+void tst_QSqlQuery::oci_nullBlob()
{
QFETCH( QString, dbName );
QSqlDatabase db = QSqlDatabase::database( dbName );
@@ -1457,7 +1453,7 @@ void tst_QSqlQuery::nullBlob()
}
/* Oracle specific RAW field test */
-void tst_QSqlQuery::rawField()
+void tst_QSqlQuery::oci_rawField()
{
QFETCH( QString, dbName );
QSqlDatabase db = QSqlDatabase::database( dbName );
@@ -1487,13 +1483,13 @@ void tst_QSqlQuery::precision()
QFETCH( QString, dbName );
QSqlDatabase db = QSqlDatabase::database( dbName );
CHECK_DATABASE( db );
- const QString qtest_precision(qTableName("qtest_precision", __FILE__, db));
+ const QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db);
+ if (dbType == QSqlDriverPrivate::Interbase)
+ QSKIP("DB unable to store high precision");
+ const QString qtest_precision(qTableName("qtest_precision", __FILE__, db));
static const char* precStr = "1.2345678901234567891";
- if ( db.driverName().startsWith( "QIBASE" ) )
- QSKIP( "DB unable to store high precision");
-
{
// need a new scope for SQLITE
QSqlQuery q( db );
@@ -1518,10 +1514,10 @@ void tst_QSqlQuery::precision()
i++;
// MySQL and TDS have crappy precisions by default
- if ( db.driverName().startsWith( "QMYSQL" ) ) {
+ if (dbType == QSqlDriverPrivate::MySqlServer) {
if ( i < 17 )
QWARN( "MySQL didn't return the right precision" );
- } else if ( db.driverName().startsWith( "QTDS" ) ) {
+ } else if (dbType == QSqlDriverPrivate::Sybase) {
if ( i < 18 )
QWARN( "TDS didn't return the right precision" );
} else {
@@ -1563,14 +1559,14 @@ void tst_QSqlQuery::transaction()
QFETCH( QString, dbName );
QSqlDatabase db = QSqlDatabase::database( dbName );
CHECK_DATABASE( db );
-
+ const QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db);
if ( !db.driver()->hasFeature( QSqlDriver::Transactions ) )
QSKIP( "DBMS not transaction capable");
// this is the standard SQL
QString startTransactionStr( "start transaction" );
- if ( db.driverName().startsWith( "QMYSQL" ) )
+ if (dbType == QSqlDriverPrivate::MySqlServer)
startTransactionStr = "begin work";
QSqlQuery q( db );
@@ -1608,7 +1604,7 @@ void tst_QSqlQuery::transaction()
QCOMPARE( q.value( 0 ).toInt(), 41 );
if ( !q.exec( "rollback" ) ) {
- if ( db.driverName().startsWith( "QMYSQL" ) ) {
+ if (dbType == QSqlDriverPrivate::MySqlServer) {
qDebug( "MySQL: %s", qPrintable(tst_Databases::printError( q.lastError() ) ));
QSKIP( "MySQL transaction failed "); //non-fatal
} else
@@ -1646,12 +1642,11 @@ void tst_QSqlQuery::joins()
QFETCH( QString, dbName );
QSqlDatabase db = QSqlDatabase::database( dbName );
CHECK_DATABASE( db );
+ const QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db);
const QString qtestj1(qTableName("qtestj1", __FILE__, db)), qtestj2(qTableName("qtestj2", __FILE__, db));
- if ( db.driverName().startsWith( "QOCI" )
- || db.driverName().startsWith( "QTDS" )
- || db.driverName().startsWith( "QODBC" )
- || db.driverName().startsWith( "QIBASE" ) )
+ if (dbType == QSqlDriverPrivate::Oracle || dbType == QSqlDriverPrivate::Sybase
+ || dbType == QSqlDriverPrivate::Interbase || db.driverName().startsWith("QODBC"))
// Oracle broken beyond recognition - cannot outer join on more than
// one table.
QSKIP( "DBMS cannot understand standard SQL");
@@ -1731,11 +1726,12 @@ void tst_QSqlQuery::prepare_bind_exec()
QFETCH( QString, dbName );
QSqlDatabase db = QSqlDatabase::database( dbName );
CHECK_DATABASE( db );
+ const QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db);
const QString qtest_prepare(qTableName("qtest_prepare", __FILE__, db));
- if(db.driverName().startsWith("QIBASE") && (db.databaseName() == "silence.nokia.troll.no:c:\\ibase\\testdb_ascii" || db.databaseName() == "/opt/interbase/qttest.gdb"))
+ if (dbType == QSqlDriverPrivate::Interbase && (db.databaseName() == "silence.nokia.troll.no:c:\\ibase\\testdb_ascii" || db.databaseName() == "/opt/interbase/qttest.gdb"))
QSKIP("Can't transliterate extended unicode to ascii");
- if(db.driverName().startsWith("QDB2"))
+ if (dbType == QSqlDriverPrivate::DB2)
QSKIP("Needs someone with more Unicode knowledge than I have to fix");
{
@@ -1752,13 +1748,13 @@ void tst_QSqlQuery::prepare_bind_exec()
useUnicode = false;
QString createQuery;
-
- if(tst_Databases::isPostgreSQL(db))
+ QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db);
+ if (dbType == QSqlDriverPrivate::PostgreSQL)
QVERIFY_SQL( q, exec("set client_min_messages='warning'"));
- if ( tst_Databases::isSqlServer( db ) || db.driverName().startsWith( "QTDS" ) )
+ if (dbType == QSqlDriverPrivate::MSSqlServer || dbType == QSqlDriverPrivate::Sybase)
createQuery = "create table " + qtest_prepare + " (id int primary key, name nvarchar(200) null, name2 nvarchar(200) null)";
- else if ( tst_Databases::isMySQL(db) && useUnicode )
+ else if (dbType == QSqlDriverPrivate::MySqlServer && useUnicode)
createQuery = "create table " + qtest_prepare + " (id int not null primary key, name varchar(200) character set utf8, name2 varchar(200) character set utf8)";
else
createQuery = "create table " + qtest_prepare + " (id int not null primary key, name varchar(200), name2 varchar(200))";
@@ -2026,7 +2022,8 @@ void tst_QSqlQuery::sqlServerLongStrings()
QSqlDatabase db = QSqlDatabase::database( dbName );
CHECK_DATABASE( db );
- if ( !tst_Databases::isSqlServer( db ) )
+ QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db);
+ if (dbType != QSqlDriverPrivate::MSSqlServer)
QSKIP( "SQL Server specific test");
QSqlQuery q( db );
@@ -2071,7 +2068,7 @@ void tst_QSqlQuery::invalidQuery()
QFETCH( QString, dbName );
QSqlDatabase db = QSqlDatabase::database( dbName );
CHECK_DATABASE( db );
-
+ const QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db);
QSqlQuery q( db );
QVERIFY( !q.exec() );
@@ -2081,7 +2078,7 @@ void tst_QSqlQuery::invalidQuery()
QVERIFY( !q.next() );
QVERIFY( !q.isActive() );
- if ( !db.driverName().startsWith( "QOCI" ) && !db.driverName().startsWith( "QDB2" ) && !db.driverName().startsWith( "QODBC" ) ) {
+ if (dbType != QSqlDriverPrivate::Oracle && dbType != QSqlDriverPrivate::DB2 && !db.driverName().startsWith("QODBC")) {
// oracle and db2 just prepares everything without complaining
if ( db.driver()->hasFeature( QSqlDriver::PreparedQueries ) )
QVERIFY( !q.prepare( "blahfasel" ) );
@@ -2343,17 +2340,12 @@ void tst_QSqlQuery::lastQuery()
QCOMPARE( q.executedQuery(), sql );
}
-void tst_QSqlQuery::bindWithDoubleColonCastOperator()
+void tst_QSqlQuery::psql_bindWithDoubleColonCastOperator()
{
QFETCH( QString, dbName );
QSqlDatabase db = QSqlDatabase::database( dbName );
CHECK_DATABASE( db );
- // Only PostgreSQL support the double-colon cast operator
-
- if ( !db.driverName().startsWith( "QPSQL" ) )
- QSKIP( "Test requires PostgreSQL");
-
const QString tablename(qTableName("bindtest", __FILE__, db));
QSqlQuery q( db );
@@ -2413,13 +2405,11 @@ void tst_QSqlQuery::createQueryOnClosedDatabase()
QFETCH( QString, dbName );
QSqlDatabase db = QSqlDatabase::database( dbName );
CHECK_DATABASE( db );
-
+ const QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db);
// Only supported by these drivers
- if ( !db.driverName().startsWith( "QPSQL" )
- && !db.driverName().startsWith( "QOCI" )
- && !db.driverName().startsWith( "QMYSQL" )
- && !db.driverName().startsWith( "QDB2" ) )
+ if (dbType != QSqlDriverPrivate::PostgreSQL && dbType != QSqlDriverPrivate::Oracle
+ && dbType != QSqlDriverPrivate::MySqlServer && dbType != QSqlDriverPrivate::DB2)
QSKIP( "Test is specific for PostgreSQL, Oracle, MySql and DB2");
db.close();
@@ -2505,8 +2495,6 @@ void tst_QSqlQuery::sqlite_finish()
QFETCH( QString, dbName );
QSqlDatabase db = QSqlDatabase::database( dbName );
CHECK_DATABASE( db );
- if (db.driverName() != QLatin1String("QSQLITE"))
- QSKIP("Sqlite3 specific test");
if ( db.databaseName().startsWith( ':' ) )
QSKIP( "This test requires a database on the filesystem, not in-memory");
@@ -2549,7 +2537,7 @@ void tst_QSqlQuery::nextResult()
QFETCH( QString, dbName );
QSqlDatabase db = QSqlDatabase::database( dbName );
CHECK_DATABASE( db );
-
+ const QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db);
if ( !db.driver()->hasFeature( QSqlDriver::MultipleResultSets ) || !db.driver()->hasFeature( QSqlDriver::BatchOperations ) )
QSKIP( "DBMS does not support multiple result sets or batch operations");
@@ -2558,14 +2546,6 @@ void tst_QSqlQuery::nextResult()
if ( db.driverName().startsWith( "QMYSQL" ) && tst_Databases::getMySqlVersion( db ).section( QChar('.'), 0, 0 ).toInt()<5 )
QSKIP( "Test requires MySQL >= 5.0");
- enum DriverType { ODBC, MYSQL, DB2 };
- DriverType driverType = ODBC;
-
- if ( db.driverName().startsWith( "QMYSQL" ) )
- driverType = MYSQL;
- else if ( db.driverName().startsWith( "QDB2" ) )
- driverType = DB2;
-
const QString tableName(qTableName("more_results", __FILE__, db));
QVERIFY_SQL( q, exec( "CREATE TABLE " + tableName + " (id integer, text varchar(20), num numeric(6, 3), empty varchar(10));" ) );
@@ -2597,7 +2577,7 @@ void tst_QSqlQuery::nextResult()
// Query that returns two result sets (batch sql)
// When working with multiple result sets SQL Server insists on non-scrollable cursors
- if ( driverType == ODBC )
+ if (db.driverName().startsWith("QODBC"))
q.setForwardOnly( true );
QVERIFY_SQL( q, exec( "SELECT id FROM " + tableName + "; SELECT text, num FROM " + tableName + ';' ) );
@@ -2618,7 +2598,7 @@ void tst_QSqlQuery::nextResult()
QCOMPARE( q.record().field( 1 ).name().toUpper(), QString( "NUM" ) );
- if ( driverType == MYSQL )
+ if (dbType == QSqlDriverPrivate::MySqlServer)
QCOMPARE( q.record().field( 1 ).type(), QVariant::String );
else
QCOMPARE( q.record().field( 1 ).type(), QVariant::Double );
@@ -2674,13 +2654,13 @@ void tst_QSqlQuery::nextResult()
q.exec( QString( "DROP PROCEDURE %1;" ).arg( procName ) );
- if ( driverType == MYSQL )
+ if (dbType == QSqlDriverPrivate::MySqlServer)
QVERIFY_SQL( q, exec( QString( "CREATE PROCEDURE %1()"
"\nBEGIN"
"\nSELECT id, text FROM %2;"
"\nSELECT empty, num, text, id FROM %3;"
"\nEND" ).arg( procName ).arg( tableName ).arg( tableName ) ) );
- else if ( driverType == DB2 )
+ else if (dbType == QSqlDriverPrivate::DB2)
QVERIFY_SQL( q, exec( QString( "CREATE PROCEDURE %1()"
"\nRESULT SETS 2"
"\nLANGUAGE SQL"
@@ -2696,7 +2676,7 @@ void tst_QSqlQuery::nextResult()
"\nSELECT id, text FROM %2"
"\nSELECT empty, num, text, id FROM %3" ).arg( procName ).arg( tableName ).arg( tableName ) ) );
- if ( driverType == MYSQL || driverType == DB2 ) {
+ if (dbType == QSqlDriverPrivate::MySqlServer || dbType == QSqlDriverPrivate::DB2) {
q.setForwardOnly( true );
QVERIFY_SQL( q, exec( QString( "CALL %1()" ).arg( procName ) ) );
} else {
@@ -2722,7 +2702,7 @@ void tst_QSqlQuery::nextResult()
}
// MySQL also counts the CALL itself as a result
- if ( driverType == MYSQL ) {
+ if (dbType == QSqlDriverPrivate::MySqlServer) {
QVERIFY( q.nextResult() );
QVERIFY( !q.isSelect() ); // ... but it's not a select
QCOMPARE( q.numRowsAffected(), 0 ); // ... and no rows are affected (at least not with this procedure)
@@ -2757,10 +2737,11 @@ void tst_QSqlQuery::blobsPreparedQuery()
// In PostgreSQL a BLOB is not called a BLOB, but a BYTEA! :-)
// ... and in SQL Server it can be called a lot, but IMAGE will do.
+ QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db);
QString typeName( "BLOB" );
- if ( db.driverName().startsWith( "QPSQL" ) )
+ if (dbType == QSqlDriverPrivate::PostgreSQL)
typeName = "BYTEA";
- else if ( db.driverName().startsWith( "QODBC" ) && tst_Databases::isSqlServer( db ))
+ else if (dbType == QSqlDriverPrivate::MSSqlServer)
typeName = "IMAGE";
QVERIFY_SQL( q, exec( QString( "CREATE TABLE %1(id INTEGER, data %2)" ).arg( tableName ).arg( typeName ) ) );
@@ -2994,7 +2975,8 @@ void tst_QSqlQuery::sqlServerReturn0()
QFETCH( QString, dbName );
QSqlDatabase db = QSqlDatabase::database( dbName );
CHECK_DATABASE( db );
- if (!tst_Databases::isSqlServer( db ))
+ QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db);
+ if (dbType != QSqlDriverPrivate::MSSqlServer)
QSKIP("SQL Server specific test");
const QString tableName(qTableName("test141895", __FILE__, db)), procName(qTableName("test141895_proc", __FILE__, db));
@@ -3088,9 +3070,9 @@ void tst_QSqlQuery::QTBUG_18435()
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
-
- if (!db.driverName().startsWith("QODBC") || !tst_Databases::isSqlServer(db))
- return;
+ QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db);
+ if (dbType != QSqlDriverPrivate::MSSqlServer || !db.driverName().startsWith("QODBC"))
+ QSKIP("SQL Server specific test");
QSqlQuery q(db);
QString procName(qTableName("qtbug_18435_proc", __FILE__, db));
@@ -3120,8 +3102,6 @@ void tst_QSqlQuery::QTBUG_5251()
CHECK_DATABASE( db );
const QString timetest(qTableName("timetest", __FILE__, db));
- if (!db.driverName().startsWith( "QPSQL" )) return;
-
QSqlQuery q(db);
q.exec("DROP TABLE " + timetest);
QVERIFY_SQL(q, exec("CREATE TABLE " + timetest + " (t TIME)"));
@@ -3172,7 +3152,8 @@ void tst_QSqlQuery::QTBUG_6618()
QFETCH( QString, dbName );
QSqlDatabase db = QSqlDatabase::database( dbName );
CHECK_DATABASE( db );
- if (!tst_Databases::isSqlServer( db ))
+ QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db);
+ if (dbType != QSqlDriverPrivate::MSSqlServer)
QSKIP("SQL Server specific test");
QSqlQuery q(db);
@@ -3588,7 +3569,8 @@ void tst_QSqlQuery::sqlite_constraint()
QSqlDatabase db = QSqlDatabase::database( dbName );
CHECK_DATABASE( db );
- if (db.driverName() != QLatin1String("QSQLITE"))
+ QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db);
+ if (dbType != QSqlDriverPrivate::SQLite)
QSKIP("Sqlite3 specific test");
QSqlQuery q(db);
@@ -3639,9 +3621,10 @@ void tst_QSqlQuery::aggregateFunctionTypes()
CHECK_DATABASE(db);
QVariant::Type intType = QVariant::Int;
// QPSQL uses LongLong for manipulation of integers
- if (db.driverName().startsWith("QPSQL") || db.driverName().startsWith("QMYSQL"))
+ const QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db);
+ if (dbType == QSqlDriverPrivate::MySqlServer || dbType == QSqlDriverPrivate::PostgreSQL)
intType = QVariant::LongLong;
- else if (db.driverName().startsWith("QOCI"))
+ else if (dbType == QSqlDriverPrivate::Oracle)
intType = QVariant::Double;
{
const QString tableName(qTableName("numericFunctionsWithIntValues", __FILE__, db));
@@ -3653,9 +3636,9 @@ void tst_QSqlQuery::aggregateFunctionTypes()
// First test without any entries
QVERIFY_SQL(q, exec("SELECT SUM(id) FROM " + tableName));
QVERIFY(q.next());
- if (db.driverName().startsWith("QSQLITE"))
+ if (dbType == QSqlDriverPrivate::SQLite)
QCOMPARE(q.record().field(0).type(), QVariant::Invalid);
- else if (db.driverName().startsWith("QMYSQL"))
+ else if (dbType == QSqlDriverPrivate::MySqlServer)
QCOMPARE(q.record().field(0).type(), QVariant::Double);
else
QCOMPARE(q.record().field(0).type(), intType);
@@ -3666,15 +3649,15 @@ void tst_QSqlQuery::aggregateFunctionTypes()
QVERIFY_SQL(q, exec("SELECT SUM(id) FROM " + tableName));
QVERIFY(q.next());
QCOMPARE(q.value(0).toInt(), 3);
- if (db.driverName().startsWith("QMYSQL"))
+ if (dbType == QSqlDriverPrivate::MySqlServer)
QCOMPARE(q.record().field(0).type(), QVariant::Double);
else
QCOMPARE(q.record().field(0).type(), intType);
QVERIFY_SQL(q, exec("SELECT AVG(id) FROM " + tableName));
QVERIFY(q.next());
- if (db.driverName().startsWith("QSQLITE") || db.driverName().startsWith("QPSQL")
- || db.driverName().startsWith("QMYSQL") || db.driverName().startsWith("QOCI")) {
+ if (dbType == QSqlDriverPrivate::SQLite || dbType == QSqlDriverPrivate::PostgreSQL || dbType == QSqlDriverPrivate::MySqlServer
+ || dbType == QSqlDriverPrivate::Oracle) {
QCOMPARE(q.value(0).toDouble(), 1.5);
QCOMPARE(q.record().field(0).type(), QVariant::Double);
} else {
@@ -3707,7 +3690,7 @@ void tst_QSqlQuery::aggregateFunctionTypes()
// First test without any entries
QVERIFY_SQL(q, exec("SELECT SUM(id) FROM " + tableName));
QVERIFY(q.next());
- if (db.driverName().startsWith("QSQLITE"))
+ if (dbType == QSqlDriverPrivate::SQLite)
QCOMPARE(q.record().field(0).type(), QVariant::Invalid);
else
QCOMPARE(q.record().field(0).type(), QVariant::Double);
@@ -3741,7 +3724,7 @@ void tst_QSqlQuery::aggregateFunctionTypes()
QCOMPARE(q.record().field(0).type(), QVariant::Double);
// PSQL does not have support for the round() function
- if (!db.driverName().startsWith("QPSQL")) {
+ if (dbType != QSqlDriverPrivate::PostgreSQL) {
QVERIFY_SQL(q, exec("SELECT ROUND(id, 1) FROM " + tableName + " WHERE id=1.5"));
QVERIFY(q.next());
QCOMPARE(q.value(0).toDouble(), 1.5);
@@ -3749,7 +3732,7 @@ void tst_QSqlQuery::aggregateFunctionTypes()
QVERIFY_SQL(q, exec("SELECT ROUND(id, 0) FROM " + tableName + " WHERE id=2.5"));
QVERIFY(q.next());
- if (db.driverName().startsWith("QMYSQL"))
+ if (dbType == QSqlDriverPrivate::MySqlServer)
QCOMPARE(q.value(0).toDouble(), 2.0);
else
QCOMPARE(q.value(0).toDouble(), 3.0);
@@ -3765,7 +3748,7 @@ void tst_QSqlQuery::aggregateFunctionTypes()
QVERIFY_SQL(q, exec("SELECT MAX(txt) FROM " + tableName));
QVERIFY(q.next());
- if (db.driverName().startsWith("QSQLITE"))
+ if (dbType == QSqlDriverPrivate::SQLite)
QCOMPARE(q.record().field(0).type(), QVariant::Invalid);
else
QCOMPARE(q.record().field(0).type(), QVariant::String);