Skip to content

Commit 60bbf67

Browse files
committed
Be careful with requesting evaluated default values
We do not need a new evaluated value all the time Fix #16545
1 parent 7734d72 commit 60bbf67

14 files changed

+50
-22
lines changed

python/core/qgsvectordataprovider.sip

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -234,9 +234,11 @@ class QgsVectorDataProvider : QgsDataProvider
234234
const QMap<qint64, QgsGeometry> &geometry_map );
235235

236236
/**
237-
* Returns the default value for field specified by @c fieldId
237+
* Returns the default value for field specified by \a fieldId.
238+
* If \a forceLazyEval is set to true, the provider the default value
239+
* will not be evaluated on server side even if specified in the project properties.
238240
*/
239-
virtual QVariant defaultValue( int fieldId );
241+
virtual QVariant defaultValue( int fieldId, bool forceLazyEval = false );
240242

241243
/**
242244
* Changes geometries of existing features

src/app/qgsidentifyresultsdialog.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -531,9 +531,10 @@ void QgsIdentifyResultsDialog::addFeature( QgsVectorLayer *vlayer, const QgsFeat
531531
continue;
532532
}
533533

534+
// _TAG
534535
QString defVal;
535536
if ( fields.fieldOrigin( i ) == QgsFields::OriginProvider && vlayer->dataProvider() )
536-
defVal = vlayer->dataProvider()->defaultValue( fields.fieldOriginIndex( i ) ).toString();
537+
defVal = vlayer->dataProvider()->defaultValue( fields.fieldOriginIndex( i ), true ).toString();
537538

538539
QString value = defVal == attrs.at( i ) ? defVal : fields.at( i ).displayString( attrs.at( i ) );
539540
QTreeWidgetItem *attrItem = new QTreeWidgetItem( QStringList() << QString::number( i ) << value );

src/core/qgsvectordataprovider.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,9 @@ bool QgsVectorDataProvider::changeAttributeValues( const QgsChangedAttributesMap
9393
return false;
9494
}
9595

96-
QVariant QgsVectorDataProvider::defaultValue( int fieldId )
96+
QVariant QgsVectorDataProvider::defaultValue( int fieldId, bool forceLazyEval )
9797
{
98+
Q_UNUSED( forceLazyEval )
9899
Q_UNUSED( fieldId );
99100
return QVariant();
100101
}

src/core/qgsvectordataprovider.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -285,9 +285,11 @@ class CORE_EXPORT QgsVectorDataProvider : public QgsDataProvider
285285
const QgsGeometryMap &geometry_map );
286286

287287
/**
288-
* Returns the default value for field specified by @c fieldId
288+
* Returns the default value for field specified by \a fieldId.
289+
* If \a forceLazyEval is set to true, the provider the default value
290+
* will not be evaluated on server side even if specified in the project properties.
289291
*/
290-
virtual QVariant defaultValue( int fieldId );
292+
virtual QVariant defaultValue( int fieldId, bool forceLazyEval = false );
291293

292294
/**
293295
* Changes geometries of existing features

src/gui/editorwidgets/core/qgseditorwidgetfactory.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ QString QgsEditorWidgetFactory::representValue( QgsVectorLayer* vl, int fieldIdx
7070

7171
QString defVal;
7272
if ( vl->fields().fieldOrigin( fieldIdx ) == QgsFields::OriginProvider && vl->dataProvider() )
73-
defVal = vl->dataProvider()->defaultValue( vl->fields().fieldOriginIndex( fieldIdx ) ).toString();
73+
defVal = vl->dataProvider()->defaultValue( vl->fields().fieldOriginIndex( fieldIdx ), true ).toString();
7474

7575
return value == defVal ? defVal : vl->fields().at( fieldIdx ).displayString( value );
7676
}

src/gui/editorwidgets/core/qgseditorwidgetwrapper.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,11 @@ QgsField QgsEditorWidgetWrapper::field() const
4242

4343
QVariant QgsEditorWidgetWrapper::defaultValue() const
4444
{
45-
mDefaultValue = layer()->dataProvider()->defaultValue( mFieldIdx );
45+
if ( !mDefaultValue.isValid() )
46+
{
47+
QgsVectorLayer* lyr = layer();
48+
mDefaultValue = lyr->dataProvider()->defaultValue( lyr->fields().fieldOriginIndex( mFieldIdx ) );
49+
}
4650

4751
return mDefaultValue;
4852
}

src/providers/gpx/qgsgpxprovider.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -515,8 +515,9 @@ void QgsGPXProvider::changeAttributeValues( QgsGPSObject& obj, const QgsAttribut
515515
}
516516

517517

518-
QVariant QgsGPXProvider::defaultValue( int fieldId )
518+
QVariant QgsGPXProvider::defaultValue( int fieldId, bool forceLazyEval )
519519
{
520+
Q_UNUSED( forceLazyEval )
520521
if ( fieldId == SrcAttr )
521522
return tr( "Digitized in QGIS" );
522523
return QVariant();

src/providers/gpx/qgsgpxprovider.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,11 @@ class QgsGPXProvider : public QgsVectorDataProvider
9797
virtual int capabilities() const override;
9898

9999
/**
100-
* Returns the default value for field specified by @c fieldId
100+
* Returns the default value for field specified by \a fieldId.
101+
* If \a forceLazyEval is set to true, the provider the default value
102+
* will not be evaluated on server side even if specified in the project properties.
101103
*/
102-
virtual QVariant defaultValue( int fieldId ) override;
104+
virtual QVariant defaultValue( int fieldId, bool forceLazyEval = false ) override;
103105

104106

105107
/* Functions inherited from QgsDataProvider */

src/providers/mssql/qgsmssqlprovider.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -502,8 +502,10 @@ QString QgsMssqlProvider::quotedValue( const QVariant& value )
502502
}
503503
}
504504

505-
QVariant QgsMssqlProvider::defaultValue( int fieldId )
505+
QVariant QgsMssqlProvider::defaultValue( int fieldId, bool forceLazyEval )
506506
{
507+
Q_UNUSED( forceLazyEval )
508+
507509
if ( mDefaultValues.contains( fieldId ) )
508510
return mDefaultValues[fieldId];
509511
else

src/providers/mssql/qgsmssqlprovider.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,8 +231,12 @@ class QgsMssqlProvider : public QgsVectorDataProvider
231231
/** Convert values to quoted values for database work **/
232232
static QString quotedValue( const QVariant& value );
233233

234-
/** Returns the default value for field specified by @c fieldId */
235-
QVariant defaultValue( int fieldId ) override;
234+
/**
235+
* Returns the default value for field specified by \a fieldId.
236+
* If \a forceLazyEval is set to true, the provider the default value
237+
* will not be evaluated on server side even if specified in the project properties.
238+
*/
239+
virtual QVariant defaultValue( int fieldId, bool forceLazyEval = false ) override;
236240

237241
/** Import a vector layer into the database */
238242
static QgsVectorLayerImport::ImportError createEmptyLayer(

0 commit comments

Comments
 (0)