Skip to content

Commit

Permalink
add create vector table/tableUri/dropvectorTable
Browse files Browse the repository at this point in the history
  • Loading branch information
troopa81 authored and nyalldawson committed Jan 29, 2021
1 parent 72ace46 commit ac6011d
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 13 deletions.
34 changes: 24 additions & 10 deletions src/providers/oracle/qgsoracleproviderconnection.cpp
Expand Up @@ -23,6 +23,15 @@

#include <QSqlRecord>

const QStringList CONFIGURATION_PARAMETERS
{
QStringLiteral( "geometryColumnsOnly" ),
QStringLiteral( "allowGeometrylessTables" ),
QStringLiteral( "disableInvalidGeometryHandling" ),
QStringLiteral( "saveUsername" ),
QStringLiteral( "savePassword" ),
};

QgsOracleProviderConnection::QgsOracleProviderConnection( const QString &name )
: QgsAbstractDatabaseProviderConnection( name )
{
Expand All @@ -31,6 +40,19 @@ QgsOracleProviderConnection::QgsOracleProviderConnection( const QString &name )
const QRegularExpression removePartsRe { R"raw(\s*sql=\s*|\s*table=""\s*)raw" };
setUri( QgsOracleConn::connUri( name ).uri().replace( removePartsRe, QString() ) );
setDefaultCapabilities();

// load existing configuration
QgsSettings settings;
QVariantMap configuration;
for ( const auto &p : CONFIGURATION_PARAMETERS )
{
const QVariant v = settings.value( QStringLiteral( "/Oracle/connections/%1/%2" ).arg( name, p ) );
if ( v.isValid() )
{
configuration.insert( p, v );
}
}
setConfiguration( configuration );
}

QgsOracleProviderConnection::QgsOracleProviderConnection( const QString &uri, const QVariantMap &configuration ):
Expand Down Expand Up @@ -103,16 +125,7 @@ void QgsOracleProviderConnection::store( const QString &name ) const
settings.setValue( "dboptions", dsUri.param( "dboptions" ) );

// From configuration
static const QStringList configurationParameters
{
QStringLiteral( "allowGeometrylessTables" ),
QStringLiteral( "geometryColumnsOnly" ),
QStringLiteral( "onlyExistingTypes" ),
QStringLiteral( "savePassword" ),
QStringLiteral( "saveUsername" ),
QStringLiteral( "userTablesOnly" ),
};
for ( const auto &p : configurationParameters )
for ( const auto &p : CONFIGURATION_PARAMETERS )
{
if ( configuration().contains( p ) )
{
Expand Down Expand Up @@ -264,6 +277,7 @@ QString QgsOracleProviderConnection::tableUri( const QString &schema, const QStr
QgsDataSourceUri dsUri( uri() );
dsUri.setTable( name );
dsUri.setSchema( schema );
dsUri.setGeometryColumn( tableInfo.geometryColumn() );
return dsUri.uri( false );
}

Expand Down
11 changes: 11 additions & 0 deletions src/providers/oracle/qgsoracleproviderconnection.h
Expand Up @@ -28,9 +28,20 @@ class QgsOracleProviderConnection : public QgsAbstractDatabaseProviderConnection

// QgsAbstractProviderConnection interface

void createVectorTable( const QString &schema,
const QString &name,
const QgsFields &fields,
QgsWkbTypes::Type wkbType,
const QgsCoordinateReferenceSystem &srs, bool overwrite,
const QMap<QString, QVariant> *options ) const override;

QString tableUri( const QString &schema, const QString &name ) const override;
void dropVectorTable( const QString &schema, const QString &name ) const override;
void createSchema( const QString &name ) const override;
void dropSchema( const QString &name, bool force = false ) const override;

QList<QgsAbstractDatabaseProviderConnection::TableProperty> tables( const QString &schema,
const TableFlags &flags = TableFlags() ) const override;
QStringList schemas( ) const override;
void store( const QString &name ) const override;
void remove( const QString &name ) const override;
Expand Down
4 changes: 2 additions & 2 deletions tests/src/python/test_qgsproviderconnection_base.py
Expand Up @@ -177,8 +177,8 @@ def _test_operations(self, md, conn):
self.assertFalse('myUtf8\U0001f604Table' in table_names)
self.assertTrue('myNewTable' in table_names)

# insert something, because otherwise MSSQL cannot guess
if self.providerKey in ['hana', 'mssql']:
# insert something, because otherwise some databases cannot guess
if self.providerKey in ['hana', 'mssql', 'oracle']:
f = QgsFeature(fields)
f.setGeometry(QgsGeometry.fromWkt('LineString (-72.345 71.987, -80 80)'))
vl = QgsVectorLayer(conn.tableUri('myNewSchema', 'myNewTable'), 'vl', self.providerKey)
Expand Down
2 changes: 1 addition & 1 deletion tests/src/python/test_qgsproviderconnection_oracle.py
Expand Up @@ -32,7 +32,7 @@ class TestPyQgsProviderConnectionOracle(unittest.TestCase, TestPyQgsProviderConn

# there is no service for oracle provider test so we need to save user and password
# to keep them when storing/loading connections in parent class _test_save_load method
configuration = {"saveUsername": True, "savePassword": True}
configuration = {"saveUsername": True, "savePassword": True, "geometryColumnsOnly": True}

@classmethod
def setUpClass(cls):
Expand Down

0 comments on commit ac6011d

Please sign in to comment.