Skip to content

Commit 831f99a

Browse files
committedJan 14, 2013
oracle provider improvements:
- improve srs lookup - insert crs to oracle table on import, if not existent (requires INSERT privilege on MDSYS.SDO_COORD_REF_SYSTEM) - move table lookup into thread - use QgsMessageOutput for import errors (also in postgres and spatialite) - german translation update
1 parent fcb5045 commit 831f99a

15 files changed

+1217
-1144
lines changed
 

‎doc/TRANSLATORS

Lines changed: 33 additions & 33 deletions
Large diffs are not rendered by default.

‎i18n/qgis_de.ts

Lines changed: 838 additions & 839 deletions
Large diffs are not rendered by default.

‎src/providers/oracle/qgsoraclecolumntypethread.cpp

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,39 +16,51 @@ email : jef at norbit dot de
1616
***************************************************************************/
1717

1818
#include "qgsoraclecolumntypethread.h"
19+
#include "qgslogger.h"
1920

2021
#include <QMetaType>
2122

22-
QgsOracleColumnTypeThread::QgsOracleColumnTypeThread( QgsOracleConn *conn, bool useEstimatedMetaData )
23+
QgsOracleColumnTypeThread::QgsOracleColumnTypeThread( QString name, bool useEstimatedMetadata )
2324
: QThread()
24-
, mConn( conn )
25-
, mUseEstimatedMetadata( useEstimatedMetaData )
25+
, mName( name )
26+
, mUseEstimatedMetadata( useEstimatedMetadata )
2627
{
2728
qRegisterMetaType<QgsOracleLayerProperty>( "QgsOracleLayerProperty" );
2829
}
2930

30-
void QgsOracleColumnTypeThread::addGeometryColumn( QgsOracleLayerProperty layerProperty )
31-
{
32-
layerProperties << layerProperty;
33-
}
34-
3531
void QgsOracleColumnTypeThread::stop()
3632
{
3733
mStopped = true;
3834
}
3935

4036
void QgsOracleColumnTypeThread::run()
4137
{
42-
if ( !mConn )
38+
QgsDataSourceURI uri = QgsOracleConn::connUri( mName );
39+
QgsOracleConn *conn = QgsOracleConn::connectDb( uri.connectionInfo() );
40+
if ( !conn )
41+
{
42+
QgsDebugMsg( "Connection failed - " + uri.connectionInfo() );
4343
return;
44+
}
4445

4546
mStopped = false;
4647

48+
QgsDebugMsg( "retrieving supported layers - connection " + mName );
49+
QVector<QgsOracleLayerProperty> layerProperties;
50+
if ( !conn->supportedLayers( layerProperties,
51+
QgsOracleConn::geometryColumnsOnly( mName ),
52+
QgsOracleConn::userTablesOnly( mName ),
53+
QgsOracleConn::allowGeometrylessTables( mName ) ) ||
54+
layerProperties.isEmpty() )
55+
{
56+
return;
57+
}
58+
4759
foreach ( QgsOracleLayerProperty layerProperty, layerProperties )
4860
{
4961
if ( !mStopped )
5062
{
51-
mConn->retrieveLayerTypes( layerProperty, mUseEstimatedMetadata );
63+
conn->retrieveLayerTypes( layerProperty, mUseEstimatedMetadata );
5264
}
5365

5466
if ( mStopped )
@@ -61,6 +73,5 @@ void QgsOracleColumnTypeThread::run()
6173
emit setLayerType( layerProperty );
6274
}
6375

64-
mConn->disconnect();
65-
mConn = 0;
76+
conn->disconnect();
6677
}

