QGIS API Documentation 3.30.0-'s-Hertogenbosch (f186b8efe0)
qgsvectorlayerjoininfo.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsvectorlayerjoininfo.h
3 ---------------------
4 begin : January 2017
5 copyright : (C) 2017 by Martin Dobias
6 email : wonder dot sk at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15#ifndef QGSVECTORLAYERJOININFO_H
16#define QGSVECTORLAYERJOININFO_H
17
18#include <QHash>
19#include <QString>
20#include <QStringList>
21
22#include "qgsfeature.h"
23
24#include "qgsvectorlayerref.h"
25
33class CORE_EXPORT QgsVectorLayerJoinInfo
34{
35 public:
36
41
43 void setJoinLayer( QgsVectorLayer *layer ) { mJoinLayerRef = QgsVectorLayerRef( layer ); }
45 QgsVectorLayer *joinLayer() const { return mJoinLayerRef.get(); }
46
48 void setJoinLayerId( const QString &layerId ) { mJoinLayerRef = QgsVectorLayerRef( layerId ); }
50 QString joinLayerId() const { return mJoinLayerRef.layerId; }
51
53 void setTargetFieldName( const QString &fieldName ) { mTargetFieldName = fieldName; }
55 QString targetFieldName() const { return mTargetFieldName; }
56
58 void setJoinFieldName( const QString &fieldName ) { mJoinFieldName = fieldName; }
60 QString joinFieldName() const { return mJoinFieldName; }
61
63 void setPrefix( const QString &prefix ) { mPrefix = prefix; }
65 QString prefix() const { return mPrefix; }
66
68 void setUsingMemoryCache( bool enabled );
69
74 bool isUsingMemoryCache() const;
75
81 bool isDynamicFormEnabled() const { return mDynamicForm; }
82
88 void setDynamicFormEnabled( bool enabled ) { mDynamicForm = enabled; }
89
95 bool isEditable() const { return mEditable; }
96
101 void setEditable( bool enabled );
102
108 bool hasUpsertOnEdit() const { return mUpsertOnEdit; }
109
115 void setUpsertOnEdit( bool enabled ) { mUpsertOnEdit = enabled; }
116
122 bool hasCascadedDelete() const { return mCascadedDelete; }
123
129 void setCascadedDelete( bool enabled ) { mCascadedDelete = enabled; }
130
137 QString prefixedFieldName( const QgsField &field ) const;
138
146 QgsFeature extractJoinedFeature( const QgsFeature &feature ) const;
147
153 Q_DECL_DEPRECATED void setJoinFieldNamesBlackList( const QStringList &blackList ) SIP_DEPRECATED { mBlockList = blackList; }
154
160 Q_DECL_DEPRECATED QStringList joinFieldNamesBlackList() const SIP_DEPRECATED { return mBlockList; }
161
168 void setJoinFieldNamesBlockList( const QStringList &list ) { mBlockList = list; }
169
176 QStringList joinFieldNamesBlockList() const { return mBlockList; }
177
184 bool hasSubset( bool blocklisted = true ) const;
185
195 static QStringList joinFieldNamesSubset( const QgsVectorLayerJoinInfo &info, bool blocklisted = true );
196
205 static QStringList joinFieldNamesSubset( const QgsVectorLayerJoinInfo &info, const QgsFields &joinLayerFields, bool blocklisted = true );
206
207 bool operator==( const QgsVectorLayerJoinInfo &other ) const
208 {
209 return mTargetFieldName == other.mTargetFieldName &&
210 mJoinLayerRef.layerId == other.mJoinLayerRef.layerId &&
211 mJoinFieldName == other.mJoinFieldName &&
212 mJoinFieldsSubset == other.mJoinFieldsSubset &&
213 mMemoryCache == other.mMemoryCache &&
214 mPrefix == other.mPrefix;
215 }
216
225 void setJoinFieldNamesSubset( QStringList *fieldNamesSubset SIP_TRANSFER ) { mJoinFieldsSubset = std::shared_ptr<QStringList>( fieldNamesSubset ); }
226
236 QStringList *joinFieldNamesSubset() const { return mJoinFieldsSubset.get(); }
237
238 protected:
245
250 QString mPrefix;
251
253 bool mMemoryCache = false;
254
256 std::shared_ptr<QStringList> mJoinFieldsSubset;
257
258 // caching support
259
262
264 bool cacheDirty = true;
265
266 bool mDynamicForm = false;
267
268 bool mEditable = false;
269
270 bool mUpsertOnEdit = false;
271
272 bool mCascadedDelete = false;
273
274 QStringList mBlockList;
275
277 QHash< QString, QgsAttributes> cachedAttributes;
278
279};
280
281
282#endif // QGSVECTORLAYERJOININFO_H
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition: qgsfeature.h:56
Encapsulate a field in an attribute table or data source.
Definition: qgsfield.h:52
Container of fields for a vector layer.
Definition: qgsfields.h:45
Manages joined fields for a vector layer.
Defines left outer join from our vector layer to some other vector layer.
QStringList * joinFieldNamesSubset() const
Returns the subset of fields to be used from joined layer.
QgsVectorLayerJoinInfo()=default
Constructor for QgsVectorLayerJoinInfo.
void setDynamicFormEnabled(bool enabled)
Sets whether the form has to be dynamically updated with joined fields when a feature is being create...
bool hasCascadedDelete() const
Returns whether a feature deleted on the target layer has to impact the joined layer by deleting the ...
bool operator==(const QgsVectorLayerJoinInfo &other) const
void setJoinLayerId(const QString &layerId)
Sets ID of the joined layer. It will need to be overwritten by setJoinLayer() to a reference to real ...
Q_DECL_DEPRECATED void setJoinFieldNamesBlackList(const QStringList &blackList)
Sets a list of fields to ignore whatever happens.
std::shared_ptr< QStringList > mJoinFieldsSubset
Subset of fields to use from joined layer. nullptr = use all fields.
bool isDynamicFormEnabled() const
Returns whether the form has to be dynamically updated with joined fields when a feature is being cre...
bool hasUpsertOnEdit() const
Returns whether a feature created on the target layer has to impact the joined layer by creating a ne...
bool mMemoryCache
True if the join is cached in virtual memory.
bool isEditable() const
Returns whether joined fields may be edited through the form of the target layer.
QString mPrefix
An optional prefix.
void setCascadedDelete(bool enabled)
Sets whether a feature deleted on the target layer has to impact the joined layer by deleting the cor...
void setJoinFieldName(const QString &fieldName)
Sets name of the field of joined layer that will be used for join.
void setJoinFieldNamesBlockList(const QStringList &list)
Sets a list of fields to ignore whatever happens.
QString mJoinFieldName
Join field in the source layer.
QString prefix() const
Returns prefix of fields from the joined layer. If nullptr, joined layer's name will be used.
void setTargetFieldName(const QString &fieldName)
Sets name of the field of our layer that will be used for join.
QStringList joinFieldNamesBlockList() const
Returns the list of fields to ignore.
QString joinFieldName() const
Returns name of the field of joined layer that will be used for join.
void setUpsertOnEdit(bool enabled)
Sets whether a feature created on the target layer has to impact the joined layer by creating a new f...
QString targetFieldName() const
Returns name of the field of our layer that will be used for join.
QString joinLayerId() const
ID of the joined layer - may be used to resolve reference to the joined layer.
void setPrefix(const QString &prefix)
Sets prefix of fields from the joined layer. If nullptr, joined layer's name will be used.
QgsVectorLayerRef mJoinLayerRef
Weak reference to the joined layer.
void setJoinLayer(QgsVectorLayer *layer)
Sets weak reference to the joined layer.
Q_DECL_DEPRECATED QStringList joinFieldNamesBlackList() const
Returns the list of fields to ignore.
QgsVectorLayer * joinLayer() const
Returns joined layer (may be nullptr if the reference was set by layer ID and not resolved yet)
QHash< QString, QgsAttributes > cachedAttributes
Cache for joined attributes to provide fast lookup (size is 0 if no memory caching)
QString mTargetFieldName
Join field in the target layer.
void setJoinFieldNamesSubset(QStringList *fieldNamesSubset)
Sets the subset of fields to be used from joined layer.
Represents a vector layer which manages a vector based data sets.
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
#define SIP_TRANSFER
Definition: qgis_sip.h:36
const QgsField & field
Definition: qgsfield.h:501
_LayerRef< QgsVectorLayer > QgsVectorLayerRef
QString layerId
Original layer ID.