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);
}
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 )
{
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.
// blobSize is only used if the db doesn't have a generic blob type
static QString blobTypeName( QSqlDatabase db, int blobSize = 10000 )
@ -476,34 +462,26 @@ public:
return QString();
}
static QByteArray printError( const QSqlError& err )
static QByteArray printError(const QSqlError &err)
{
QString result;
if (!err.nativeErrorCode().isEmpty())
result += '(' + err.nativeErrorCode() + ") ";
result += '\'';
if(!err.driverText().isEmpty())
result += u'(' + err.nativeErrorCode() + ") ";
result += u'\'';
if (!err.driverText().isEmpty())
result += err.driverText() + "' || '";
result += err.databaseText() + QLatin1Char('\'');
result += err.databaseText() + u'\'';
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) + ": ");
if (!err.nativeErrorCode().isEmpty())
result += '(' + err.nativeErrorCode() + ") ";
result += '\'';
if(!err.driverText().isEmpty())
result += err.driverText() + "' || '";
result += err.databaseText() + QLatin1Char('\'');
return result.toLocal8Bit();
return dbToString(db).toLocal8Bit() + ": " + printError(err);
}
static QSqlDriver::DbmsType getDatabaseType(QSqlDatabase db)
{
QSqlDriverPrivate *d = static_cast<QSqlDriverPrivate *>(QObjectPrivate::get(db.driver()));
return d->dbmsType;
return db.driver()->dbmsType();
}
static bool isMSAccess( QSqlDatabase db )
@ -531,26 +509,6 @@ public:
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;
int counter;

View File

