void TestQgsFields::indexFromName() { QgsFields fields; QgsField field( QString( "testfield" ) ); field.setAlias( "testfieldAlias" ); fields.append( field ); QgsField field2( QString( "testfield2" ) ); fields.append( field2 ); QgsField field3( QString( "testfield3" ) ); fields.append( field3 ); QCOMPARE( fields.indexFromName( QString( "bad" ) ), -1 ); QCOMPARE( fields.lookupField( QString( "bad" ) ), -1 ); QCOMPARE( fields.indexFromName( QString( "testfield" ) ), 0 ); QCOMPARE( fields.lookupField( QString( "testfield" ) ), 0 ); QCOMPARE( fields.indexFromName( QString( "testfield3" ) ), 2 ); QCOMPARE( fields.lookupField( QString( "testfield3" ) ), 2 ); //indexFromName is case sensitive, fieldNameIndex isn't QCOMPARE( fields.indexFromName( QString( "teStFiEld2" ) ), -1 ); QCOMPARE( fields.lookupField( QString( "teStFiEld2" ) ), 1 ); //test that fieldNameIndex prefers exact case matches over case insensitive matches QgsField sameNameDifferentCase( QString( "teStFielD" ) ); fields.append( sameNameDifferentCase ); QCOMPARE( fields.lookupField( QString( "teStFielD" ) ), 3 ); //test that the alias is only matched with fieldNameIndex QCOMPARE( fields.indexFromName( "testfieldAlias" ), -1 ); QCOMPARE( fields.lookupField( "testfieldAlias" ), 0 ); QCOMPARE( fields.lookupField( "testfieldalias" ), 0 ); }
void QgsRelationEditorWidget::addFeature() { QgsAttributeMap keyAttrs; const QgsVectorLayerTools* vlTools = mEditorContext.vectorLayerTools(); if ( mNmRelation.isValid() ) { // n:m Relation: first let the user create a new feature on the other table // and autocreate a new linking feature. QgsFeature f; if ( vlTools->addFeature( mNmRelation.referencedLayer(), QgsAttributeMap(), QgsGeometry(), &f ) ) { QgsFeature flink( mRelation.referencingLayer()->fields() ); // Linking feature flink.setAttribute( mRelation.fieldPairs().at( 0 ).first, mFeature.attribute( mRelation.fieldPairs().at( 0 ).second ) ); flink.setAttribute( mNmRelation.referencingFields().at( 0 ), f.attribute( mNmRelation.referencedFields().at( 0 ) ) ); mRelation.referencingLayer()->addFeature( flink ); updateUi(); } } else { QgsFields fields = mRelation.referencingLayer()->fields(); Q_FOREACH ( const QgsRelation::FieldPair& fieldPair, mRelation.fieldPairs() ) { keyAttrs.insert( fields.indexFromName( fieldPair.referencingField() ), mFeature.attribute( fieldPair.referencedField() ) ); } vlTools->addFeature( mDualView->masterModel()->layer(), keyAttrs ); } }
void QgsVectorLayerJoinBuffer::updateFields( QgsFields& fields ) { QList< QgsVectorJoinInfo>::const_iterator joinIt = mVectorJoins.constBegin(); for ( int joinIdx = 0 ; joinIt != mVectorJoins.constEnd(); ++joinIt, ++joinIdx ) { QgsVectorLayer* joinLayer = qobject_cast<QgsVectorLayer*>( QgsMapLayerRegistry::instance()->mapLayer( joinIt->joinLayerId ) ); if ( !joinLayer ) { continue; } joinIt->tmpTargetField = fields.indexFromName( joinIt->targetFieldName ); const QgsFields& joinFields = joinLayer->pendingFields(); joinIt->tmpJoinField = joinFields.indexFromName( joinIt->joinFieldName ); for ( int idx = 0; idx < joinFields.count(); ++idx ) { //skip the join field to avoid double field names (fields often have the same name) if ( joinFields[idx].name() != joinIt->joinFieldName ) { QgsField f = joinFields[idx]; f.setName( joinLayer->name() + "_" + f.name() ); fields.append( f, QgsFields::OriginJoin, idx + ( joinIdx*1000 ) ); } } } }
void TestQgsFields::indexFromName() { QgsFields fields; QgsField field( QString( "testfield" ) ); fields.append( field ); QgsField field2( QString( "testfield2" ) ); fields.append( field2 ); QgsField field3( QString( "testfield3" ) ); fields.append( field3 ); QCOMPARE( fields.indexFromName( QString( "bad" ) ), -1 ); QCOMPARE( fields.fieldNameIndex( QString( "bad" ) ), -1 ); QCOMPARE( fields.indexFromName( QString( "testfield" ) ), 0 ); QCOMPARE( fields.fieldNameIndex( QString( "testfield" ) ), 0 ); QCOMPARE( fields.indexFromName( QString( "testfield3" ) ), 2 ); QCOMPARE( fields.fieldNameIndex( QString( "testfield3" ) ), 2 ); //indexFromName is case sensitive, fieldNameIndex isn't QCOMPARE( fields.indexFromName( QString( "teStFiEld2" ) ), -1 ); QCOMPARE( fields.fieldNameIndex( QString( "teStFiEld2" ) ), 1 ); }
void TestQgsFields::remove() { QgsFields fields; //test for no crash fields.remove( 1 ); QgsField field( "testfield" ); fields.append( field ); QgsField field2( "testfield2" ); fields.append( field2 ); //test for no crash fields.remove( -1 ); fields.remove( 5 ); //remove valid field fields.remove( 0 ); QCOMPARE( fields.count(), 1 ); QCOMPARE( fields.at( 0 ).name(), QString( "testfield2" ) ); QCOMPARE( fields.indexFromName( "testfield2" ), 0 ); }