diff options
-rw-r--r-- | src/plugins/sqldrivers/oci/qsql_oci.cpp | 7 | ||||
-rw-r--r-- | src/plugins/sqldrivers/oci/qsql_oci_p.h | 1 | ||||
-rw-r--r-- | tests/auto/sql/kernel/qsqldatabase/tst_databases.h | 13 |
3 files changed, 13 insertions, 8 deletions
diff --git a/src/plugins/sqldrivers/oci/qsql_oci.cpp b/src/plugins/sqldrivers/oci/qsql_oci.cpp index ffad5e88cd..b670efc15b 100644 --- a/src/plugins/sqldrivers/oci/qsql_oci.cpp +++ b/src/plugins/sqldrivers/oci/qsql_oci.cpp @@ -2759,4 +2759,11 @@ QString QOCIDriver::escapeIdentifier(const QString &identifier, IdentifierType t return res; } +int QOCIDriver::maximumIdentifierLength(IdentifierType type) const +{ + Q_D(const QOCIDriver); + Q_UNUSED(type); + return d->serverVersion > 12 ? 128 : 30; +} + QT_END_NAMESPACE diff --git a/src/plugins/sqldrivers/oci/qsql_oci_p.h b/src/plugins/sqldrivers/oci/qsql_oci_p.h index b2aca6d563..91fef9de7b 100644 --- a/src/plugins/sqldrivers/oci/qsql_oci_p.h +++ b/src/plugins/sqldrivers/oci/qsql_oci_p.h @@ -58,6 +58,7 @@ public: bool trimStrings) const override; QVariant handle() const override; QString escapeIdentifier(const QString &identifier, IdentifierType) const override; + int maximumIdentifierLength(IdentifierType type) const override; protected: bool beginTransaction() override; diff --git a/tests/auto/sql/kernel/qsqldatabase/tst_databases.h b/tests/auto/sql/kernel/qsqldatabase/tst_databases.h index 0694186942..02aa0e6ba2 100644 --- a/tests/auto/sql/kernel/qsqldatabase/tst_databases.h +++ b/tests/auto/sql/kernel/qsqldatabase/tst_databases.h @@ -45,16 +45,13 @@ static QString qGetHostName() return hostname; } -inline QString fixupTableName(const QString &tableName, QSqlDatabase db) +inline QString fixupTableName(const QString &tableName, const QSqlDatabase &db) { QString tbName = tableName; - // On Oracle we are limited to 30 character tablenames - QSqlDriverPrivate *d = static_cast<QSqlDriverPrivate *>(QObjectPrivate::get(db.driver())); - if (d && d->dbmsType == QSqlDriver::Oracle) - tbName.truncate(30); - // On Interbase we are limited to 31 character tablenames - if (d && d->dbmsType == QSqlDriver::Interbase) - tbName.truncate(31); + // Oracle & Interbase/Firebird have a limit on the tablename length + QSqlDriver *drv = db.driver(); + if (drv) + tbName.truncate(drv->maximumIdentifierLength(QSqlDriver::TableName)); return tbName; } |