From 06039b523d2969e6683f9daf7d89dae727e7eaf4 Mon Sep 17 00:00:00 2001 From: Christian Ehrlicher Date: Sun, 21 Jan 2024 17:19:08 +0100 Subject: 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 --- src/plugins/sqldrivers/odbc/qsql_odbc.cpp | 60 +++++++++++-------------------- 1 file changed, 20 insertions(+), 40 deletions(-) (limited to 'src/plugins/sqldrivers') 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 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); -- cgit v1.2.3