Ignore:
Timestamp:
Feb 11, 2010, 11:19:06 PM (15 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.6.1 sources.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/sql/models/qsqlrelationaltablemodel.cpp

    r2 r561  
    22**
    33** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
    4 ** Contact: Qt Software Information ([email protected])
     4** All rights reserved.
     5** Contact: Nokia Corporation ([email protected])
    56**
    67** This file is part of the QtSql module of the Qt Toolkit.
     
    2122** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
    2223**
    23 ** In addition, as a special exception, Nokia gives you certain
    24 ** additional rights. These rights are described in the Nokia Qt LGPL
    25 ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
    26 ** package.
     24** In addition, as a special exception, Nokia gives you certain additional
     25** rights.  These rights are described in the Nokia Qt LGPL Exception
     26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
    2727**
    2828** GNU General Public License Usage
     
    3434** met: http://www.gnu.org/copyleft/gpl.html.
    3535**
    36 ** If you are unsure which license is appropriate for your use, please
    37 ** contact the sales department at qt-sales@nokia.com.
     36** If you
     37** @nokia.com.
    3838** $QT_END_LICENSE$
    3939**
     
    183183
    184184    QSqlRecord record;
     185
     186
    185187    for (int i=0; i < model->rowCount(); ++i) {
    186188        record = model->record(i);
    187         dictionary[record.field(rel.indexColumn()).value().toString()] =
    188             record.field(rel.displayColumn()).value();
     189
     190        indexColumn = rel.indexColumn();
     191        if (m_parent->database().driver()->isIdentifierEscaped(indexColumn, QSqlDriver::FieldName))
     192            indexColumn = m_parent->database().driver()->stripDelimiters(indexColumn, QSqlDriver::FieldName);
     193
     194        displayColumn = rel.displayColumn();
     195        if (m_parent->database().driver()->isIdentifierEscaped(displayColumn, QSqlDriver::FieldName))
     196            displayColumn = m_parent->database().driver()->stripDelimiters(displayColumn, QSqlDriver::FieldName);
     197
     198        dictionary[record.field(indexColumn).value().toString()] =
     199            record.field(displayColumn).value();
    189200    }
    190201    m_dictInitialized = true;
     
    216227        : QSqlTableModelPrivate()
    217228    {}
    218     QString escapedRelationField(const QString &tableName, const QString &fieldName) const;
     229    QString elationField(const QString &tableName, const QString &fieldName) const;
    219230
    220231    int nameToIndex(const QString &name) const;
     
    256267int QSqlRelationalTableModelPrivate::nameToIndex(const QString &name) const
    257268{
    258     return baseRec.indexOf(name);
     269    QString fieldname = name;
     270    if (db.driver()->isIdentifierEscaped(fieldname, QSqlDriver::FieldName))
     271        fieldname = db.driver()->stripDelimiters(fieldname, QSqlDriver::FieldName);
     272    return baseRec.indexOf(fieldname);
    259273}
    260274
     
    482496}
    483497
    484 QString QSqlRelationalTableModelPrivate::escapedRelationField(const QString &tableName,
     498QString QSqlRelationalTableModelPrivate::elationField(const QString &tableName,
    485499                        const QString &fieldName) const
    486500{
    487     QString esc;
    488     esc.reserve(tableName.size() + fieldName.size() + 1);
    489     esc.append(tableName).append(QLatin1Char('.')).append(fieldName);
    490 
    491     return db.driver()->escapeIdentifier(esc, QSqlDriver::FieldName);
     501    QString ;
     502    .reserve(tableName.size() + fieldName.size() + 1);
     503    .append(tableName).append(QLatin1Char('.')).append(fieldName);
     504
     505    return ;
    492506}
    493507
     
    515529    // Count how many times each field name occurs in the record
    516530    QHash<QString, int> fieldNames;
     531
    517532    for (int i = 0; i < rec.count(); ++i) {
    518533        QSqlRelation relation = d->relations.value(i, nullRelation).rel;
    519534        QString name;
    520535        if (relation.isValid())
     536
    521537            // Count the display column name, not the original foreign key
    522538            name = relation.displayColumn();
     539
     540
     541
     542
     543
     544
     545
     546
     547
     548
     549
    523550        else
    524551            name = rec.fieldName(i);
    525552        fieldNames.insert(name, fieldNames.value(name, 0) + 1);
     553
    526554    }
    527555
     
    532560            if (!fList.isEmpty())
    533561                fList.append(QLatin1String(", "));
    534             fList.append(d->escapedRelationField(relTableAlias, relation.displayColumn()));
     562            fList.append(d->relation.displayColumn()));
    535563
    536564            // If there are duplicate field names they must be aliased
    537             if (fieldNames.value(relation.displayColumn()) > 1) {
    538                 fList.append(QString::fromLatin1(" AS %1_%2").arg(relation.tableName()).arg(relation.displayColumn()));
     565            if (fieldNames.value(fieldList[i]) > 1) {
     566                QString relTableName = relation.tableName().section(QChar::fromLatin1('.'), -1, -1);
     567                if (d->db.driver()->isIdentifierEscaped(relTableName, QSqlDriver::TableName))
     568                    relTableName = d->db.driver()->stripDelimiters(relTableName, QSqlDriver::TableName);
     569                QString displayColumn = relation.displayColumn();
     570                if (d->db.driver()->isIdentifierEscaped(displayColumn, QSqlDriver::FieldName))
     571                    displayColumn = d->db.driver()->stripDelimiters(displayColumn, QSqlDriver::FieldName);
     572                fList.append(QString::fromLatin1(" AS %1_%2_%3").arg(relTableName).arg(displayColumn).arg(fieldNames.value(fieldList[i])));
     573                fieldNames.insert(fieldList[i], fieldNames.value(fieldList[i])-1);
    539574            }
    540575
    541576            // this needs fixing!! the below if is borken.
    542             if (!tables.contains(relation.tableName()))
    543                 tables.append(d->db.driver()->escapeIdentifier(relation.tableName(),QSqlDriver::TableName)
    544                         .append(QLatin1String(" "))
    545                         .append(d->db.driver()->escapeIdentifier(relTableAlias, QSqlDriver::TableName)));
     577            tables.append(relation.tableName().append(QLatin1Char(' ')).append(relTableAlias));
    546578            if(!where.isEmpty())
    547579                where.append(QLatin1String(" AND "));
    548             where.append(d->escapedRelationField(tableName(), rec.fieldName(i)));
     580            where.append(d->)));
    549581            where.append(QLatin1String(" = "));
    550             where.append(d->escapedRelationField(relTableAlias, relation.indexColumn()));
     582            where.append(d->elationField(relTableAlias, relation.indexColumn()));
    551583        } else {
    552584            if (!fList.isEmpty())
    553585                fList.append(QLatin1String(", "));
    554             fList.append(d->escapedRelationField(tableName(), rec.fieldName(i)));
     586            fList.append(d->)));
    555587        }
    556588    }
     
    561593    if(!tList.isEmpty())
    562594        tList.prepend(QLatin1String(", "));
    563     tList.prepend(d->db.driver()->escapeIdentifier(tableName(),QSqlDriver::TableName));
     595    tList.prepend());
    564596    query.append(QLatin1String("SELECT "));
    565597    query.append(fList).append(QLatin1String(" FROM ")).append(tList);
     
    691723
    692724    QString s = QLatin1String("ORDER BY ");
    693     s.append(d->escapedRelationField(QLatin1String("relTblAl_") + QString::number(d->sortColumn),
     725    s.append(d->elationField(QLatin1String("relTblAl_") + QString::number(d->sortColumn),
    694726                    rel.displayColumn()));
    695727    s += d->sortOrder == Qt::AscendingOrder ? QLatin1String(" ASC") : QLatin1String(" DESC");
Note: See TracChangeset for help on using the changeset viewer.