Esempio n. 1
0
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 ) );
      }
    }
  }
}
Esempio n. 4
0
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 );
}
Esempio n. 5
0
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 );
}