@@ -34,6 +34,8 @@ const int QgsOracleConn::sGeomTypeSelectLimit = 100;
34
34
QgsOracleConn *QgsOracleConn::connectDb ( QgsDataSourceURI uri )
35
35
{
36
36
QString conninfo = uri.connectionInfo ();
37
+ if ( uri.hasParam ( " dbworkspace" ) )
38
+ conninfo += " dbworkspace=" + uri.param ( " dbworkspace" );
37
39
38
40
if ( sConnections .contains ( conninfo ) )
39
41
{
@@ -68,6 +70,7 @@ QgsOracleConn::QgsOracleConn( QgsDataSourceURI uri )
68
70
mDatabase = QSqlDatabase::addDatabase ( " QOCISPATIAL" , QString ( " oracle%1" ).arg ( snConnections++ ) );
69
71
mDatabase .setDatabaseName ( database );
70
72
QString options = uri.hasParam ( " dboptions" ) ? uri.param ( " dboptions" ) : " OCI_ATTR_PREFETCH_ROWS=1000" ;
73
+ QString workspace = uri.hasParam ( " dbworkspace" ) ? uri.param ( " dbworkspace" ) : QString::null;
71
74
mDatabase .setConnectOptions ( options );
72
75
mDatabase .setUserName ( uri.username () );
73
76
mDatabase .setPassword ( uri.password () );
@@ -118,6 +121,19 @@ QgsOracleConn::QgsOracleConn( QgsDataSourceURI uri )
118
121
mRef = 0 ;
119
122
return ;
120
123
}
124
+
125
+ if ( !workspace.isNull () )
126
+ {
127
+ QSqlQuery qry ( mDatabase );
128
+
129
+ if ( !qry.exec ( QString ( " BEGIN\n DBMS_WM.GotoWorkspace(%1);\n END;" ).arg ( quotedValue ( workspace ) ) ) )
130
+ {
131
+ mDatabase .close ();
132
+ QgsMessageLog::logMessage ( tr ( " Could not with to workspace %1 [%2]" ).arg ( workspace, qry.lastError ().databaseText () ), tr ( " Oracle" ) );
133
+ mRef = 0 ;
134
+ return ;
135
+ }
136
+ }
121
137
}
122
138
123
139
QgsOracleConn::~QgsOracleConn ()
@@ -713,6 +729,10 @@ QgsDataSourceURI QgsOracleConn::connUri( QString theConnName )
713
729
{
714
730
uri.setParam ( " dboptions" , settings.value ( key + " /dboptions" ).toString () );
715
731
}
732
+ if ( !settings.value ( key + " /dbworkspace" ).toString ().isEmpty () )
733
+ {
734
+ uri.setParam ( " dbworkspace" , settings.value ( key + " /dbworkspace" ).toString () );
735
+ }
716
736
717
737
return uri;
718
738
}
0 commit comments