SQL: remove unneeded test functions

testWhiteSpaceNames() returns true for all current database drivers so
it's useless and can be removed. safeDropView() and getPSQLVersion()
is not called anywhere, getMySqlVersion() is only used for a check for a
MySql version we no longer support.

Change-Id: I8d02f17f475821e81d309ee96897e772cdfb895d
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
This commit is contained in:
Christian Ehrlicher 2022-12-21 21:37:50 +01:00
parent 35f9f2bb00
commit ebd94489a3
4 changed files with 49 additions and 126 deletions

View File

@ -79,15 +79,6 @@ inline static QString qTableName(const QString& prefix, QSqlDatabase db)
qGetHostName(), QSqlDriver::TableName)),db); qGetHostName(), QSqlDriver::TableName)),db);
} }
inline static bool testWhiteSpaceNames( const QString &name )
{
/* return name.startsWith( "QPSQL" )
|| name.startsWith( "QODBC" )
|| name.startsWith( "QSQLITE" )
|| name.startsWith( "QMYSQL" );*/
return name != QLatin1String("QSQLITE2");
}
inline static QString toHex( const QString& binary ) inline static QString toHex( const QString& binary )
{ {
QString str; QString str;
@ -397,11 +388,6 @@ public:
} }
} }
static void safeDropView( QSqlDatabase db, const QString& tableName )
{
safeDropViews(db, QStringList() << tableName);
}
// returns the type name of the blob datatype for the database db. // returns the type name of the blob datatype for the database db.
// blobSize is only used if the db doesn't have a generic blob type // blobSize is only used if the db doesn't have a generic blob type
static QString blobTypeName( QSqlDatabase db, int blobSize = 10000 ) static QString blobTypeName( QSqlDatabase db, int blobSize = 10000 )
@ -476,34 +462,26 @@ public:
return QString(); return QString();
} }
static QByteArray printError( const QSqlError& err ) static QByteArray printError(const QSqlError &err)
{ {
QString result; QString result;
if (!err.nativeErrorCode().isEmpty()) if (!err.nativeErrorCode().isEmpty())
result += '(' + err.nativeErrorCode() + ") "; result += u'(' + err.nativeErrorCode() + ") ";
result += '\''; result += u'\'';
if(!err.driverText().isEmpty()) if (!err.driverText().isEmpty())
result += err.driverText() + "' || '"; result += err.driverText() + "' || '";
result += err.databaseText() + QLatin1Char('\''); result += err.databaseText() + u'\'';
return result.toLocal8Bit(); return result.toLocal8Bit();
} }
static QByteArray printError( const QSqlError& err, const QSqlDatabase& db ) static QByteArray printError(const QSqlError &err, const QSqlDatabase &db)
{ {
QString result(dbToString(db) + ": "); return dbToString(db).toLocal8Bit() + ": " + printError(err);
if (!err.nativeErrorCode().isEmpty())
result += '(' + err.nativeErrorCode() + ") ";
result += '\'';
if(!err.driverText().isEmpty())
result += err.driverText() + "' || '";
result += err.databaseText() + QLatin1Char('\'');
return result.toLocal8Bit();
} }
static QSqlDriver::DbmsType getDatabaseType(QSqlDatabase db) static QSqlDriver::DbmsType getDatabaseType(QSqlDatabase db)
{ {
QSqlDriverPrivate *d = static_cast<QSqlDriverPrivate *>(QObjectPrivate::get(db.driver())); return db.driver()->dbmsType();
return d->dbmsType;
} }
static bool isMSAccess( QSqlDatabase db ) static bool isMSAccess( QSqlDatabase db )
@ -531,26 +509,6 @@ public:
return ver; return ver;
} }
static QString getMySqlVersion( const QSqlDatabase &db )
{
QSqlQuery q(db);
q.exec( "select version()" );
if(q.next())
return q.value( 0 ).toString();
else
return QString();
}
static QString getPSQLVersion( const QSqlDatabase &db )
{
QSqlQuery q(db);
q.exec( "select version()" );
if(q.next())
return q.value( 0 ).toString();
else
return QString();
}
QStringList dbNames; QStringList dbNames;
int counter; int counter;

View File

