QString QSqlResultPrivate::positionalToNamedBinding(const QString &query) const { int n = query.size(); QString result; result.reserve(n * 5 / 4); QChar closingQuote; int count = 0; bool ignoreBraces = (sqldriver->d_func()->dbmsType == QSqlDriver::PostgreSQL); for (int i = 0; i < n; ++i) { QChar ch = query.at(i); if (!closingQuote.isNull()) { if (ch == closingQuote) { if (closingQuote == QLatin1Char(']') && i + 1 < n && query.at(i + 1) == closingQuote) { // consume the extra character. don't close. ++i; result += ch; } else { closingQuote = QChar(); } } result += ch; } else { if (ch == QLatin1Char('?')) { result += fieldSerial(count++); } else { if (ch == QLatin1Char('\'') || ch == QLatin1Char('"') || ch == QLatin1Char('`')) closingQuote = ch; else if (!ignoreBraces && ch == QLatin1Char('[')) closingQuote = QLatin1Char(']'); result += ch; } } } result.squeeze(); return result; }
QT_BEGIN_NAMESPACE QString QSqlResultPrivate::holderAt(int index) const { return holders.size() > index ? holders.at(index).holderName : fieldSerial(index); }