Skip to content

Commit

Permalink
Allow QgsFeatureRequest::OrderBy expressions to be prepared
Browse files Browse the repository at this point in the history
  • Loading branch information
m-kuhn committed May 1, 2017
1 parent 8031ac4 commit abd2607
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 0 deletions.
21 changes: 21 additions & 0 deletions src/core/qgsfeaturerequest.cpp
Expand Up @@ -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;
Expand Down Expand Up @@ -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 )
Expand Down
28 changes: 28 additions & 0 deletions src/core/qgsfeaturerequest.h
Expand Up @@ -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
Expand Down

0 comments on commit abd2607

Please sign in to comment.