‎src/providers/oracle/qgsoraclecolumntypethread.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class QgsOracleColumnTypeThread : public QThread
2828
{
2929
Q_OBJECT
3030
public:
31-
QgsOracleColumnTypeThread( QgsOracleConn *conn, bool useEstimatedMetaData );
31+
QgsOracleColumnTypeThread( QString connName, bool useEstimatedMetaData );
3232

3333
// These functions get the layer types and pass that information out
3434
// by emitting the setLayerType() signal.
@@ -38,13 +38,12 @@ class QgsOracleColumnTypeThread : public QThread
3838
void setLayerType( QgsOracleLayerProperty layerProperty );
3939

4040
public slots:
41-
void addGeometryColumn( QgsOracleLayerProperty layerProperty );
4241
void stop();
4342

4443
private:
4544
QgsOracleColumnTypeThread() {}
4645

47-
QgsOracleConn *mConn;
46+
QString mName;
4847
bool mUseEstimatedMetadata;
4948
bool mStopped;
5049
QList<QgsOracleLayerProperty> layerProperties;

‎src/providers/oracle/qgsoracleconn.cpp

Lines changed: 40 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

314323
void 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+
638657
bool 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+
644669
QString QgsOracleConn::databaseName( QString database, QString host, QString port )
645670
{
646671
QString db;

‎src/providers/oracle/qgsoracleconn.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,9 @@ class QgsOracleConn : public QThread
147147
static void setSelectedConnection( QString theConnName );
148148
static QgsDataSourceURI connUri( QString theConnName );
149149
static bool userTablesOnly( QString theConnName );
150+
static bool geometryColumnsOnly( QString theConnName );
150151
static bool allowGeometrylessTables( QString theConnName );
152+
static bool estimatedMetadata( QString theConnName );
151153
static void deleteConnection( QString theConnName );
152154
static QString databaseName( QString database, QString host, QString port );
153155

‎src/providers/oracle/qgsoracledataitems.cpp

Lines changed: 51 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "qgslogger.h"
2121
#include "qgsdatasourceuri.h"
2222
#include "qgsapplication.h"
23+
#include "qgsmessageoutput.h"
2324

2425
#include <QMessageBox>
2526
#include <QProgressDialog>
@@ -78,73 +79,38 @@ void QgsOracleConnectionItem::refresh()
7879
QVector<QgsDataItem*> QgsOracleConnectionItem::createChildren()
7980
{
8081
QgsDebugMsg( "Entered" );
81-
QVector<QgsDataItem*> children;
8282
QgsDataSourceURI uri = QgsOracleConn::connUri( mName );
8383

8484
mOwnerMap.clear();
8585

86-
mConn = QgsOracleConn::connectDb( uri.connectionInfo() );
87-
if ( !mConn )
88-
return children;
89-
90-
QVector<QgsOracleLayerProperty> layerProperties;
91-
if ( !mConn->supportedLayers( layerProperties,
92-
QgsOracleConn::userTablesOnly( mName ),
93-
QgsOracleConn::allowGeometrylessTables( mName ) ) )
94-
{
95-
children.append( new QgsErrorItem( this, tr( "Failed to retrieve layers" ), mPath + "/error" ) );
96-
return children;
97-
}
98-
99-
if ( layerProperties.isEmpty() )
100-
{
101-
children.append( new QgsErrorItem( this, tr( "No layers found." ), mPath + "/error" ) );
102-
return children;
103-
}
104-
10586
stop();
10687

107-
foreach ( QgsOracleLayerProperty layerProperty, layerProperties )
88+
if ( !mColumnTypeThread )
10889
{
109-
QgsOracleOwnerItem *ownerItem = mOwnerMap.value( layerProperty.ownerName, 0 );
110-
if ( !ownerItem )
111-
{
112-
ownerItem = new QgsOracleOwnerItem( this, layerProperty.ownerName, mPath + "/" + layerProperty.ownerName );
113-
children.append( ownerItem );
114-
mOwnerMap[ layerProperty.ownerName ] = ownerItem;
115-
}
90+
mColumnTypeThread = new QgsOracleColumnTypeThread( mName, true /* useEstimatedMetadata */ );
11691

117-
if ( !layerProperty.geometryColName.isNull() )
118-
{
119-
if ( layerProperty.types.contains( QGis::WKBUnknown ) || layerProperty.srids.isEmpty() )
120-
{
121-
if ( !mColumnTypeThread )
122-
{
123-
QgsOracleConn *conn = QgsOracleConn::connectDb( uri.connectionInfo() );
124-
if ( conn )
125-
{
126-
mColumnTypeThread = new QgsOracleColumnTypeThread( conn, true /* use estimated metadata */ );
127-
128-
connect( mColumnTypeThread, SIGNAL( setLayerType( QgsOracleLayerProperty ) ),
129-
this, SLOT( setLayerType( QgsOracleLayerProperty ) ) );
130-
connect( this, SIGNAL( addGeometryColumn( QgsOracleLayerProperty ) ),
131-
mColumnTypeThread, SLOT( addGeometryColumn( QgsOracleLayerProperty ) ) );
132-
}
133-
}
134-
135-
emit addGeometryColumn( layerProperty );
136-
}
137-
}
138-
else
139-
{
140-
ownerItem->addLayer( layerProperty );
141-
}
92+
connect( mColumnTypeThread, SIGNAL( setLayerType( QgsOracleLayerProperty ) ),
93+
this, SLOT( setLayerType( QgsOracleLayerProperty ) ) );
94+
connect( mColumnTypeThread, SIGNAL( started() ), this, SLOT( threadStarted() ) );
95+
connect( mColumnTypeThread, SIGNAL( finished() ), this, SLOT( threadFinished() ) );
14296
}
14397

14498
if ( mColumnTypeThread )
14599
mColumnTypeThread->start();
146100

147-
return children;
101+
return QVector<QgsDataItem*>();
102+
}
103+
104+
void QgsOracleConnectionItem::threadStarted()
105+
{
106+
QgsDebugMsg( "Entering." );
107+
qApp->setOverrideCursor( Qt::BusyCursor );
108+
}
109+
110+
void QgsOracleConnectionItem::threadFinished()
111+
{
112+
QgsDebugMsg( "Entering." );
113+
qApp->restoreOverrideCursor();
148114
}
149115

150116
void QgsOracleConnectionItem::setLayerType( QgsOracleLayerProperty layerProperty )
@@ -154,21 +120,26 @@ void QgsOracleConnectionItem::setLayerType( QgsOracleLayerProperty layerProperty
154120
QgsOracleOwnerItem *ownerItem = mOwnerMap.value( layerProperty.ownerName, 0 );
155121
if ( !ownerItem )
156122
{
157-
QgsDebugMsg( QString( "owner item for %1 not found." ).arg( layerProperty.ownerName ) );
158-
return;
123+
ownerItem = new QgsOracleOwnerItem( this, layerProperty.ownerName, mPath + "/" + layerProperty.ownerName );
124+
QgsDebugMsg( "add owner item: " + layerProperty.ownerName );
125+
addChildItem( ownerItem, true );
126+
mOwnerMap[ layerProperty.ownerName ] = ownerItem;
159127
}
160128

161129
for ( int i = 0 ; i < layerProperty.size(); i++ )
162130
{
163131
QGis::WkbType wkbType = layerProperty.types.at( i );
164132
if ( wkbType == QGis::WKBUnknown )
165133
{
166-
// skip any geometry entry
134+
QgsDebugMsg( "skip unknown geometry type" );
167135
continue;
168136
}
169137

138+
QgsDebugMsg( "ADD LAYER" );
170139
ownerItem->addLayer( layerProperty.at( i ) );
171140
}
141+
142+
QgsDebugMsg( "Leaving" );
172143
}
173144

174145
bool QgsOracleConnectionItem::equal( const QgsDataItem *other )
@@ -179,7 +150,7 @@ bool QgsOracleConnectionItem::equal( const QgsDataItem *other )
179150
}
180151

181152
const QgsOracleConnectionItem *o = qobject_cast<const QgsOracleConnectionItem *>( other );
182-
return ( mPath == o->mPath && mName == o->mName && o->connection() == connection() );
153+
return ( mPath == o->mPath && mName == o->mName && o->parent() == parent() );
183154
}
184155

