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>
This commit is contained in:
parent
686f953bdb
commit
06039b523d
@ -787,23 +787,32 @@ bool QODBCDriverPrivate::setConnectionOptions(const QString& connOpts)
|
|||||||
void QODBCDriverPrivate::splitTableQualifier(const QString &qualifier, QString &catalog,
|
void QODBCDriverPrivate::splitTableQualifier(const QString &qualifier, QString &catalog,
|
||||||
QString &schema, QString &table) const
|
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) {
|
if (!useSchema) {
|
||||||
table = qualifier;
|
table = adjustName(qualifier);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const QList<QStringView> l = QStringView(qualifier).split(u'.');
|
const QList<QStringView> l = QStringView(qualifier).split(u'.');
|
||||||
switch (l.count()) {
|
switch (l.count()) {
|
||||||
case 1:
|
case 1:
|
||||||
table = qualifier;
|
table = adjustName(qualifier);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
schema = l.at(0).toString();
|
schema = adjustName(l.at(0).toString());
|
||||||
table = l.at(1).toString();
|
table = adjustName(l.at(1).toString());
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
catalog = l.at(0).toString();
|
catalog = adjustName(l.at(0).toString());
|
||||||
schema = l.at(1).toString();
|
schema = adjustName(l.at(1).toString());
|
||||||
table = l.at(2).toString();
|
table = adjustName(l.at(2).toString());
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
qSqlWarning(QString::fromLatin1("QODBCDriver::splitTableQualifier: Unable to split table qualifier '%1'")
|
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;
|
QString catalog, schema, table;
|
||||||
d->splitTableQualifier(tablename, 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,
|
r = SQLSetStmtAttr(hStmt,
|
||||||
SQL_ATTR_CURSOR_TYPE,
|
SQL_ATTR_CURSOR_TYPE,
|
||||||
(SQLPOINTER)SQL_CURSOR_FORWARD_ONLY,
|
(SQLPOINTER)SQL_CURSOR_FORWARD_ONLY,
|
||||||
@ -2476,24 +2470,6 @@ QSqlRecord QODBCDriver::record(const QString& tablename) const
|
|||||||
return fil;
|
return fil;
|
||||||
|
|
||||||
SQLHANDLE hStmt;
|
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,
|
SQLRETURN r = SQLAllocHandle(SQL_HANDLE_STMT,
|
||||||
d->hDbc,
|
d->hDbc,
|
||||||
&hStmt);
|
&hStmt);
|
||||||
@ -2505,6 +2481,10 @@ QSqlRecord QODBCDriver::record(const QString& tablename) const
|
|||||||
SQL_ATTR_CURSOR_TYPE,
|
SQL_ATTR_CURSOR_TYPE,
|
||||||
(SQLPOINTER)SQL_CURSOR_FORWARD_ONLY,
|
(SQLPOINTER)SQL_CURSOR_FORWARD_ONLY,
|
||||||
SQL_IS_UINTEGER);
|
SQL_IS_UINTEGER);
|
||||||
|
|
||||||
|
QString catalog, schema, table;
|
||||||
|
d->splitTableQualifier(tablename, catalog, schema, table);
|
||||||
|
|
||||||
{
|
{
|
||||||
auto c = toSQLTCHAR(catalog);
|
auto c = toSQLTCHAR(catalog);
|
||||||
auto s = toSQLTCHAR(schema);
|
auto s = toSQLTCHAR(schema);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user