16 #ifndef QGSEXPRESSION_H
17 #define QGSEXPRESSION_H
20 #include <QStringList>
23 #include <QDomDocument>
108 QStringList referencedColumns();
110 bool needsGeometry();
116 QVariant evaluate(
const QgsFeature* f = NULL );
143 static void setSpecialColumn(
const QString& name, QVariant value );
145 static void unsetSpecialColumn(
const QString& name );
147 static QVariant specialColumn(
const QString& name );
156 QString dump()
const;
173 static QString replaceExpressionText( QString action,
QgsFeature* feat,
175 const QMap<QString, QVariant> *substitutionMap = 0 );
178 static QString replaceExpressionText( QString action,
QgsFeature& feat,
180 const QMap<QString, QVariant> *substitutionMap = 0 );
231 static const char* BinaryOperatorText[];
232 static const char* UnaryOperatorText[];
243 Function( QString fnname,
int params, QString group, QString helpText = QString(),
bool usesGeometry =
false )
244 : mName( fnname ), mParams( params ), mUsesGeometry( usesGeometry ), mGroup( group ), mHelpText( helpText ) {}
246 QString
name() {
return mName; }
260 if ( QString::compare( mName, other.
mName, Qt::CaseInsensitive ) == 0 )
277 StaticFunction( QString fnname,
int params, FcnEval fcn, QString group, QString helpText = QString(),
bool usesGeometry =
false )
278 :
Function( fnname, params, group, helpText, usesGeometry ), mFnc( fcn ) {}
282 return mFnc( values, f, parent );
289 const static QList<Function*> &Functions();
293 const static QStringList &BuiltinFunctions();
295 static bool registerFunction(
Function*
function );
296 static bool unregisterFunction( QString name );
299 static bool isFunctionName( QString name );
302 static int functionIndex( QString name );
307 static int functionCount();
312 static QList<Function*> specialColumns();
315 static QString
quotedColumnRef( QString name ) {
return QString(
"\"%1\"" ).arg( name.replace(
"\"",
"\"\"" ) ); }
317 static QString
quotedString( QString text ) {
return QString(
"'%1'" ).arg( text.replace(
"'",
"''" ) ); }
338 virtual NodeType nodeType()
const = 0;
347 virtual QString dump()
const = 0;
349 virtual QStringList referencedColumns()
const = 0;
350 virtual bool needsGeometry()
const = 0;
353 virtual void accept(
Visitor& v )
const = 0;
362 int count() {
return mList.count(); }
363 QList<Node*>
list() {
return mList; }
365 virtual QString dump()
const;
375 static const int YEARS = 31557600;
376 static const int MONTHS = 60 * 60 * 24 * 30;
377 static const int WEEKS = 60 * 60 * 24 * 7;
378 static const int DAY = 60 * 60 * 24;
379 static const int HOUR = 60 * 60;
380 static const int MINUTE = 60;
382 Interval(
double seconds = 0 ): mSeconds( seconds ), mValid( true ) { }
384 double years() {
return mSeconds / YEARS;}
385 double months() {
return mSeconds / MONTHS; }
386 double weeks() {
return mSeconds / WEEKS;}
387 double days() {
return mSeconds / DAY;}
388 double hours() {
return mSeconds / HOUR;}
413 virtual QString
dump()
const;
437 virtual QString
dump()
const;
439 virtual QStringList
referencedColumns()
const {
return mOpLeft->referencedColumns() + mOpRight->referencedColumns(); }
440 virtual bool needsGeometry()
const {
return mOpLeft->needsGeometry() || mOpRight->needsGeometry(); }
444 bool compare(
double diff );
445 int computeInt(
int x,
int y );
446 double computeDouble(
double x,
double y );
467 virtual QString
dump()
const;
492 virtual QString
dump()
const;
509 QVariant
value()
const {
return mValue; }
514 virtual QString
dump()
const;
529 QString
name()
const {
return mName; }
534 virtual QString
dump()
const;
566 virtual QString
dump()
const;
595 void acceptVisitor( Visitor& v )
const;
597 static QString helptext( QString name );
598 static QString group( QString group );
604 void initGeomCalculator();
620 static void initFunctionHelp();
627 #endif // QGSEXPRESSION_H
virtual void accept(Visitor &v) const
Class for parsing and evaluation of expressions (formerly called "search strings").
virtual QStringList referencedColumns() const =0
bool hasEvalError() const
Returns true if an error occurred when evaluating last input.
QVariant evaluate(const QgsFeature &f, const QgsFields &fields)
Evaluate the feature and return the result.
bool hasParserError() const
Returns true if an error occurred when parsing the input expression.
virtual bool needsGeometry() const
Node is a class used by Line3D.
virtual QVariant func(const QVariantList &values, const QgsFeature *f, QgsExpression *parent)
A abstract base class for defining QgsExpression functions.
bool operator==(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)
virtual bool needsGeometry() const
virtual QString dump() const =0
NodeCondition(WhenThenList *conditions, Node *elseExp=NULL)
static QString helptext(QString name)
virtual QStringList referencedColumns() const
virtual NodeType nodeType() const
static QString quotedColumnRef(QString name)
return quoted column reference (in double quotes)
Container of fields for a vector layer.
A geometry is the spatial representation of a feature.
Interval(double seconds=0)
virtual NodeType nodeType() const
virtual bool prepare(QgsExpression *parent, const QgsFields &fields)=0
virtual NodeType nodeType() const
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
int currentRowNumber()
Return the number used for $rownum special column.
static QString quotedString(QString text)
return quoted string (in single quotes)
NodeBinaryOperator(BinaryOperator op, Node *opLeft, Node *opRight)
QString mParserErrorString
virtual QStringList referencedColumns() const
static const QList< Function * > & Functions()
virtual QStringList referencedColumns() const
Function(QString fnname, int params, QString group, QString helpText=QString(), bool usesGeometry=false)
static QHash< QString, QString > gFunctionHelpTexts
virtual NodeType nodeType() const
QgsDistanceArea * geomCalculator()
Return calculator used for distance and area calculations (used by internal functions) ...
virtual QStringList referencedColumns() const
virtual bool needsGeometry() const
virtual void accept(Visitor &v) const
static QHash< QString, QString > gGroups
const Node * rootNode() const
Returns root node of the expression. Root node is null is parsing has failed.
const QString & expression() const
StaticFunction(QString fnname, int params, FcnEval fcn, QString group, QString helpText=QString(), bool usesGeometry=false)
NodeInOperator(Node *node, NodeList *list, bool notin=false)
NodeColumnRef(QString name)
QString helptext()
The help text for the function.
static QList< Function * > gmFunctions
QString name()
The name of the function.
void setCurrentRowNumber(int rowNumber)
Set the number for $rownum special column.
WhenThen(Node *whenExp, Node *thenExp)
NodeLiteral(QVariant value)
virtual NodeType nodeType() const
NodeUnaryOperator(UnaryOperator op, Node *operand)
BinaryOperator op() const
virtual void accept(Visitor &v) const
virtual QVariant eval(QgsExpression *parent, const QgsFeature *f)=0
void setEvalErrorString(QString str)
Set evaluation error (used internally by evaluation functions)
NodeFunction(int fnIndex, NodeList *args)
General purpose distance and area calculator.
virtual void accept(Visitor &v) const
virtual void accept(Visitor &v) const
QString group()
The group the function belongs to.
QList< WhenThen * > WhenThenList
virtual NodeType nodeType() const
virtual void accept(Visitor &v) const
virtual void visit(const NodeUnaryOperator &n)=0
QVariant evaluate(const QgsFeature &f)
Evaluate the feature and return the result.
int params()
The number of parameters this function takes.
virtual QStringList referencedColumns() const
virtual void accept(Visitor &v) const
support for visitor pattern - algorithms dealing with the expressions may be implemented without modi...
virtual bool needsGeometry() const
virtual bool needsGeometry() const =0
bool operator==(const Function &other) const
static QStringList gmBuiltinFunctions
void setValid(bool valid)
virtual QStringList referencedColumns() const
void setScale(double scale)
Represents a vector layer which manages a vector based data sets.
QString parserErrorString() const
Returns parser error.
Q_DECLARE_METATYPE(QgsExpression::Interval)
The QgsOgcUtils class provides various utility functions for conversion between OGC (Open Geospatial ...
QString evalErrorString() const
Returns evaluation error.
virtual bool needsGeometry() const
virtual bool needsGeometry() const
bool usesgeometry()
Does this function use a geometry object.
virtual NodeType nodeType() const
virtual ~NodeInOperator()
static QMap< QString, QVariant > gmSpecialColumns