@ -300,13 +300,11 @@ void tst_QSqlDatabase::createTestTables(QSqlDatabase db)
" (id integer not null, t_varchar varchar(40) not null, "
"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)
+ '('
+ db.driver()->escapeIdentifier(QLatin1String("test test"), QSqlDriver::FieldName)
+ " int not null primary key)";
QVERIFY_SQL(q, exec(qry));
}
QString qry = "create table " + qTableName("qtest test", __FILE__, db)
+ '('
+ db.driver()->escapeIdentifier(QLatin1String("test test"), QSqlDriver::FieldName)
+ " int not null primary key)";
QVERIFY_SQL(q, exec(qry));
}
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");
}
if (testWhiteSpaceNames(db.driverName())) {
tableNames << db.driver()->escapeIdentifier(qTableName("qtest test", __FILE__, db),
QSqlDriver::TableName);
}
tableNames << db.driver()->escapeIdentifier(qTableName("qtest test", __FILE__, db),
QSqlDriver::TableName);
tst_Databases::safeDropTables(db, tableNames);
if (dbType == QSqlDriver::Oracle) {
@ -562,34 +557,25 @@ void tst_QSqlDatabase::whitespaceInIdentifiers()
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(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 auto tableName(qTableName("qtest test", __FILE__, db, isCaseSensitive));
if (isCaseSensitive) {
QVERIFY(db.tables().contains(db.driver()->stripDelimiters(tableName, QSqlDriver::TableName)));
} else {
QVERIFY(db.tables().contains(tableName, Qt::CaseInsensitive));
}
const bool isCaseSensitive = driverQuotedCaseSensitive(db);
const auto tableName(qTableName("qtest test", __FILE__, db, isCaseSensitive));
if (isCaseSensitive)
QVERIFY(db.tables().contains(db.driver()->stripDelimiters(tableName, QSqlDriver::TableName)));
else
QVERIFY(db.tables().contains(tableName, Qt::CaseInsensitive));
QSqlRecord rec = db.record(tableName);
QCOMPARE(rec.count(), 1);
QCOMPARE(rec.fieldName(0), QString("test test"));
if (dbType == QSqlDriver::Oracle)
QCOMPARE(rec.field(0).metaType(), QMetaType(QMetaType::Double));
else
QCOMPARE(rec.field(0).metaType(), QMetaType(QMetaType::Int));
QSqlRecord rec = db.record(tableName);
QCOMPARE(rec.count(), 1);
QCOMPARE(rec.fieldName(0), QString("test test"));
QCOMPARE(rec.field(0).metaType(), metaTypeToCheck);
QSqlIndex idx = db.primaryIndex(tableName);
QCOMPARE(idx.count(), 1);
QCOMPARE(idx.fieldName(0), QString("test test"));
if (dbType == QSqlDriver::Oracle)
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");
}
QSqlIndex idx = db.primaryIndex(tableName);
QCOMPARE(idx.count(), 1);
QCOMPARE(idx.fieldName(0), QString("test test"));
QCOMPARE(idx.field(0).metaType(), metaTypeToCheck);
}
void tst_QSqlDatabase::alterTable()
@ -871,22 +857,6 @@ void tst_QSqlDatabase::recordMySQL()
QSqlDatabase db = QSqlDatabase::database(dbName);
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 const FieldDef fieldDefs[] = {
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('mister', 'Mr')"));
if (testWhiteSpaceNames(db.driverName())) {
const auto reltest6 = qTableName("rel test6", __FILE__, db);
QVERIFY_SQL( q, exec("create table " + reltest6 + " (id int not null primary key, " + db.driver()->escapeIdentifier("city key", QSqlDriver::FieldName) +
" int, " + db.driver()->escapeIdentifier("extra field", QSqlDriver::FieldName) + " int)"));
QVERIFY_SQL( q, exec("insert into " + reltest6 + " values(1, 1,9)"));
QVERIFY_SQL( q, exec("insert into " + reltest6 + " values(2, 2,8)"));
const auto reltest6 = qTableName("rel test6", __FILE__, db);
const auto cityKeyStr = db.driver()->escapeIdentifier("city key", QSqlDriver::FieldName);
const auto extraFieldStr = db.driver()->escapeIdentifier("extra field", QSqlDriver::FieldName);
QVERIFY_SQL( q, exec("create table " + reltest6 + " (id int not null primary key, " + cityKeyStr +
" int, " + extraFieldStr + " int)"));
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);
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))"));
QVERIFY_SQL( q, exec("insert into " + reltest7 + " values(1, 'New York')"));
QVERIFY_SQL( q, exec("insert into " + reltest7 + " values(2, 'Washington')"));
}
const auto reltest7 = qTableName("rel test7", __FILE__, db);
const auto cityIdStr = db.driver()->escapeIdentifier("city id", QSqlDriver::TableName);
const auto cityNameStr = db.driver()->escapeIdentifier("city name", QSqlDriver::FieldName);
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()
@ -1369,8 +1372,6 @@ void tst_QSqlRelationalTableModel::whiteSpaceInIdentifiers()
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
if (!testWhiteSpaceNames(db.driverName()))
QSKIP("White space test irrelevant for driver");
QSqlRelationalTableModel model(0, db);
model.setTable(qTableName("rel test6", __FILE__, db));
model.setSort(0, Qt::DescendingOrder);

View File

@ -163,9 +163,8 @@ void tst_QSqlTableModel::dropTestTables()
<< qTableName("emptytable", __FILE__, db)
<< qTableName("bigtable", __FILE__, db)
<< qTableName("foo", __FILE__, db)
<< qTableName("pktest", __FILE__, db);
if (testWhiteSpaceNames(db.driverName()))
tableNames << qTableName("qtestw hitespace", db);
<< qTableName("pktest", __FILE__, db)
<< qTableName("qtestw hitespace", db);
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)"));
if (testWhiteSpaceNames(db.driverName())) {
QString qry = "create table " + qTableName("qtestw hitespace", db) + " ("+ db.driver()->escapeIdentifier("a field", QSqlDriver::FieldName) + " int)";
QVERIFY_SQL( q, exec(qry));
}
const auto fieldStr = db.driver()->escapeIdentifier("a field", QSqlDriver::FieldName);
QVERIFY_SQL(q, exec("create table " + qTableName("qtestw hitespace", db) + " ("+ fieldStr + " int)"));
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);
CHECK_DATABASE(db);
if (!testWhiteSpaceNames(db.driverName()))
QSKIP("DBMS doesn't support whitespaces in identifiers");
QString tableName = qTableName("qtestw hitespace", db);
QSqlTableModel model(0, db);