Changeset 561 for trunk/src/sql/models/qsqlrelationaltablemodel.cpp
- Timestamp:
- Feb 11, 2010, 11:19:06 PM (15 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
-
Property svn:mergeinfo
set to (toggle deleted branches)
/branches/vendor/nokia/qt/4.6.1 merged eligible /branches/vendor/nokia/qt/current merged eligible /branches/vendor/trolltech/qt/current 3-149
-
Property svn:mergeinfo
set to (toggle deleted branches)
-
trunk/src/sql/models/qsqlrelationaltablemodel.cpp
r2 r561 2 2 ** 3 3 ** 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]) 5 6 ** 6 7 ** This file is part of the QtSql module of the Qt Toolkit. … … 21 22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. 22 23 ** 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. 27 27 ** 28 28 ** GNU General Public License Usage … … 34 34 ** met: http://www.gnu.org/copyleft/gpl.html. 35 35 ** 36 ** If you are unsure which license is appropriate for your use, please37 ** contact the sales department at qt-sales@nokia.com.36 ** If you 37 ** @nokia.com. 38 38 ** $QT_END_LICENSE$ 39 39 ** … … 183 183 184 184 QSqlRecord record; 185 186 185 187 for (int i=0; i < model->rowCount(); ++i) { 186 188 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(); 189 200 } 190 201 m_dictInitialized = true; … … 216 227 : QSqlTableModelPrivate() 217 228 {} 218 QString escapedRelationField(const QString &tableName, const QString &fieldName) const;229 QString elationField(const QString &tableName, const QString &fieldName) const; 219 230 220 231 int nameToIndex(const QString &name) const; … … 256 267 int QSqlRelationalTableModelPrivate::nameToIndex(const QString &name) const 257 268 { 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); 259 273 } 260 274 … … 482 496 } 483 497 484 QString QSqlRelationalTableModelPrivate:: escapedRelationField(const QString &tableName,498 QString QSqlRelationalTableModelPrivate::elationField(const QString &tableName, 485 499 const QString &fieldName) const 486 500 { 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 ; 492 506 } 493 507 … … 515 529 // Count how many times each field name occurs in the record 516 530 QHash<QString, int> fieldNames; 531 517 532 for (int i = 0; i < rec.count(); ++i) { 518 533 QSqlRelation relation = d->relations.value(i, nullRelation).rel; 519 534 QString name; 520 535 if (relation.isValid()) 536 521 537 // Count the display column name, not the original foreign key 522 538 name = relation.displayColumn(); 539 540 541 542 543 544 545 546 547 548 549 523 550 else 524 551 name = rec.fieldName(i); 525 552 fieldNames.insert(name, fieldNames.value(name, 0) + 1); 553 526 554 } 527 555 … … 532 560 if (!fList.isEmpty()) 533 561 fList.append(QLatin1String(", ")); 534 fList.append(d-> escapedRelationField(relTableAlias,relation.displayColumn()));562 fList.append(d->relation.displayColumn())); 535 563 536 564 // 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); 539 574 } 540 575 541 576 // 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)); 546 578 if(!where.isEmpty()) 547 579 where.append(QLatin1String(" AND ")); 548 where.append(d-> escapedRelationField(tableName(), rec.fieldName(i)));580 where.append(d->))); 549 581 where.append(QLatin1String(" = ")); 550 where.append(d-> escapedRelationField(relTableAlias, relation.indexColumn()));582 where.append(d->elationField(relTableAlias, relation.indexColumn())); 551 583 } else { 552 584 if (!fList.isEmpty()) 553 585 fList.append(QLatin1String(", ")); 554 fList.append(d-> escapedRelationField(tableName(), rec.fieldName(i)));586 fList.append(d->))); 555 587 } 556 588 } … … 561 593 if(!tList.isEmpty()) 562 594 tList.prepend(QLatin1String(", ")); 563 tList.prepend( d->db.driver()->escapeIdentifier(tableName(),QSqlDriver::TableName));595 tList.prepend()); 564 596 query.append(QLatin1String("SELECT ")); 565 597 query.append(fList).append(QLatin1String(" FROM ")).append(tList); … … 691 723 692 724 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), 694 726 rel.displayColumn())); 695 727 s += d->sortOrder == Qt::AscendingOrder ? QLatin1String(" ASC") : QLatin1String(" DESC");
Note:
See TracChangeset
for help on using the changeset viewer.