185156
QList<QAction*> QgsOracleConnectionItem::actions()
@@ -194,6 +165,10 @@ QList<QAction*> QgsOracleConnectionItem::actions()
194165
connect( actionDelete, SIGNAL( triggered() ), this, SLOT( deleteConnection() ) );
195166
lst.append( actionDelete );
196167

168+
QAction* actionRefresh = new QAction( tr( "Refresh" ), this );
169+
connect( actionRefresh, SIGNAL( triggered() ), this, SLOT( refreshConnection() ) );
170+
lst.append( actionRefresh );
171+
197172
return lst;
198173
}
199174

@@ -215,6 +190,12 @@ void QgsOracleConnectionItem::deleteConnection()
215190
mParent->refresh();
216191
}
217192

193+
void QgsOracleConnectionItem::refreshConnection()
194+
{
195+
// the parent should be updated
196+
refresh();
197+
}
198+
218199
bool QgsOracleConnectionItem::handleDrop( const QMimeData * data, Qt::DropAction )
219200
{
220201
if ( !QgsMimeDataUtils::isUriList( data ) )
@@ -250,7 +231,7 @@ bool QgsOracleConnectionItem::handleDrop( const QMimeData * data, Qt::DropAction
250231
uri.setDataSource( QString(), u.name.left( 30 ).toUpper(), "QGS_GEOMETRY" );
251232
uri.setWkbType( srcLayer->wkbType() );
252233
QString authid = srcLayer->crs().authid();
253-
if( authid.startsWith( "EPSG:", Qt::CaseInsensitive ) )
234+
if ( authid.startsWith( "EPSG:", Qt::CaseInsensitive ) )
254235
{
255236
uri.setSrid( authid.mid( 5 ) );
256237
}
@@ -281,15 +262,17 @@ bool QgsOracleConnectionItem::handleDrop( const QMimeData * data, Qt::DropAction
281262

282263
if ( hasError )
283264
{
284-
QMessageBox::warning( 0, tr( "Import to Oracle database" ), tr( "Failed to import some layers!\n\n" ) + importResults.join( "\n" ) );
265+
QgsMessageOutput *output = QgsMessageOutput::createMessageOutput();
266+
output->setTitle( tr( "Import to Oracle database" ) );
267+
output->setMessage( tr( "Failed to import some layers!\n\n" ) + importResults.join( "\n" ), QgsMessageOutput::MessageText );
268+
output->showMessage();
285269
}
286270
else
287271
{
288272
QMessageBox::information( 0, tr( "Import to Oracle database" ), tr( "Import was successful." ) );
273+
refresh();
289274
}
290275

291-
refresh();
292-
293276
return true;
294277
}
295278

@@ -328,29 +311,27 @@ void QgsOracleLayerItem::deleteLayer()
328311
else
329312
{
330313
QMessageBox::information( 0, tr( "Delete layer" ), tr( "Layer deleted successfully." ) );
331-
mParent->refresh();
314+
deleteLater();
332315
}
333316
}
334317

335318
QString QgsOracleLayerItem::createUri()
336319
{
337-
QString pkColName = mLayerProperty.pkCols.size() > 0 ? mLayerProperty.pkCols.at( 0 ) : QString::null;
320+
Q_ASSERT( mLayerProperty.size() == 1 );
338321

339322
QgsOracleConnectionItem *connItem = qobject_cast<QgsOracleConnectionItem *>( parent() ? parent()->parent() : 0 );
340-
341323
if ( !connItem )
342324
{
343325
QgsDebugMsg( "connection item not found." );
344326
return QString::null;
345327
}
346328

347-
QgsDebugMsg( QString( "connInfo: %1" ).arg( connItem->connection()->connInfo() ) );
348-
349-
QgsDataSourceURI uri( connItem->connection()->connInfo() );
329+
QgsDataSourceURI uri = QgsOracleConn::connUri( connItem->name() );
350330
uri.setDataSource( mLayerProperty.ownerName, mLayerProperty.tableName, mLayerProperty.geometryColName, mLayerProperty.sql, QString::null );
351-
Q_ASSERT( mLayerProperty.size() == 1 );
352331
uri.setSrid( QString::number( mLayerProperty.srids.at( 0 ) ) );
353332
uri.setWkbType( mLayerProperty.types.at( 0 ) );
333+
if ( mLayerProperty.isView && mLayerProperty.pkCols.size() > 0 )
334+
uri.setKeyColumn( mLayerProperty.pkCols[0] );
354335
QgsDebugMsg( QString( "layer uri: %1" ).arg( uri.uri() ) );
355336
return uri.uri();
356337
}
@@ -415,7 +396,7 @@ void QgsOracleOwnerItem::addLayer( QgsOracleLayerProperty layerProperty )
415396

416397
QgsOracleLayerItem *layerItem = new QgsOracleLayerItem( this, layerProperty.tableName, mPath + "/" + layerProperty.tableName, layerType, layerProperty );
417398
layerItem->setToolTip( tip );
418-
addChild( layerItem );
399+
addChildItem( layerItem, true );
419400
}
420401