@ -300,13 +300,11 @@ void tst_QSqlDatabase::createTestTables(QSqlDatabase db)
" (id integer not null, t_varchar varchar(40) not null, " " (id integer not null, t_varchar varchar(40) not null, "
"t_char char(40), t_numeric numeric(6, 3), primary key (id, t_varchar))")); "t_char char(40), t_numeric numeric(6, 3), primary key (id, t_varchar))"));
} }
if (testWhiteSpaceNames(db.driverName())) { QString qry = "create table " + qTableName("qtest test", __FILE__, db)
QString qry = "create table " + qTableName("qtest test", __FILE__, db) + '('
+ '(' + db.driver()->escapeIdentifier(QLatin1String("test test"), QSqlDriver::FieldName)
+ db.driver()->escapeIdentifier(QLatin1String("test test"), QSqlDriver::FieldName) + " int not null primary key)";
+ " int not null primary key)"; QVERIFY_SQL(q, exec(qry));
QVERIFY_SQL(q, exec(qry));
}
} }
void tst_QSqlDatabase::dropTestTables(QSqlDatabase db) void tst_QSqlDatabase::dropTestTables(QSqlDatabase db)
@ -353,11 +351,8 @@ void tst_QSqlDatabase::dropTestTables(QSqlDatabase db)
q.exec("drop schema " + qTableName("qtestScHeMa", __FILE__, db) + " cascade"); q.exec("drop schema " + qTableName("qtestScHeMa", __FILE__, db) + " cascade");
} }
if (testWhiteSpaceNames(db.driverName())) { tableNames << db.driver()->escapeIdentifier(qTableName("qtest test", __FILE__, db),
tableNames << db.driver()->escapeIdentifier(qTableName("qtest test", __FILE__, db), QSqlDriver::TableName);
QSqlDriver::TableName);
}
tst_Databases::safeDropTables(db, tableNames); tst_Databases::safeDropTables(db, tableNames);
if (dbType == QSqlDriver::Oracle) { if (dbType == QSqlDriver::Oracle) {
@ -562,34 +557,25 @@ void tst_QSqlDatabase::whitespaceInIdentifiers()
QSqlDatabase db = QSqlDatabase::database(dbName); QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db); CHECK_DATABASE(db);
const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db); const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
const auto metaTypeToCheck = dbType == QSqlDriver::Oracle
? QMetaType(QMetaType::Double) : QMetaType(QMetaType::Int);
if (testWhiteSpaceNames(db.driverName())) { const bool isCaseSensitive = driverQuotedCaseSensitive(db);
const bool isCaseSensitive = driverQuotedCaseSensitive(db); const auto tableName(qTableName("qtest test", __FILE__, db, isCaseSensitive));
const auto tableName(qTableName("qtest test", __FILE__, db, isCaseSensitive)); if (isCaseSensitive)
if (isCaseSensitive) { QVERIFY(db.tables().contains(db.driver()->stripDelimiters(tableName, QSqlDriver::TableName)));
QVERIFY(db.tables().contains(db.driver()->stripDelimiters(tableName, QSqlDriver::TableName))); else
} else { QVERIFY(db.tables().contains(tableName, Qt::CaseInsensitive));
QVERIFY(db.tables().contains(tableName, Qt::CaseInsensitive));
}
QSqlRecord rec = db.record(tableName); QSqlRecord rec = db.record(tableName);
QCOMPARE(rec.count(), 1); QCOMPARE(rec.count(), 1);
QCOMPARE(rec.fieldName(0), QString("test test")); QCOMPARE(rec.fieldName(0), QString("test test"));
if (dbType == QSqlDriver::Oracle) QCOMPARE(rec.field(0).metaType(), metaTypeToCheck);
QCOMPARE(rec.field(0).metaType(), QMetaType(QMetaType::Double));
else
QCOMPARE(rec.field(0).metaType(), QMetaType(QMetaType::Int));
QSqlIndex idx = db.primaryIndex(tableName); QSqlIndex idx = db.primaryIndex(tableName);
QCOMPARE(idx.count(), 1); QCOMPARE(idx.count(), 1);
QCOMPARE(idx.fieldName(0), QString("test test")); QCOMPARE(idx.fieldName(0), QString("test test"));
if (dbType == QSqlDriver::Oracle) QCOMPARE(idx.field(0).metaType(), metaTypeToCheck);
QCOMPARE(idx.field(0).metaType(), QMetaType(QMetaType::Double));
else
QCOMPARE(idx.field(0).metaType(), QMetaType(QMetaType::Int));
} else {
QSKIP("DBMS does not support whitespaces in identifiers");
}
} }
void tst_QSqlDatabase::alterTable() void tst_QSqlDatabase::alterTable()
@ -871,22 +857,6 @@ void tst_QSqlDatabase::recordMySQL()
QSqlDatabase db = QSqlDatabase::database(dbName); QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db); CHECK_DATABASE(db);
FieldDef bin10, varbin10;
int major = tst_Databases::getMySqlVersion( db ).section( QChar('.'), 0, 0 ).toInt();
int minor = tst_Databases::getMySqlVersion( db ).section( QChar('.'), 1, 1 ).toInt();
int revision = tst_Databases::getMySqlVersion( db ).section( QChar('.'), 2, 2 ).toInt();
int vernum = (major << 16) + (minor << 8) + revision;
/* The below is broken in mysql below 5.0.15
see http://dev.mysql.com/doc/refman/5.0/en/binary-varbinary.html
specifically: Before MySQL 5.0.15, the pad value is space. Values are right-padded
with space on insert, and trailing spaces are removed on select.
*/
if( vernum >= ((5 << 16) + 15) ) {
bin10 = FieldDef("binary(10)", QMetaType::QByteArray, QString("123abc "));
varbin10 = FieldDef("varbinary(10)", QMetaType::QByteArray, QString("123abcv "));
}
static QDateTime dt(QDate::currentDate(), QTime(1, 2, 3, 0)); static QDateTime dt(QDate::currentDate(), QTime(1, 2, 3, 0));
static const FieldDef fieldDefs[] = { static const FieldDef fieldDefs[] = {
FieldDef("tinyint", QMetaType::Char, 127), FieldDef("tinyint", QMetaType::Char, 127),

View File

@ -114,18 +114,21 @@ void tst_QSqlRelationalTableModel::recreateTestTables(QSqlDatabase db)
QVERIFY_SQL( q, exec("insert into " + reltest5 + " values('herr', 'Hr')")); QVERIFY_SQL( q, exec("insert into " + reltest5 + " values('herr', 'Hr')"));
QVERIFY_SQL( q, exec("insert into " + reltest5 + " values('mister', 'Mr')")); QVERIFY_SQL( q, exec("insert into " + reltest5 + " values('mister', 'Mr')"));
if (testWhiteSpaceNames(db.driverName())) { const auto reltest6 = qTableName("rel test6", __FILE__, db);
const auto reltest6 = qTableName("rel test6", __FILE__, db); const auto cityKeyStr = db.driver()->escapeIdentifier("city key", QSqlDriver::FieldName);
QVERIFY_SQL( q, exec("create table " + reltest6 + " (id int not null primary key, " + db.driver()->escapeIdentifier("city key", QSqlDriver::FieldName) + const auto extraFieldStr = db.driver()->escapeIdentifier("extra field", QSqlDriver::FieldName);
" int, " + db.driver()->escapeIdentifier("extra field", QSqlDriver::FieldName) + " int)")); QVERIFY_SQL( q, exec("create table " + reltest6 + " (id int not null primary key, " + cityKeyStr +
QVERIFY_SQL( q, exec("insert into " + reltest6 + " values(1, 1,9)")); " int, " + extraFieldStr + " int)"));
QVERIFY_SQL( q, exec("insert into " + reltest6 + " values(2, 2,8)")); QVERIFY_SQL( q, exec("insert into " + reltest6 + " values(1, 1,9)"));
QVERIFY_SQL( q, exec("insert into " + reltest6 + " values(2, 2,8)"));
const auto reltest7 = qTableName("rel test7", __FILE__, db); const auto reltest7 = qTableName("rel test7", __FILE__, db);
QVERIFY_SQL( q, exec("create table " + reltest7 + " (" + db.driver()->escapeIdentifier("city id", QSqlDriver::TableName) + " int not null primary key, " + db.driver()->escapeIdentifier("city name", QSqlDriver::FieldName) + " varchar(20))")); const auto cityIdStr = db.driver()->escapeIdentifier("city id", QSqlDriver::TableName);
QVERIFY_SQL( q, exec("insert into " + reltest7 + " values(1, 'New York')")); const auto cityNameStr = db.driver()->escapeIdentifier("city name", QSqlDriver::FieldName);
QVERIFY_SQL( q, exec("insert into " + reltest7 + " values(2, 'Washington')")); QVERIFY_SQL( q, exec("create table " + reltest7 + " (" + cityIdStr + " int not null primary key, " +
} cityNameStr + " varchar(20))"));
QVERIFY_SQL( q, exec("insert into " + reltest7 + " values(1, 'New York')"));
QVERIFY_SQL( q, exec("insert into " + reltest7 + " values(2, 'Washington')"));
} }
void tst_QSqlRelationalTableModel::initTestCase() void tst_QSqlRelationalTableModel::initTestCase()
@ -1369,8 +1372,6 @@ void tst_QSqlRelationalTableModel::whiteSpaceInIdentifiers()
QSqlDatabase db = QSqlDatabase::database(dbName); QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db); CHECK_DATABASE(db);
if (!testWhiteSpaceNames(db.driverName()))
QSKIP("White space test irrelevant for driver");
QSqlRelationalTableModel model(0, db); QSqlRelationalTableModel model(0, db);
model.setTable(qTableName("rel test6", __FILE__, db)); model.setTable(qTableName("rel test6", __FILE__, db));
model.setSort(0, Qt::DescendingOrder); model.setSort(0, Qt::DescendingOrder);

