Skip to content

Commit

Permalink
HANA: Set query BBOX values via set parameter function in PreparedSta…
Browse files Browse the repository at this point in the history
…tement
  • Loading branch information
Maksim Rylov authored and mrylov committed Dec 7, 2020
1 parent 550abfd commit 238db50
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 20 deletions.
1 change: 1 addition & 0 deletions src/providers/hana/qgshanadriver.h
Expand Up @@ -23,6 +23,7 @@

class QgsHanaDriver
{
private:
QgsHanaDriver();
~QgsHanaDriver();

Expand Down
30 changes: 15 additions & 15 deletions src/providers/hana/qgshanafeatureiterator.cpp
Expand Up @@ -91,7 +91,15 @@ bool QgsHanaFeatureIterator::rewind()
return false;

mResultSet.reset();
mResultSet = mConnection->executeQuery( mSqlQuery );
if ( !( mFilterRect.isNull() || mFilterRect.isEmpty() ) && mSource->isSpatial() && mHasGeometryColumn )
{
QString ll = QStringLiteral( "POINT(%1 %2)" ).arg( QString::number( mFilterRect.xMinimum() ), QString::number( mFilterRect.yMinimum() ) );
QString ur = QStringLiteral( "POINT(%1 %2)" ).arg( QString::number( mFilterRect.xMaximum() ), QString::number( mFilterRect.yMaximum() ) );
mResultSet = mConnection->executeQuery( mSqlQuery, { ll, mSource->mSrid, ur, mSource->mSrid } );
}
else
mResultSet = mConnection->executeQuery( mSqlQuery );

return true;
}

Expand Down Expand Up @@ -173,22 +181,14 @@ bool QgsHanaFeatureIterator::nextFeatureFilterExpression( QgsFeature &feature )
return fetchFeature( feature );
}

QString QgsHanaFeatureIterator::getBBOXFilter( const QgsRectangle &bbox,
const QVersionNumber &dbVersion ) const
QString QgsHanaFeatureIterator::getBBOXFilter( const QVersionNumber &dbVersion ) const
{
if ( dbVersion.majorVersion() == 1 )
{
return QStringLiteral( "%1.ST_SRID(%2).ST_IntersectsRect(ST_GeomFromText('Point(%3 %4)', %2), ST_GeomFromText('Point(%5 %6)', %2)) = 1" )
.arg( QgsHanaUtils::quotedIdentifier( mSource->mGeometryColumn ), QString::number( mSource->mSrid ),
qgsDoubleToString( bbox.xMinimum() ), qgsDoubleToString( bbox.yMinimum() ),
qgsDoubleToString( bbox.xMaximum() ), qgsDoubleToString( bbox.yMaximum() ) );
}
return QStringLiteral( "%1.ST_SRID(%2).ST_IntersectsRect(ST_GeomFromText(?, ?), ST_GeomFromText(?, ?)) = 1" )
.arg( QgsHanaUtils::quotedIdentifier( mSource->mGeometryColumn ), QString::number( mSource->mSrid ) );
else
return QStringLiteral( "%1.ST_IntersectsRectPlanar(ST_GeomFromText('Point(%2 %3)', %6), ST_GeomFromText('Point(%4 %5)', %6)) = 1" )
.arg( QgsHanaUtils::quotedIdentifier( mSource->mGeometryColumn ),
qgsDoubleToString( bbox.xMinimum() ), qgsDoubleToString( bbox.yMinimum() ),
qgsDoubleToString( bbox.xMaximum() ), qgsDoubleToString( bbox.yMaximum() ),
QString::number( mSource->mSrid ) );
return QStringLiteral( "%1.ST_IntersectsRectPlanar(ST_GeomFromText(?, ?), ST_GeomFromText(?, ?)) = 1" )
.arg( QgsHanaUtils::quotedIdentifier( mSource->mGeometryColumn ) );
}

bool QgsHanaFeatureIterator::prepareOrderBy( const QList<QgsFeatureRequest::OrderByClause> &orderBys )
Expand Down Expand Up @@ -322,7 +322,7 @@ QString QgsHanaFeatureIterator::buildSqlQuery( const QgsFeatureRequest &request
QString sqlFilter;
// Set spatial filter
if ( !( filterRect.isNull() || filterRect.isEmpty() ) && mSource->isSpatial() && mHasGeometryColumn )
sqlFilter = getBBOXFilter( filterRect, QgsHanaUtils::toHANAVersion( mConnection->getDatabaseVersion() ) );
sqlFilter = getBBOXFilter( QgsHanaUtils::toHANAVersion( mConnection->getDatabaseVersion() ) );

if ( !mSource->mQueryWhereClause.isEmpty() )
sqlFilter = andWhereClauses( sqlFilter, mSource->mQueryWhereClause );
Expand Down
2 changes: 1 addition & 1 deletion src/providers/hana/qgshanafeatureiterator.h
Expand Up @@ -74,7 +74,7 @@ class QgsHanaFeatureIterator : public QgsAbstractFeatureIteratorFromSource<QgsHa
bool prepareOrderBy( const QList<QgsFeatureRequest::OrderByClause> &orderBys ) override;

QString buildSqlQuery( const QgsFeatureRequest &request );
QString getBBOXFilter( const QgsRectangle &bbox, const QVersionNumber &dbVersion ) const;
QString getBBOXFilter( const QVersionNumber &dbVersion ) const;

private:
QgsHanaConnectionRef mConnection;
Expand Down
4 changes: 0 additions & 4 deletions src/providers/hana/qgshanaproviderconnection.h
Expand Up @@ -23,14 +23,10 @@
class QgsHanaProviderConnection : public QgsAbstractDatabaseProviderConnection
{
public:

QgsHanaProviderConnection( const QString &name );
QgsHanaProviderConnection( const QString &uri, const QVariantMap &configuration );

// QgsAbstractProviderConnection interface

public:

void createVectorTable( const QString &schema,
const QString &name,
const QgsFields &fields,
Expand Down
1 change: 1 addition & 0 deletions src/providers/hana/qgshanaresultset.h
Expand Up @@ -40,6 +40,7 @@ class QgsHanaResultSet
{
private:
friend class QgsHanaConnection;

private:
QgsHanaResultSet( ResultSetRef &&resultSet );

Expand Down

0 comments on commit 238db50

Please sign in to comment.