421402
// ---------------------------------------------------------------------------

‎src/providers/oracle/qgsoracledataitems.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,6 @@ class QgsOracleConnectionItem : public QgsDataCollectionItem
6363
virtual bool acceptDrop() { return true; }
6464
virtual bool handleDrop( const QMimeData * data, Qt::DropAction action );
6565

66-
QgsOracleConn *connection() const { return mConn; }
67-
6866
void refresh();
6967

7068
signals:
@@ -73,12 +71,15 @@ class QgsOracleConnectionItem : public QgsDataCollectionItem
7371
public slots:
7472
void editConnection();
7573
void deleteConnection();
74+
void refreshConnection();
7675

7776
void setLayerType( QgsOracleLayerProperty layerProperty );
7877

78+
void threadStarted();
79+
void threadFinished();
80+
7981
private:
8082
void stop();
81-
QgsOracleConn *mConn;
8283
QMap<QString, QgsOracleOwnerItem * > mOwnerMap;
8384
QgsOracleColumnTypeThread *mColumnTypeThread;
8485
};

‎src/providers/oracle/qgsoracleprovider.cpp

Lines changed: 188 additions & 75 deletions
Large diffs are not rendered by default.

‎src/providers/oracle/qgsoracleprovider.h

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -381,8 +381,19 @@ class QgsOracleProvider : public QgsVectorDataProvider
381381