View File

@ -163,9 +163,8 @@ void tst_QSqlTableModel::dropTestTables()
<< qTableName("emptytable", __FILE__, db) << qTableName("emptytable", __FILE__, db)
<< qTableName("bigtable", __FILE__, db) << qTableName("bigtable", __FILE__, db)
<< qTableName("foo", __FILE__, db) << qTableName("foo", __FILE__, db)
<< qTableName("pktest", __FILE__, db); << qTableName("pktest", __FILE__, db)
if (testWhiteSpaceNames(db.driverName())) << qTableName("qtestw hitespace", db);
tableNames << qTableName("qtestw hitespace", db);
tst_Databases::safeDropTables(db, tableNames); tst_Databases::safeDropTables(db, tableNames);
@ -196,10 +195,8 @@ void tst_QSqlTableModel::createTestTables()
QVERIFY_SQL(q, exec("create table " + qTableName("emptytable", __FILE__, db) + "(id int)")); QVERIFY_SQL(q, exec("create table " + qTableName("emptytable", __FILE__, db) + "(id int)"));
if (testWhiteSpaceNames(db.driverName())) { const auto fieldStr = db.driver()->escapeIdentifier("a field", QSqlDriver::FieldName);
QString qry = "create table " + qTableName("qtestw hitespace", db) + " ("+ db.driver()->escapeIdentifier("a field", QSqlDriver::FieldName) + " int)"; QVERIFY_SQL(q, exec("create table " + qTableName("qtestw hitespace", db) + " ("+ fieldStr + " int)"));
QVERIFY_SQL( q, exec(qry));
}
QVERIFY_SQL(q, exec("create table " + qTableName("pktest", __FILE__, db) + "(id int not null primary key, a varchar(20))")); QVERIFY_SQL(q, exec("create table " + qTableName("pktest", __FILE__, db) + "(id int not null primary key, a varchar(20))"));
} }
@ -1700,9 +1697,6 @@ void tst_QSqlTableModel::whitespaceInIdentifiers()
QSqlDatabase db = QSqlDatabase::database(dbName); QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db); CHECK_DATABASE(db);
if (!testWhiteSpaceNames(db.driverName()))
QSKIP("DBMS doesn't support whitespaces in identifiers");
QString tableName = qTableName("qtestw hitespace", db); QString tableName = qTableName("qtestw hitespace", db);
QSqlTableModel model(0, db); QSqlTableModel model(0, db);