mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-07 00:15:48 -04:00
Add compiler setting check to order by compilation
This commit is contained in:
parent
a17714247e
commit
e555323f34
@ -116,29 +116,38 @@ QgsPostgresFeatureIterator::QgsPostgresFeatureIterator( QgsPostgresFeatureSource
|
||||
|
||||
mOrderByCompiled = true;
|
||||
|
||||
Q_FOREACH ( const QgsFeatureRequest::OrderByClause& clause, request.orderBys() )
|
||||
if ( QSettings().value( "/qgis/compileExpressions", true ).toBool() )
|
||||
{
|
||||
QgsPostgresExpressionCompiler compiler = QgsPostgresExpressionCompiler( source );
|
||||
QgsExpression expression = clause.expression();
|
||||
if ( compiler.compile( &expression ) == QgsSqlExpressionCompiler::Complete )
|
||||
Q_FOREACH ( const QgsFeatureRequest::OrderByClause& clause, request.orderBys() )
|
||||
{
|
||||
QString part;
|
||||
part = compiler.result();
|
||||
part += clause.ascending() ? " ASC" : " DESC";
|
||||
part += clause.nullsFirst() ? " NULLS FIRST" : " NULLS LAST";
|
||||
orderByParts << part;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Bail out on first non-complete compilation.
|
||||
// Most important clauses at the beginning of the list
|
||||
// will still be sent and used to pre-sort so the local
|
||||
// CPU can use its cycles for fine-tuning.
|
||||
mOrderByCompiled = false;
|
||||
limitAtProvider = false;
|
||||
break;
|
||||
QgsPostgresExpressionCompiler compiler = QgsPostgresExpressionCompiler( source );
|
||||
QgsExpression expression = clause.expression();
|
||||
if ( compiler.compile( &expression ) == QgsSqlExpressionCompiler::Complete )
|
||||
{
|
||||
QString part;
|
||||
part = compiler.result();
|
||||
part += clause.ascending() ? " ASC" : " DESC";
|
||||
part += clause.nullsFirst() ? " NULLS FIRST" : " NULLS LAST";
|
||||
orderByParts << part;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Bail out on first non-complete compilation.
|
||||
// Most important clauses at the beginning of the list
|
||||
// will still be sent and used to pre-sort so the local
|
||||
// CPU can use its cycles for fine-tuning.
|
||||
mOrderByCompiled = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mOrderByCompiled = false;
|
||||
}
|
||||
|
||||
if ( !mOrderByCompiled )
|
||||
limitAtProvider = false;
|
||||
|
||||
bool success = declareCursor( whereClause, limitAtProvider ? mRequest.limit() : -1, false, orderByParts.join( "," ) );
|
||||
if ( !success && useFallbackWhereClause )
|
||||
|
@ -121,34 +121,43 @@ QgsSpatiaLiteFeatureIterator::QgsSpatiaLiteFeatureIterator( QgsSpatiaLiteFeature
|
||||
|
||||
mOrderByCompiled = true;
|
||||
|
||||
Q_FOREACH ( const QgsFeatureRequest::OrderByClause& clause, request.orderBys() )
|
||||
if ( QSettings().value( "/qgis/compileExpressions", true ).toBool() )
|
||||
{
|
||||
QgsSpatiaLiteExpressionCompiler compiler = QgsSpatiaLiteExpressionCompiler( source );
|
||||
QgsExpression expression = clause.expression();
|
||||
if ( compiler.compile( &expression ) == QgsSqlExpressionCompiler::Complete )
|
||||
Q_FOREACH ( const QgsFeatureRequest::OrderByClause& clause, request.orderBys() )
|
||||
{
|
||||
QString part;
|
||||
part = compiler.result();
|
||||
QgsSpatiaLiteExpressionCompiler compiler = QgsSpatiaLiteExpressionCompiler( source );
|
||||
QgsExpression expression = clause.expression();
|
||||
if ( compiler.compile( &expression ) == QgsSqlExpressionCompiler::Complete )
|
||||
{
|
||||
QString part;
|
||||
part = compiler.result();
|
||||
|
||||
if ( clause.nullsFirst() )
|
||||
orderByParts << QString( "%1 IS NOT NULL" ).arg( part );
|
||||
if ( clause.nullsFirst() )
|
||||
orderByParts << QString( "%1 IS NOT NULL" ).arg( part );
|
||||
else
|
||||
orderByParts << QString( "%1 IS NULL" ).arg( part );
|
||||
|
||||
part += clause.ascending() ? " COLLATE NOCASE ASC" : " COLLATE NOCASE DESC";
|
||||
orderByParts << part;
|
||||
}
|
||||
else
|
||||
orderByParts << QString( "%1 IS NULL" ).arg( part );
|
||||
|
||||
part += clause.ascending() ? " COLLATE NOCASE ASC" : " COLLATE NOCASE DESC";
|
||||
orderByParts << part;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Bail out on first non-complete compilation.
|
||||
// Most important clauses at the beginning of the list
|
||||
// will still be sent and used to pre-sort so the local
|
||||
// CPU can use its cycles for fine-tuning.
|
||||
mOrderByCompiled = false;
|
||||
limitAtProvider = false;
|
||||
break;
|
||||
{
|
||||
// Bail out on first non-complete compilation.
|
||||
// Most important clauses at the beginning of the list
|
||||
// will still be sent and used to pre-sort so the local
|
||||
// CPU can use its cycles for fine-tuning.
|
||||
mOrderByCompiled = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mOrderByCompiled = false;
|
||||
}
|
||||
|
||||
if ( !mOrderByCompiled )
|
||||
limitAtProvider = false;
|
||||
|
||||
// preparing the SQL statement
|
||||
bool success = prepareStatement( whereClause, limitAtProvider ? mRequest.limit() : -1, orderByParts.join( "," ) );
|
||||
|
Loading…
x
Reference in New Issue
Block a user