382382
struct OracleException
383383
{
384-
OracleException( const QSqlQuery &q )
385-
: mWhat( tr( "Oracle-Error: %1\nSQL: %2\n" ).arg( q.lastError().text() ).arg( q.lastQuery() ) )
384+
OracleException( QString msg, const QSqlQuery &q )
385+
: mWhat( tr( "Oracle error: %1\nSQL: %2\nError: %3" )
386+
.arg( msg )
387+
.arg( q.lastError().text() )
388+
.arg( q.lastQuery() )
389+
)
390+
{}
391+
392+
OracleException( QString msg, const QSqlDatabase &q )
393+
: mWhat( tr( "Oracle error: %1\nError: %2" )
394+
.arg( msg )
395+
.arg( q.lastError().text() )
396+
)
386397
{}
387398

388399
OracleException( const OracleException &e )

‎src/providers/oracle/qgsoraclesourceselect.cpp

Lines changed: 10 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -462,71 +462,20 @@ void QgsOracleSourceSelect::on_btnConnect_clicked()
462462
mConnInfo = uri.connectionInfo();
463463
mUseEstimatedMetadata = uri.useEstimatedMetadata();
464464

465-
QgsOracleConn *conn = QgsOracleConn::connectDb( uri.connectionInfo() );
466-
if ( conn )
467-
{
468-
QApplication::setOverrideCursor( Qt::WaitCursor );
469-
470-
mIsConnected = true;
471-
mTablesTreeDelegate->setConn( QgsOracleConn::connectDb( uri.connectionInfo() ) );
472-
473-
bool userTablesOnly = QgsOracleConn::userTablesOnly( cmbConnections->currentText() );
474-
bool allowGeometrylessTables = cbxAllowGeometrylessTables->isChecked();
465+
QApplication::setOverrideCursor( Qt::BusyCursor );
475466

476-
QVector<QgsOracleLayerProperty> layers;
477-
if ( conn->supportedLayers( layers, userTablesOnly, allowGeometrylessTables ) )
478-
{
479-
// Add the supported layers to the table
480-
foreach ( QgsOracleLayerProperty layer, layers )
481-
{
482-
if ( !layer.geometryColName.isNull() )
483-
{
484-
if ( layer.types.contains( QGis::WKBUnknown ) || layer.srids.isEmpty() )
485-
{
486-
addSearchGeometryColumn( layer );
487-
}
488-
}
489-
else
490-
{
491-
QgsDebugMsg( QString( "adding table %1.%2" ).arg( layer.ownerName ).arg( layer.tableName ) );
492-
layer.types.clear();
493-
layer.srids.clear();
494-
mTableModel.addTableEntry( layer );
495-
}
496-
}
497-
498-
if ( mColumnTypeThread )
499-
{
500-
btnConnect->setText( tr( "Stop" ) );
501-
mColumnTypeThread->start();
502-
}
503-
}
467+
mIsConnected = true;
468+
mTablesTreeDelegate->setConn( QgsOracleConn::connectDb( uri.connectionInfo() ) );
504469

505-
//if we have only one owner item, expand it by default
506-
int numTopLevelItems = mTableModel.invisibleRootItem()->rowCount();
507-
if ( numTopLevelItems < 2 || mTableModel.tableCount() < 20 )
508-
{
509-
//expand all the toplevel items
510-
for ( int i = 0; i < numTopLevelItems; ++i )
511-
{
512-
mTablesTreeView->expand( mProxyModel.mapFromSource( mTableModel.indexFromItem( mTableModel.invisibleRootItem()->child( i ) ) ) );
513-
}
514-
}
470+
mColumnTypeThread = new QgsOracleColumnTypeThread( cmbConnections->currentText(), mUseEstimatedMetadata );
515471

516-
conn->disconnect();
472+
connect( mColumnTypeThread, SIGNAL( setLayerType( QgsOracleLayerProperty ) ),
473+
this, SLOT( setLayerType( QgsOracleLayerProperty ) ) );
474+
connect( mColumnTypeThread, SIGNAL( finished() ),
475+
this, SLOT( columnThreadFinished() ) );
517476

518-
if ( !mColumnTypeThread )
519-
{
520-
finishList();
521-
}
522-
}
523-
else
524-
{
525-
// Let user know we couldn't initialise the Oracle provider
526-
QMessageBox::warning( this,
527-
tr( "Oracle Locator Provider" ),
528-
tr( "Could not open the Oracle Locator Provider" ) );
529-
}
477+
btnConnect->setText( tr( "Stop" ) );
478+
mColumnTypeThread->start();
530479
}
531480

