Allow QgsFeatureRequest::OrderBy expressions to be prepared

This commit is contained in:
Matthias Kuhn 2017-05-01 18:50:12 +02:00
parent 8031ac43e0
commit abd26075a7
2 changed files with 49 additions and 0 deletions

View File

@ -302,6 +302,22 @@ QgsFeatureRequest::OrderByClause::OrderByClause( const QString &expression, bool
{
}
QgsFeatureRequest::OrderByClause::OrderByClause( const QgsExpression &expression, bool ascending )
: mExpression( expression )
, mAscending( ascending )
{
// postgres behavior: default for ASC: NULLS LAST, default for DESC: NULLS FIRST
mNullsFirst = !ascending;
}
QgsFeatureRequest::OrderByClause::OrderByClause( const QgsExpression &expression, bool ascending, bool nullsfirst )
: mExpression( expression )
, mAscending( ascending )
, mNullsFirst( nullsfirst )
{
}
bool QgsFeatureRequest::OrderByClause::ascending() const
{
return mAscending;
@ -335,6 +351,11 @@ QgsExpression QgsFeatureRequest::OrderByClause::expression() const
return mExpression;
}
bool QgsFeatureRequest::OrderByClause::prepare( QgsExpressionContext *context )
{
return mExpression.prepare( context );
}
QgsFeatureRequest::OrderBy::OrderBy( const QList<QgsFeatureRequest::OrderByClause> &other )
{
Q_FOREACH ( const QgsFeatureRequest::OrderByClause &clause, other )

View File

@ -138,12 +138,40 @@ class CORE_EXPORT QgsFeatureRequest
*/
OrderByClause( const QString &expression, bool ascending, bool nullsfirst );
/**
* Creates a new OrderByClause for a QgsFeatureRequest
*
* \param expression The expression to use for ordering
* \param ascending If the order should be ascending (1,2,3) or descending (3,2,1)
* If the order is ascending, by default nulls are last
* If the order is descending, by default nulls are first
*/
OrderByClause( const QgsExpression &expression, bool ascending = true );
/**
* Creates a new OrderByClause for a QgsFeatureRequest
*
* \param expression The expression to use for ordering
* \param ascending If the order should be ascending (1,2,3) or descending (3,2,1)
* \param nullsfirst If true, NULLS are at the beginning, if false, NULLS are at the end
*/
OrderByClause( const QgsExpression &expression, bool ascending, bool nullsfirst );
/**
* The expression
* \returns the expression
*/
QgsExpression expression() const;
/**
* Prepare the expression with the given context.
*
* \see QgsExpression::prepare
*
* \since QGIS 3.0
*/
bool prepare( QgsExpressionContext *context );
/**
* Order ascending
* \returns If ascending order is requested