16 #ifndef QGSEXPRESSION_H
17 #define QGSEXPRESSION_H
20 #include <QStringList>
23 #include <QDomDocument>
109 QStringList referencedColumns();
111 bool needsGeometry();
117 QVariant evaluate(
const QgsFeature* f = NULL );
146 static void setSpecialColumn(
const QString& name, QVariant value );
148 static void unsetSpecialColumn(
const QString& name );
150 static QVariant specialColumn(
const QString& name );
153 static bool hasSpecialColumn(
const QString& name );
155 static bool isValid(
const QString& text,
const QgsFields& fields, QString &errorMessage );
165 QString dump()
const;
182 static QString replaceExpressionText(
const QString &action,
const QgsFeature *feat,
184 const QMap<QString, QVariant> *substitutionMap = 0 );
235 static const char* BinaryOperatorText[];
236 static const char* UnaryOperatorText[];
247 Function( QString fnname,
int params, QString group, QString helpText = QString(),
bool usesGeometry =
false )
248 : mName( fnname ), mParams( params ), mUsesGeometry( usesGeometry ), mGroup( group ), mHelpText( helpText ) {}
250 QString
name() {
return mName; }
264 if ( QString::compare( mName, other.
mName, Qt::CaseInsensitive ) == 0 )
281 StaticFunction( QString fnname,
int params, FcnEval fcn, QString group, QString helpText = QString(),
bool usesGeometry =
false )
282 :
Function( fnname, params, group, helpText, usesGeometry ), mFnc( fcn ) {}
286 return mFnc( values, f, parent );
293 static const QList<Function*> &Functions();
297 static const QStringList &BuiltinFunctions();
299 static bool registerFunction(
Function*
function );
300 static bool unregisterFunction( QString name );
303 static bool isFunctionName( QString name );
306 static int functionIndex( QString name );
311 static int functionCount();
316 static QList<Function*> specialColumns();
319 static QString quotedColumnRef( QString name );
321 static QString quotedString( QString text );
342 virtual NodeType nodeType()
const = 0;
351 virtual QString dump()
const = 0;
353 virtual QStringList referencedColumns()
const = 0;
354 virtual bool needsGeometry()
const = 0;
357 virtual void accept(
Visitor& v )
const = 0;
366 int count() {
return mList.count(); }
367 QList<Node*>
list() {
return mList; }
369 virtual QString dump()
const;
379 static const int YEARS = 31557600;
380 static const int MONTHS = 60 * 60 * 24 * 30;
381 static const int WEEKS = 60 * 60 * 24 * 7;
382 static const int DAY = 60 * 60 * 24;
383 static const int HOUR = 60 * 60;
384 static const int MINUTE = 60;
386 Interval(
double seconds = 0 ) : mSeconds( seconds ), mValid( true ) { }
388 double years() {
return mSeconds / YEARS;}
389 double months() {
return mSeconds / MONTHS; }
390 double weeks() {
return mSeconds / WEEKS;}
391 double days() {
return mSeconds / DAY;}
392 double hours() {
return mSeconds / HOUR;}
417 virtual QString
dump()
const;
441 virtual QString
dump()
const;
443 virtual QStringList
referencedColumns()
const {
return mOpLeft->referencedColumns() + mOpRight->referencedColumns(); }
444 virtual bool needsGeometry()
const {
return mOpLeft->needsGeometry() || mOpRight->needsGeometry(); }
447 int precedence()
const;
450 bool compare(
double diff );
451 int computeInt(
int x,
int y );
452 double computeDouble(
double x,
double y );
473 virtual QString
dump()
const;
498 virtual QString
dump()
const;
515 QVariant
value()
const {
return mValue; }
520 virtual QString
dump()
const;
535 QString
name()
const {
return mName; }
540 virtual QString
dump()
const;
573 virtual QString
dump()
const;
602 void acceptVisitor( Visitor& v )
const;
604 static QString helptext( QString name );
605 static QString group( QString group );
611 void initGeomCalculator();
627 static void initFunctionHelp();
634 #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.
const QString expression() const
Alias for dump()
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
Container of fields for a vector layer.
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.
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.
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
This is the base class for vector data providers.
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