532481
void QgsOracleSourceSelect::finishList()
@@ -601,29 +550,6 @@ void QgsOracleSourceSelect::setSql( const QModelIndex &index )
601550
delete vlayer;
602551
}
603552

604-
void QgsOracleSourceSelect::addSearchGeometryColumn( QgsOracleLayerProperty layerProperty )
605-
{
606-
// store the column details and do the query in a thread
607-
if ( !mColumnTypeThread )
608-
{
609-
QgsOracleConn *conn = QgsOracleConn::connectDb( mConnInfo );
610-
if ( conn )
611-
{
612-
613-
mColumnTypeThread = new QgsOracleColumnTypeThread( conn, mUseEstimatedMetadata );
614-
615-
connect( mColumnTypeThread, SIGNAL( setLayerType( QgsOracleLayerProperty ) ),
616-
this, SLOT( setLayerType( QgsOracleLayerProperty ) ) );
617-
connect( this, SIGNAL( addGeometryColumn( QgsOracleLayerProperty ) ),
618-
mColumnTypeThread, SLOT( addGeometryColumn( QgsOracleLayerProperty ) ) );
619-
connect( mColumnTypeThread, SIGNAL( finished() ),
620-
this, SLOT( columnThreadFinished() ) );
621-
}
622-
}
623-
624-
emit addGeometryColumn( layerProperty );
625-
}
626-
627553
QString QgsOracleSourceSelect::fullDescription( QString owner, QString table, QString column, QString type )
628554
{
629555
QString full_desc = "";

‎src/providers/oracle/qgsoraclesourceselect.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ class QgsOracleSourceSelect : public QDialog, private Ui::QgsDbSourceSelectBase
8585
signals:
8686
void addDatabaseLayers( QStringList const & layerPathList, QString const & providerKey );
8787
void connectionsChanged();
88-
void addGeometryColumn( QgsOracleLayerProperty );
8988

9089
public slots:
9190
//! Determines the tables the user selected and closes the dialog

‎src/providers/postgres/qgspostgresdataitems.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "qgslogger.h"
2121
#include "qgsdatasourceuri.h"
2222
#include "qgsapplication.h"
23+
#include "qgsmessageoutput.h"
2324

2425
#include <QMessageBox>
2526
#include <QProgressDialog>
@@ -271,15 +272,17 @@ bool QgsPGConnectionItem::handleDrop( const QMimeData * data, Qt::DropAction )
271272

272273
if ( hasError )
273274
{
274-
QMessageBox::warning( 0, tr( "Import to PostGIS database" ), tr( "Failed to import some layers!\n\n" ) + importResults.join( "\n" ) );
275+
QgsMessageOutput *output = QgsMessageOutput::createMessageOutput();
276+
output->setTitle( tr( "Import to PostGIS database" ) );
277+
output->setMessage( tr( "Failed to import some layers!\n\n" ) + importResults.join( "\n" ), QgsMessageOutput::MessageText );
278+
output->showMessage();
275279
}
276280
else
277281
{
278282
QMessageBox::information( 0, tr( "Import to PostGIS database" ), tr( "Import was successful." ) );
283+
refresh();
279284
}
280285

281-
refresh();
282-
283286
return true;
284287
}
285288

