23 QString QgsExtractBinaryFieldAlgorithm::name()
 const 
   25   return QStringLiteral( 
"extractbinary" );
 
   28 QString QgsExtractBinaryFieldAlgorithm::displayName()
 const 
   30   return QObject::tr( 
"Extract binary field" );
 
   33 QString QgsExtractBinaryFieldAlgorithm::shortHelpString()
 const 
   35   return QObject::tr( 
"This algorithm extracts contents from a binary field, saving them to individual files.\n\n" 
   36                       "Filenames can be generated using values taken from " 
   37                       "an attribute in the source table or based on a more complex expression." );
 
   40 QString QgsExtractBinaryFieldAlgorithm::shortDescription()
 const 
   42   return QObject::tr( 
"This algorithm extracts contents from a binary field, saving them to individual files." );
 
   45 QStringList QgsExtractBinaryFieldAlgorithm::tags()
 const 
   47   return QObject::tr( 
"blob,binaries,save,file,contents,field,column" ).split( 
',' );
 
   50 QString QgsExtractBinaryFieldAlgorithm::group()
 const 
   52   return QObject::tr( 
"Vector table" );
 
   55 QString QgsExtractBinaryFieldAlgorithm::groupId()
 const 
   57   return QStringLiteral( 
"vectortable" );
 
   60 QgsExtractBinaryFieldAlgorithm *QgsExtractBinaryFieldAlgorithm::createInstance()
 const 
   62   return new QgsExtractBinaryFieldAlgorithm();
 
   65 void QgsExtractBinaryFieldAlgorithm::initAlgorithm( 
const QVariantMap & )
 
   80   std::unique_ptr< QgsProcessingFeatureSource > input( parameterAsSource( parameters, QStringLiteral( 
"INPUT" ), context ) );
 
   84   QString fieldName = parameterAsString( parameters, QStringLiteral( 
"FIELD" ), context );
 
   85   int fieldIndex = input->fields().lookupField( fieldName );
 
   89   const QString folder = parameterAsString( parameters, QStringLiteral( 
"FOLDER" ), context );
 
   90   if ( !QFileInfo::exists( folder ) )
 
   94   const QString filenameExpressionString = parameterAsString( parameters, QStringLiteral( 
"FILENAME" ), context );
 
   95   QgsExpressionContext expressionContext = createExpressionContext( parameters, context, input.get() );
 
   97   QSet< QString > fields;
 
   98   fields.insert( fieldName );
 
  101   QgsExpression filenameExpression( filenameExpressionString );
 
  102   filenameExpression.prepare( &expressionContext );
 
  103   fields.unite( filenameExpression.referencedColumns() );
 
  105   if ( !filenameExpression.needsGeometry() )
 
  109   double step = input->featureCount() > 0 ? 100.0 / input->featureCount() : 1;
 
  122     QByteArray ba = feat.
attribute( fieldIndex ).toByteArray();
 
  127     QString name = filenameExpression.evaluate( &expressionContext ).toString();
 
  128     if ( filenameExpression.hasEvalError() )
 
  130       feedback->
reportError( QObject::tr( 
"Error evaluating filename: %1" ).arg( filenameExpression.evalErrorString() ) );
 
  134     const QString path = dir.filePath( name );
 
  136     if ( !file.open( QIODevice::WriteOnly | QFile::Truncate ) )
 
  138       feedback->
reportError( QObject::tr( 
"Could not open %1 for writing" ).arg( path ) );
 
  144       feedback->
pushInfo( QObject::tr( 
"Extracted %1" ).arg( path ) );
 
  149   outputs.insert( QStringLiteral( 
"FOLDER" ), folder );
 
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
void setFeature(const QgsFeature &feature)
Convenience function for setting a feature for the context.
Class for parsing and evaluation of expressions (formerly called "search strings").
Wrapper for iterator of features from vector data provider or vector layer.
bool nextFeature(QgsFeature &f)
This class wraps a request for features to a vector layer (or directly its vector data provider).
QgsFeatureRequest & setFlags(QgsFeatureRequest::Flags flags)
Sets flags that affect how features will be fetched.
QgsFeatureRequest & setSubsetOfAttributes(const QgsAttributeList &attrs)
Set a subset of attributes that will be fetched.
@ NoGeometry
Geometry is not required. It may still be returned if e.g. required for a filter condition.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
QVariant attribute(const QString &name) const
Lookup attribute value by attribute name.
bool isCanceled() const SIP_HOLDGIL
Tells whether the operation has been canceled already.
void setProgress(double progress)
Sets the current progress for the feedback object.
Contains information about the context in which a processing algorithm is executed.
Custom exception class for processing related exceptions.
@ FlagSkipGeometryValidityChecks
Invalid geometry checks should always be skipped. This flag can be useful for algorithms which always...
Base class for providing feedback from a processing algorithm.
virtual void pushInfo(const QString &info)
Pushes a general informational message from the algorithm.
virtual void reportError(const QString &error, bool fatalError=false)
Reports that the algorithm encountered an error while executing.
An expression parameter for processing algorithms.
An input feature source (such as vector layers) parameter for processing algorithms.
A vector layer or feature source field parameter for processing algorithms.
A folder destination parameter, for specifying the destination path for a folder created by the algor...
@ TypeVector
Tables (i.e. vector layers with or without geometry). When used for a sink this indicates the sink ha...