QGIS API Documentation  3.14.0-Pi (9f7028fd23)
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 
33 class CORE_EXPORT QgsVectorLayerJoinInfo
34 {
35  public:
36 
40  QgsVectorLayerJoinInfo() = default;
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 
192  static QStringList joinFieldNamesSubset( const QgsVectorLayerJoinInfo &info, bool blocklisted = true );
193 
194  bool operator==( const QgsVectorLayerJoinInfo &other ) const
195  {
196  return mTargetFieldName == other.mTargetFieldName &&
197  mJoinLayerRef.layerId == other.mJoinLayerRef.layerId &&
198  mJoinFieldName == other.mJoinFieldName &&
199  mJoinFieldsSubset == other.mJoinFieldsSubset &&
200  mMemoryCache == other.mMemoryCache &&
201  mPrefix == other.mPrefix;
202  }
203 
212  void setJoinFieldNamesSubset( QStringList *fieldNamesSubset SIP_TRANSFER ) { mJoinFieldsSubset = std::shared_ptr<QStringList>( fieldNamesSubset ); }
213 
223  QStringList *joinFieldNamesSubset() const { return mJoinFieldsSubset.get(); }
224 
225  protected:
227  QString mTargetFieldName;
229  QgsVectorLayerRef mJoinLayerRef;
231  QString mJoinFieldName;
232 
237  QString mPrefix;
238 
240  bool mMemoryCache = false;
241 
243  std::shared_ptr<QStringList> mJoinFieldsSubset;
244 
245  // caching support
246 
247  friend class QgsVectorLayerJoinBuffer;
248  friend class QgsVectorLayerFeatureIterator;
249 
251  bool cacheDirty = true;
252 
253  bool mDynamicForm = false;
254 
255  bool mEditable = false;
256 
257  bool mUpsertOnEdit = false;
258 
259  bool mCascadedDelete = false;
260 
261  QStringList mBlockList;
262 
264  QHash< QString, QgsAttributes> cachedAttributes;
265 
266 };
267 
268 
269 #endif // QGSVECTORLAYERJOININFO_H
operator==
bool operator==(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)
Definition: qgsfeatureiterator.h:399
QgsVectorLayerJoinInfo::mJoinFieldsSubset
std::shared_ptr< QStringList > mJoinFieldsSubset
Subset of fields to use from joined layer. nullptr = use all fields.
Definition: qgsvectorlayerjoininfo.h:256
qgsfeature.h
QgsVectorLayerJoinInfo::mPrefix
QString mPrefix
An optional prefix.
Definition: qgsvectorlayerjoininfo.h:250
SIP_DEPRECATED
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
_LayerRef::layerId
QString layerId
Original layer ID.
Definition: qgsmaplayerref.h:116
QgsVectorLayerJoinInfo::mTargetFieldName
QString mTargetFieldName
Join field in the target layer.
Definition: qgsvectorlayerjoininfo.h:240
QgsVectorLayerFeatureIterator
Definition: qgsvectorlayerfeatureiterator.h:120
QgsVectorLayerJoinBuffer
Definition: qgsvectorlayerjoinbuffer.h:36
SIP_TRANSFER
#define SIP_TRANSFER
Definition: qgis_sip.h:36
QgsVectorLayerJoinInfo
Definition: qgsvectorlayerjoininfo.h:33
QgsVectorLayerJoinInfo::mJoinFieldName
QString mJoinFieldName
Join field in the source layer.
Definition: qgsvectorlayerjoininfo.h:244
qgsvectorlayerref.h
QgsVectorLayer
Definition: qgsvectorlayer.h:385
QgsVectorLayerRef
_LayerRef< QgsVectorLayer > QgsVectorLayerRef
Definition: qgsvectorlayerref.h:23
QgsFeature
Definition: qgsfeature.h:55
_LayerRef< QgsVectorLayer >
QgsVectorLayerJoinInfo::mMemoryCache
bool mMemoryCache
True if the join is cached in virtual memory.
Definition: qgsvectorlayerjoininfo.h:253
QgsVectorLayerJoinInfo::mJoinLayerRef
QgsVectorLayerRef mJoinLayerRef
Weak reference to the joined layer.
Definition: qgsvectorlayerjoininfo.h:242
QgsField
Definition: qgsfield.h:49