‎src/providers/postgres/qgspostgresprovider.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -623,7 +623,7 @@ bool QgsPostgresProvider::nextFeature( QgsFeature& feature )
623623
if ( mFeatureQueue.empty() )
624624
{
625625
QString fetch = QString( "FETCH FORWARD %1 FROM %2" ).arg( mFeatureQueueSize ).arg( cursorName );
626-
QgsDebugMsgLevel( QString( "fetching %1 features." ).arg( mFeatureQueueSize ), 3 );
626+
QgsDebugMsgLevel( QString( "fetching %1 features." ).arg( mFeatureQueueSize ), 4 );
627627
if ( mConnectionRO->PQsendQuery( fetch ) == 0 ) // fetch features asynchronously
628628
{
629629
QgsMessageLog::logMessage( tr( "Fetching from cursor %1 failed\nDatabase error: %2" ).arg( cursorName ).arg( mConnectionRO->PQerrorMessage() ), tr( "PostGIS" ) );

‎src/providers/spatialite/qgsspatialitedataitems.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "qgslogger.h"
2222
#include "qgsmimedatautils.h"
2323
#include "qgsvectorlayerimport.h"
24+
#include "qgsmessageoutput.h"
2425

2526
#include <QAction>
2627
#include <QMessageBox>
@@ -226,15 +227,17 @@ bool QgsSLConnectionItem::handleDrop( const QMimeData * data, Qt::DropAction )
226227

227228
if ( hasError )
228229
{
229-
QMessageBox::warning( 0, tr( "Import to SpatiaLite database" ), tr( "Failed to import some layers!\n\n" ) + importResults.join( "\n" ) );
230+
QgsMessageOutput *output = QgsMessageOutput::createMessageOutput();
231+
output->setTitle( tr( "Import to SpatiaLite database" ) );
232+
output->setMessage( tr( "Failed to import some layers!\n\n" ) + importResults.join( "\n" ), QgsMessageOutput::MessageText );
233+
output->showMessage();
230234
}
231235
else
232236
{
233237
QMessageBox::information( 0, tr( "Import to SpatiaLite database" ), tr( "Import was successful." ) );
238+
refresh();
234239
}
235240

236-
refresh();
237-
238241
return true;
239242
}
240243

0 commit comments

Comments
 (0)
Please sign in to comment.