SQL/QSqlRecord: rework QRecord::indexOf(QStringView)
Move it to the private implementation to be later used as a template when switching to QAnyStringView. Change-Id: If9977711757677546cfc058602ada9f54b978509 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
This commit is contained in:
parent
5a7c2cbabb
commit
102670a82e
@ -19,6 +19,32 @@ public:
|
|||||||
return index >= 0 && index < fields.size();
|
return index >= 0 && index < fields.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qsizetype indexOfImpl(QStringView name)
|
||||||
|
{
|
||||||
|
QStringView tableName;
|
||||||
|
QStringView fieldName;
|
||||||
|
const auto it = std::find(name.begin(), name.end(), u'.');
|
||||||
|
const auto idx = (it == name.end()) ? -1 : it - name.begin();
|
||||||
|
if (idx != -1) {
|
||||||
|
tableName = name.left(idx);
|
||||||
|
fieldName = name.mid(idx + 1);
|
||||||
|
}
|
||||||
|
const auto cnt = fields.size();
|
||||||
|
for (qsizetype i = 0; i < cnt; ++i) {
|
||||||
|
// Check the passed in name first in case it is an alias using a dot.
|
||||||
|
// Then check if both the table and field match when there is a table name specified.
|
||||||
|
const auto ¤tField = fields.at(i);
|
||||||
|
const auto ¤tFieldName = currentField.name();
|
||||||
|
if (name.compare(currentFieldName, Qt::CaseInsensitive) == 0)
|
||||||
|
return i;
|
||||||
|
if (idx != -1 &&
|
||||||
|
tableName.compare(currentField.tableName(), Qt::CaseInsensitive) == 0 &&
|
||||||
|
fieldName.compare(currentFieldName, Qt::CaseInsensitive) == 0)
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
QList<QSqlField> fields;
|
QList<QSqlField> fields;
|
||||||
};
|
};
|
||||||
QT_DEFINE_QESDP_SPECIALIZATION_DTOR(QSqlRecordPrivate)
|
QT_DEFINE_QESDP_SPECIALIZATION_DTOR(QSqlRecordPrivate)
|
||||||
@ -211,26 +237,7 @@ int QSqlRecord::indexOf(const QString &name) const
|
|||||||
*/
|
*/
|
||||||
int QSqlRecord::indexOf(QStringView name) const
|
int QSqlRecord::indexOf(QStringView name) const
|
||||||
{
|
{
|
||||||
QStringView tableName;
|
return d->indexOfImpl(name);
|
||||||
QStringView fieldName(name);
|
|
||||||
const qsizetype idx = name.indexOf(u'.');
|
|
||||||
if (idx != -1) {
|
|
||||||
tableName = fieldName.left(idx);
|
|
||||||
fieldName = fieldName.mid(idx + 1);
|
|
||||||
}
|
|
||||||
const int cnt = count();
|
|
||||||
for (int i = 0; i < cnt; ++i) {
|
|
||||||
// Check the passed in name first in case it is an alias using a dot.
|
|
||||||
// Then check if both the table and field match when there is a table name specified.
|
|
||||||
const auto ¤tField = d->fields.at(i);
|
|
||||||
const auto ¤tFieldName = currentField.name();
|
|
||||||
if (currentFieldName.compare(name, Qt::CaseInsensitive) == 0
|
|
||||||
|| (idx != -1 && currentFieldName.compare(fieldName, Qt::CaseInsensitive) == 0
|
|
||||||
&& currentField.tableName().compare(tableName, Qt::CaseInsensitive) == 0)) {
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
Loading…
x
Reference in New Issue
Block a user