Skip to content

Commit

Permalink
Support for Capability::RenameSchema in HANA provider
Browse files Browse the repository at this point in the history
  • Loading branch information
Maksim Rylov authored and mrylov committed Dec 7, 2020
1 parent 564420c commit a845995
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 10 deletions.
6 changes: 3 additions & 3 deletions src/providers/hana/qgshanaconnection.cpp
Expand Up @@ -103,9 +103,9 @@ QgsHanaConnection *QgsHanaConnection::createConnection( const QgsDataSourceUri &
conn->setAutoCommit( false );
QString errorMessage = "";

auto connect = [&]( odbc::ConnectionRef & conn,
const QgsDataSourceUri & uri,
QString & errorMessage )
auto connect = []( odbc::ConnectionRef & conn,
const QgsDataSourceUri & uri,
QString & errorMessage )
{
try
{
Expand Down
2 changes: 1 addition & 1 deletion src/providers/hana/qgshanaprovider.cpp
Expand Up @@ -1159,7 +1159,7 @@ bool QgsHanaProvider::isSrsRoundEarth( int srsId ) const
QString sql = QStringLiteral( "SELECT ROUND_EARTH FROM SYS.ST_SPATIAL_REFERENCE_SYSTEMS WHERE SRS_ID = ?" );
QgsHanaConnectionRef conn( mUri );
QVariant roundEarth = conn->executeScalar( sql, { srsId} );
return roundEarth.toString() == "TRUE";
return roundEarth.toString() == QLatin1String( "TRUE" );
}

int QgsHanaProvider::readSrid()
Expand Down
22 changes: 16 additions & 6 deletions src/providers/hana/qgshanaproviderconnection.cpp
Expand Up @@ -52,15 +52,18 @@ void QgsHanaProviderConnection::setCapabilities()
/*
* Capability::DropSchema | CREATE SCHEMA from SYSTEMPRIVILEGE
* Capability::CreateSchema | CREATE SCHEMA from SYSTEMPRIVILEGE
* Capability::CreateVectorTable | TODO if possible
* Capability::DropVectorTable | TODO if possible
* Capability::RenameVectorTable | TODO if possible
* Capability::ExecuteSql | TODO if possible
* Capability::SqlLayers | TODO if possible
* Capability::CreateVectorTable | Note
* Capability::DropVectorTable | Note
* Capability::RenameVectorTable | Note
* Capability::ExecuteSql | Note
* Capability::SqlLayers | Note
* Capability::Tables | CATALOG READ or DATA ADMIN from SYSTEMPRIVILEGE
* Capability::Schemas | CATALOG READ or DATA ADMIN from SYSTEMPRIVILEGE
* Capability::TableExists | CATALOG READ or DATA ADMIN from SYSTEMPRIVILEGE
* Capability::Spatial, | Always TRUE
*
* Note: Everyone has this privilege, but the execution might fail if the user does
* not have the necessary privileges for one of the objects in the query.
*/

mCapabilities =
Expand All @@ -82,7 +85,7 @@ void QgsHanaProviderConnection::setCapabilities()
{
QString privType = rsPrivileges->getString( 1 );
if ( privType == QStringLiteral( "CREATE SCHEMA" ) )
mCapabilities |= Capability::CreateSchema | Capability::DropSchema;
mCapabilities |= Capability::CreateSchema | Capability::DropSchema | Capability::RenameSchema;
else if ( privType == QStringLiteral( "CATALOG READ" ) || privType == QStringLiteral( "DATA ADMIN" ) )
mCapabilities |= Capability::Schemas | Capability::Tables | Capability::TableExists;
}
Expand Down Expand Up @@ -179,6 +182,13 @@ void QgsHanaProviderConnection::dropSchema( const QString &name, bool force ) c
.arg( force ? QStringLiteral( "CASCADE" ) : QString() ) );
}

void QgsHanaProviderConnection::renameSchema( const QString &name, const QString &newName ) const
{
checkCapability( Capability::RenameSchema );
executeSqlStatement( QStringLiteral( "RENAME SCHEMA %1 TO %2" )
.arg( QgsHanaUtils::quotedIdentifier( name ), QgsHanaUtils::quotedIdentifier( newName ) ) );
}

QList<QVariantList> QgsHanaProviderConnection::executeSql( const QString &sql ) const
{
checkCapability( Capability::ExecuteSql );
Expand Down
1 change: 1 addition & 0 deletions src/providers/hana/qgshanaproviderconnection.h
Expand Up @@ -42,6 +42,7 @@ class QgsHanaProviderConnection : public QgsAbstractDatabaseProviderConnection
void renameVectorTable( const QString &schema, const QString &name, const QString &newName ) const override;
void createSchema( const QString &name ) const override;
void dropSchema( const QString &name, bool force = false ) const override;
void renameSchema( const QString &name, const QString &newName ) const override;
QList<QVariantList> executeSql( const QString &sql ) const override;
QList<QgsAbstractDatabaseProviderConnection::TableProperty> tables( const QString &schema,
const TableFlags &flags = nullptr ) const override;
Expand Down

0 comments on commit a845995

Please sign in to comment.