[QGIS Commit] r11765 - trunk/qgis/src/plugins/grass
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Wed Oct 7 12:02:55 EDT 2009
Author: jef
Date: 2009-10-07 12:02:54 -0400 (Wed, 07 Oct 2009)
New Revision: 11765
Modified:
trunk/qgis/src/plugins/grass/qgsgrassmodule.cpp
Log:
grass plugin update:
- update ogr uri support
- fix whereoption support
Modified: trunk/qgis/src/plugins/grass/qgsgrassmodule.cpp
===================================================================
--- trunk/qgis/src/plugins/grass/qgsgrassmodule.cpp 2009-10-07 14:16:17 UTC (rev 11764)
+++ trunk/qgis/src/plugins/grass/qgsgrassmodule.cpp 2009-10-07 16:02:54 UTC (rev 11765)
@@ -2646,7 +2646,7 @@
}
// Read "whereoption" if defined
- opt = qdesc.attribute( "where" );
+ opt = qdesc.attribute( "whereoption" );
if ( !opt.isNull() )
{
QDomNode optNode = QgsGrassModule::nodeByKey( gdesc, opt );
@@ -2697,6 +2697,7 @@
{
mUri.push_back( QString() );
mOgrLayers.push_back( QString() );
+ mOgrWheres.push_back( QString() );
mLayerComboBox->addItem( tr( "Select a layer" ), QVariant() );
}
@@ -2709,9 +2710,11 @@
if ( mType == Ogr && layer->type() == QgsMapLayer::VectorLayer )
{
- QgsVectorLayer *vector = ( QgsVectorLayer* )layer;
- if ( vector->providerType() != "ogr"
- && vector->providerType() != "postgres" ) continue;
+ QgsVectorLayer *vector = dynamic_cast<QgsVectorLayer*>( layer );
+ if ( !vector ||
+ ( vector->providerType() != "ogr" && vector->providerType() != "postgres" )
+ )
+ continue;
QgsDataProvider *provider = vector->dataProvider();
@@ -2732,10 +2735,45 @@
ogrLayer += dsUri.table();
ogrWhere = dsUri.sql();
}
- else
+ else if ( vector->providerType() == "ogr" )
{
- uri = provider->dataSourceUri();
- ogrLayer = "";
+ QStringList items = provider->dataSourceUri().split( "|" );
+
+ if ( items.size() > 1 )
+ {
+ uri = items[0];
+
+ ogrLayer = "";
+ ogrWhere = "";
+
+ for ( int i = 1; i < items.size(); i++ )
+ {
+ QStringList args = items[i].split( "=" );
+
+ if ( args.size() != 2 )
+ continue;
+
+ if ( args[0] == "layername" && args[0] == "layerid" )
+ {
+ ogrLayer = args[1];
+ }
+ else if ( args[0] == "subset" )
+ {
+ ogrWhere = args[1];
+ }
+ }
+
+ if ( uri.endsWith( ".shp", Qt::CaseInsensitive ) )
+ {
+ ogrLayer = "";
+ }
+ }
+ else
+ {
+ uri = items[0];
+ ogrLayer = "";
+ ogrWhere = "";
+ }
}
QgsDebugMsg( "uri = " + uri );
@@ -2804,11 +2842,11 @@
}
#endif //GDAL_VERSION_NUM
list.push_back( opt );
+ }
- if ( !mOgrWhereOption.isNull() && mOgrWheres[current].length() > 0 )
- {
- list.push_back( mOgrWhereOption + "=" + mOgrWheres[current] );
- }
+ if ( !mOgrWhereOption.isNull() && mOgrWheres[current].length() > 0 )
+ {
+ list.push_back( mOgrWhereOption + "=" + mOgrWheres[current] );
}
return list;
More information about the QGIS-commit
mailing list