summaryrefslogtreecommitdiffstats
path: root/src/plugins/sqldrivers/odbc
diff options
context:
space:
mode:
authorChristian Ehrlicher <ch.ehrlicher@gmx.de>2024-01-21 17:19:08 +0100
committerChristian Ehrlicher <ch.ehrlicher@gmx.de>2024-02-09 23:16:38 +0100
commit06039b523d2969e6683f9daf7d89dae727e7eaf4 (patch)
treecb85f2528cc4a9f7d504995f6dfb2ae32faddf0d /src/plugins/sqldrivers/odbc
parent686f953bdb05f3e68de8c847fb4054e6cd91cde8 (diff)
SQL/ODBC: avoid code duplication
... by moving the adjustment for the table/schema/catalog name into splitTableQualifier(). Pick-to: 6.7 Change-Id: Ia392b1c2e7f29e63ea88c21492f2116eac573b5e Reviewed-by: Andy Shaw <andy.shaw@qt.io>
Diffstat (limited to 'src/plugins/sqldrivers/odbc')
-rw-r--r--src/plugins/sqldrivers/odbc/qsql_odbc.cpp60
1 files changed, 20 insertions, 40 deletions
diff --git a/src/plugins/sqldrivers/odbc/qsql_odbc.cpp b/src/plugins/sqldrivers/odbc/qsql_odbc.cpp
index 06a503d351..692234f7f0 100644
--- a/src/plugins/sqldrivers/odbc/qsql_odbc.cpp
+++ b/src/plugins/sqldrivers/odbc/qsql_odbc.cpp
@@ -787,23 +787,32 @@ bool QODBCDriverPrivate::setConnectionOptions(const QString& connOpts)
void QODBCDriverPrivate::splitTableQualifier(const QString &qualifier, QString &catalog,
QString &schema, QString &table) const
{
+ Q_Q(const QODBCDriver);
+ const auto adjustName = [&](const QString &name) {
+ if (q->isIdentifierEscaped(name, QSqlDriver::TableName))
+ return q->stripDelimiters(name, QSqlDriver::TableName);
+ return adjustCase(name);
+ };
+ catalog.clear();
+ schema.clear();
+ table.clear();
if (!useSchema) {
- table = qualifier;
+ table = adjustName(qualifier);
return;
}
const QList<QStringView> l = QStringView(qualifier).split(u'.');
switch (l.count()) {
case 1:
- table = qualifier;
+ table = adjustName(qualifier);
break;
case 2:
- schema = l.at(0).toString();
- table = l.at(1).toString();
+ schema = adjustName(l.at(0).toString());
+ table = adjustName(l.at(1).toString());
break;
case 3:
- catalog = l.at(0).toString();
- schema = l.at(1).toString();
- table = l.at(2).toString();
+ catalog = adjustName(l.at(0).toString());
+ schema = adjustName(l.at(1).toString());
+ table = adjustName(l.at(2).toString());
break;
default:
qSqlWarning(QString::fromLatin1("QODBCDriver::splitTableQualifier: Unable to split table qualifier '%1'")
@@ -2382,21 +2391,6 @@ QSqlIndex QODBCDriver::primaryIndex(const QString& tablename) const
QString catalog, schema, table;
d->splitTableQualifier(tablename, catalog, schema, table);
- if (isIdentifierEscaped(catalog, QSqlDriver::TableName))
- catalog = stripDelimiters(catalog, QSqlDriver::TableName);
- else
- catalog = d->adjustCase(catalog);
-
- if (isIdentifierEscaped(schema, QSqlDriver::TableName))
- schema = stripDelimiters(schema, QSqlDriver::TableName);
- else
- schema = d->adjustCase(schema);
-
- if (isIdentifierEscaped(table, QSqlDriver::TableName))
- table = stripDelimiters(table, QSqlDriver::TableName);
- else
- table = d->adjustCase(table);
-
r = SQLSetStmtAttr(hStmt,
SQL_ATTR_CURSOR_TYPE,
(SQLPOINTER)SQL_CURSOR_FORWARD_ONLY,
@@ -2476,24 +2470,6 @@ QSqlRecord QODBCDriver::record(const QString& tablename) const
return fil;
SQLHANDLE hStmt;
- QString catalog, schema, table;
- d->splitTableQualifier(tablename, catalog, schema, table);
-
- if (isIdentifierEscaped(catalog, QSqlDriver::TableName))
- catalog = stripDelimiters(catalog, QSqlDriver::TableName);
- else
- catalog = d->adjustCase(catalog);
-
- if (isIdentifierEscaped(schema, QSqlDriver::TableName))
- schema = stripDelimiters(schema, QSqlDriver::TableName);
- else
- schema = d->adjustCase(schema);
-
- if (isIdentifierEscaped(table, QSqlDriver::TableName))
- table = stripDelimiters(table, QSqlDriver::TableName);
- else
- table = d->adjustCase(table);
-
SQLRETURN r = SQLAllocHandle(SQL_HANDLE_STMT,
d->hDbc,
&hStmt);
@@ -2505,6 +2481,10 @@ QSqlRecord QODBCDriver::record(const QString& tablename) const
SQL_ATTR_CURSOR_TYPE,
(SQLPOINTER)SQL_CURSOR_FORWARD_ONLY,
SQL_IS_UINTEGER);
+
+ QString catalog, schema, table;
+ d->splitTableQualifier(tablename, catalog, schema, table);
+
{
auto c = toSQLTCHAR(catalog);
auto s = toSQLTCHAR(schema);