Skip to content

Instantly share code, notes, and snippets.

@jef-n
Last active March 21, 2016 13:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jef-n/77c8a9b61791fe1b3df3 to your computer and use it in GitHub Desktop.
Save jef-n/77c8a9b61791fe1b3df3 to your computer and use it in GitHub Desktop.
diff --git a/src/gui/qgsmanageconnectionsdialog.cpp b/src/gui/qgsmanageconnectionsdialog.cpp
index 22a338d..4a10f04 100644
--- a/src/gui/qgsmanageconnectionsdialog.cpp
+++ b/src/gui/qgsmanageconnectionsdialog.cpp
@@ -496,6 +496,7 @@ QDomDocument QgsManageConnectionsDialog::saveOracleConnections( const QStringLis
el.setAttribute( "port", settings.value( path + "/port", "" ).toString() );
el.setAttribute( "database", settings.value( path + "/database", "" ).toString() );
el.setAttribute( "dboptions", settings.value( path + "/dboptions", "" ).toString() );
+ el.setAttribute( "dbworkspace", settings.value( path + "/dbworkspace", "" ).toString() );
el.setAttribute( "estimatedMetadata", settings.value( path + "/estimatedMetadata", "0" ).toString() );
el.setAttribute( "userTablesOnly", settings.value( path + "/userTablesOnly", "0" ).toString() );
el.setAttribute( "geometryColumnsOnly", settings.value( path + "/geometryColumnsOnly", "0" ).toString() );
@@ -940,6 +941,7 @@ void QgsManageConnectionsDialog::loadOracleConnections( const QDomDocument &doc,
settings.setValue( "/port", child.attribute( "port" ) );
settings.setValue( "/database", child.attribute( "database" ) );
settings.setValue( "/dboptions", child.attribute( "dboptions" ) );
+ settings.setValue( "/dbworkspace", child.attribute( "dbworkspace" ) );
settings.setValue( "/estimatedMetadata", child.attribute( "estimatedMetadata" ) );
settings.setValue( "/userTablesOnly", child.attribute( "userTablesOnly" ) );
settings.setValue( "/geometryColumnsOnly", child.attribute( "geometryColumnsOnly" ) );
diff --git a/src/providers/oracle/qgsoracleconn.cpp b/src/providers/oracle/qgsoracleconn.cpp
index d081bd4..eaeb72f 100644
--- a/src/providers/oracle/qgsoracleconn.cpp
+++ b/src/providers/oracle/qgsoracleconn.cpp
@@ -68,6 +68,7 @@ QgsOracleConn::QgsOracleConn( QgsDataSourceURI uri )
mDatabase = QSqlDatabase::addDatabase( "QOCISPATIAL", QString( "oracle%1" ).arg( snConnections++ ) );
mDatabase.setDatabaseName( database );
QString options = uri.hasParam( "dboptions" ) ? uri.param( "dboptions" ) : "OCI_ATTR_PREFETCH_ROWS=1000";
+ QString workspace = uri.hasParam( "dbworkspace" ) ? uri.param( "dbworkspace" ) : QString::null;
mDatabase.setConnectOptions( options );
mDatabase.setUserName( uri.username() );
mDatabase.setPassword( uri.password() );
@@ -118,6 +119,13 @@ QgsOracleConn::QgsOracleConn( QgsDataSourceURI uri )
mRef = 0;
return;
}
+
+ if ( !workspace.isNull() )
+ {
+ QSqlQuery qry( mDatabase );
+ if( !exec( qry, QString( "BEGIN\nGotoWorkspace(%1);\nEND;" ).arg( quotedValue( workspace ) ) ) )
+ QgsMessageLog::logMessage( tr( "Switch to workspace %1 failed" ).arg( workspace ), tr( "Oracle" ) );
+ }
}
QgsOracleConn::~QgsOracleConn()
diff --git a/src/providers/oracle/qgsoraclenewconnection.cpp b/src/providers/oracle/qgsoraclenewconnection.cpp
index 0443cf5..995d4db 100644
--- a/src/providers/oracle/qgsoraclenewconnection.cpp
+++ b/src/providers/oracle/qgsoraclenewconnection.cpp
@@ -46,6 +46,7 @@ QgsOracleNewConnection::QgsOracleNewConnection( QWidget *parent, const QString&
}
txtPort->setText( port );
txtOptions->setText( settings.value( key + "/dboptions" ).toString() );
+ txtWorkspace->setText( settings.value( key + "/dbworkspace" ).toString() );
cb_userTablesOnly->setChecked( settings.value( key + "/userTablesOnly", false ).toBool() );
cb_geometryColumnsOnly->setChecked( settings.value( key + "/geometryColumnsOnly", true ).toBool() );
cb_allowGeometrylessTables->setChecked( settings.value( key + "/allowGeometrylessTables", false ).toBool() );
@@ -128,6 +129,7 @@ void QgsOracleNewConnection::accept()
settings.setValue( baseKey + "/saveUsername", chkStoreUsername->isChecked() ? "true" : "false" );
settings.setValue( baseKey + "/savePassword", chkStorePassword->isChecked() ? "true" : "false" );
settings.setValue( baseKey + "/dboptions", txtOptions->text() );
+ settings.setValue( baseKey + "/dbworkspace", txtWorkspace->text() );
QDialog::accept();
}
@@ -138,6 +140,8 @@ void QgsOracleNewConnection::on_btnConnect_clicked()
uri.setConnection( txtHost->text(), txtPort->text(), txtDatabase->text(), txtUsername->text(), txtPassword->text() );
if ( !txtOptions->text().isEmpty() )
uri.setParam( "dboptions", txtOptions->text() );
+ if ( !txtWorkspace->text().isEmpty() )
+ uri.setParam( "dbworkspace", txtWorkspace->text() );
QgsOracleConn *conn = QgsOracleConnPool::instance()->acquireConnection( uri.connectionInfo() );
diff --git a/src/ui/qgsoraclenewconnectionbase.ui b/src/ui/qgsoraclenewconnectionbase.ui
index 674c582..126a7cc6 100644
--- a/src/ui/qgsoraclenewconnectionbase.ui
+++ b/src/ui/qgsoraclenewconnectionbase.ui
@@ -235,6 +235,23 @@
</property>
</widget>
</item>
+ <item row="7" column="1" colspan="2">
+ <widget class="QLineEdit" name="txtWorkspace">
+ <property name="echoMode">
+ <enum>QLineEdit::Normal</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="0">
+ <widget class="QLabel" name="TextLabel3_4">
+ <property name="text">
+ <string>Workspace</string>
+ </property>
+ <property name="buddy">
+ <cstring>txtPassword</cstring>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
</item>
@@ -249,6 +266,7 @@
<tabstop>txtUsername</tabstop>
<tabstop>txtPassword</tabstop>
<tabstop>txtOptions</tabstop>
+ <tabstop>txtWorkspace</tabstop>
<tabstop>chkStoreUsername</tabstop>
<tabstop>chkStorePassword</tabstop>
<tabstop>btnConnect</tabstop>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment