@@ -173,34 +173,37 @@ QStringList QgsOracleConn::pkCandidates( QString ownerName, QString viewName )
173173 return cols;
174174}
175175
176- bool QgsOracleConn::tableInfo ( bool geometryTablesOnly , bool userTablesOnly, bool allowGeometrylessTables )
176+ bool QgsOracleConn::tableInfo ( bool geometryColumnsOnly , bool userTablesOnly, bool allowGeometrylessTables )
177177{
178178 QgsDebugMsg ( " Entering." );
179179
180180 mLayersSupported .clear ();
181181
182182 QString sql, delim;
183183
184- sql = QString ( " SELECT c.owner,c.table_name,c.column_name,%1,t.table_name AS isview"
185- " FROM %2 c"
186- " LEFT OUTER JOIN all_tables t ON c.owner=t.owner AND c.table_name=t.table_name%3" )
187- .arg ( geometryTablesOnly ? " c.srid" : " NULL AS srid" )
188- .arg ( geometryTablesOnly ? " all_sdo_geom_metadata" : " all_tab_columns" )
189- .arg ( geometryTablesOnly ? " " : " WHERE c.data_type='SDO_GEOMETRY' AND c.data_type_owner='MDSYS'" );
184+ QString
185+ prefix ( userTablesOnly ? " user" : " all" ),
186+ owner ( userTablesOnly ? " user AS owner" : " c.owner" );
187+
188+ sql = QString ( " SELECT %1,c.table_name,c.column_name,%2,t.table_name AS isview"
189+ " FROM %3_%4 c"
190+ " LEFT OUTER JOIN %3_tables t ON c.table_name=t.table_name%5%6" )
191+ .arg ( owner )
192+ .arg ( geometryColumnsOnly ? " c.srid" : " NULL AS srid" )
193+ .arg ( prefix )
194+ .arg ( geometryColumnsOnly ? " sdo_geom_metadata" : " tab_columns" )
195+ .arg ( userTablesOnly ? " " : " AND c.owner=t.owner" )
196+ .arg ( geometryColumnsOnly ? " " : " WHERE c.data_type='SDO_GEOMETRY' AND c.data_type_owner='MDSYS'" );
190197
191198 if ( allowGeometrylessTables )
192199 {
193- sql += " UNION SELECT owner,table_name,NULL AS column_name,NULL AS srid,table_name AS isview FROM all_tables"
194- " UNION SELECT owner,view_name,NULL AS column_name,NULL AS srid,NULL AS isview FROM all_views" ;
200+ sql += QString ( " UNION SELECT %1,table_name,NULL AS column_name,NULL AS srid,table_name AS isview FROM %2_tables c"
201+ " UNION SELECT %1,view_name,NULL AS column_name,NULL AS srid,NULL AS isview FROM %2_views c" )
202+ .arg ( owner ).arg ( prefix );
195203 }
196204
197205 sql = " SELECT * FROM (" + sql + " )" ;
198206
199- if ( userTablesOnly )
200- {
201- sql += " WHERE owner=user" ;
202- }
203-
204207 sql += " ORDER BY owner,isview,table_name,column_name" ;
205208
206209 QSqlQuery qry ( mDatabase );
@@ -221,6 +224,12 @@ bool QgsOracleConn::tableInfo( bool geometryTablesOnly, bool userTablesOnly, boo
221224 layerProperty.isView = qry.value ( 4 ).isNull ();
222225 layerProperty.pkCols .clear ();
223226
227+ if ( allowGeometrylessTables )
228+ {
229+ layerProperty.types << QGis::WKBNoGeometry;
230+ layerProperty.srids << 0 ;
231+ }
232+
224233 mLayersSupported << layerProperty;
225234 }
226235
@@ -313,7 +322,11 @@ QString QgsOracleConn::fieldExpression( const QgsField &fld )
313322
314323void QgsOracleConn::retrieveLayerTypes ( QgsOracleLayerProperty &layerProperty, bool useEstimatedMetadata )
315324{
325+ if ( layerProperty.geometryColName .isEmpty () )
326+ return ;
327+
316328 QgsDebugMsg ( " entering: " + layerProperty.toString () );
329+
317330 QString table;
318331 QString where;
319332
@@ -569,7 +582,7 @@ void QgsOracleConn::deleteConnection( QString theConnName )
569582 settings.remove ( key + " /database" );
570583 settings.remove ( key + " /username" );
571584 settings.remove ( key + " /password" );
572- settings.remove ( key + " /publicOnly " );
585+ settings.remove ( key + " /userTablesOnly " );
573586 settings.remove ( key + " /geometryColumnsOnly" );
574587 settings.remove ( key + " /allowGeometrylessTables" );
575588 settings.remove ( key + " /estimatedMetadata" );
@@ -635,12 +648,24 @@ bool QgsOracleConn::userTablesOnly( QString theConnName )
635648 return settings.value ( " /Oracle/connections/" + theConnName + " /userTablesOnly" , false ).toBool ();
636649}
637650
651+ bool QgsOracleConn::geometryColumnsOnly ( QString theConnName )
652+ {
653+ QSettings settings;
654+ return settings.value ( " /Oracle/connections/" + theConnName + " /geometryColumnsOnly" , false ).toBool ();
655+ }
656+
638657bool QgsOracleConn::allowGeometrylessTables ( QString theConnName )
639658{
640659 QSettings settings;
641660 return settings.value ( " /Oracle/connections/" + theConnName + " /allowGeometrylessTables" , false ).toBool ();
642661}
643662
663+ bool QgsOracleConn::estimatedMetadata ( QString theConnName )
664+ {
665+ QSettings settings;
666+ return settings.value ( " /Oracle/connections/" + theConnName + " /estimatedMetadata" , false ).toBool ();
667+ }
668+
644669QString QgsOracleConn::databaseName ( QString database, QString host, QString port )
645670{
646671 QString db;
0 commit comments