Skip to content

Commit b145080

Browse files
committedJun 14, 2016
Fix joins are not recreated when loading project with bad layers (fix #10500)
1 parent 92830a2 commit b145080

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed
 

‎src/core/qgsproject.cpp

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,15 @@ QgsProjectVersion getVersion( const QDomDocument& doc )
578578
return projectVersion;
579579
}
580580

581+
void QgsProject::processLayerJoins( QgsVectorLayer* layer )
582+
{
583+
if ( !layer )
584+
return;
585+
586+
layer->createJoinCaches();
587+
layer->updateFields();
588+
}
589+
581590
bool QgsProject::_getMapLayers( const QDomDocument& doc, QList<QDomNode>& brokenNodes )
582591
{
583592
// Layer order is set by the restoring the legend settings from project file.
@@ -641,8 +650,7 @@ bool QgsProject::_getMapLayers( const QDomDocument& doc, QList<QDomNode>& broken
641650
QList< QPair< QgsVectorLayer*, QDomElement > >::iterator vIt = vLayerList.begin();
642651
for ( ; vIt != vLayerList.end(); ++vIt )
643652
{
644-
vIt->first->createJoinCaches();
645-
vIt->first->updateFields();
653+
processLayerJoins( vIt->first );
646654
}
647655

648656
QSet<QgsVectorLayer *> notified;
@@ -975,7 +983,24 @@ bool QgsProject::read( QDomNode &layerNode )
975983
{
976984
QList<QDomNode> brokenNodes;
977985
QList< QPair< QgsVectorLayer*, QDomElement > > vectorLayerList;
978-
return addLayer( layerNode.toElement(), brokenNodes, vectorLayerList );
986+
if ( addLayer( layerNode.toElement(), brokenNodes, vectorLayerList ) )
987+
{
988+
// have to try to update joins for all layers now - a previously added layer may be dependant on this newly
989+
// added layer for joins
990+
QVector<QgsVectorLayer*> vectorLayers = QgsMapLayerRegistry::instance()->layers<QgsVectorLayer*>();
991+
Q_FOREACH ( QgsVectorLayer* layer, vectorLayers )
992+
{
993+
processLayerJoins( layer );
994+
}
995+
996+
if ( !vectorLayerList.isEmpty() )
997+
{
998+
emit readMapLayer( vectorLayerList.at( 0 ).first, vectorLayerList.at( 0 ).second );
999+
}
1000+
1001+
return true;
1002+
}
1003+
return false;
9791004
}
9801005

9811006
bool QgsProject::write( QFileInfo const &file )

‎src/core/qgsproject.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,11 @@ class CORE_EXPORT QgsProject : public QObject
491491
*/
492492
bool _getMapLayers( QDomDocument const &doc, QList<QDomNode>& brokenNodes );
493493

494+
/** Processes any joins attached to a newly added layer.
495+
* @param layer layer to process
496+
*/
497+
void processLayerJoins( QgsVectorLayer* layer );
498+
494499
QString mErrorMessage;
495500

496501
QgsProjectBadLayerHandler* mBadLayerHandler;

0 commit comments

Comments
 (0)
Please sign in to comment.