[QGIS Commit] r11137 - in trunk/qgis/src: app/attributetable core providers/delimitedtext providers/memory providers/ogr providers/postgres providers/spatialite

svn_qgis at osgeo.org svn_qgis at osgeo.org
Tue Jul 21 10:29:38 EDT 2009


Author: wonder
Date: 2009-07-21 10:29:38 -0400 (Tue, 21 Jul 2009)
New Revision: 11137

Modified:
   trunk/qgis/src/app/attributetable/qgsattributetableview.cpp
   trunk/qgis/src/core/qgsvectordataprovider.cpp
   trunk/qgis/src/core/qgsvectordataprovider.h
   trunk/qgis/src/providers/delimitedtext/qgsdelimitedtextprovider.cpp
   trunk/qgis/src/providers/memory/qgsmemoryprovider.cpp
   trunk/qgis/src/providers/ogr/qgsogrprovider.cpp
   trunk/qgis/src/providers/postgres/qgspostgresprovider.cpp
   trunk/qgis/src/providers/spatialite/qgsspatialiteprovider.cpp
Log:
providers: deprecated some overlapping capabilities and added doxygen docs for them.
All providers should have now correctly set capability for fast access to features by id (SelectAtId).

Until now, attribute table was using memory model for Postgres provider (i.e. very slow open)
>From now it uses the "good" model, so the attribute table opens much faster.


Modified: trunk/qgis/src/app/attributetable/qgsattributetableview.cpp
===================================================================
--- trunk/qgis/src/app/attributetable/qgsattributetableview.cpp	2009-07-21 13:19:10 UTC (rev 11136)
+++ trunk/qgis/src/app/attributetable/qgsattributetableview.cpp	2009-07-21 14:29:38 UTC (rev 11137)
@@ -48,7 +48,11 @@
 
 void QgsAttributeTableView::setLayer( QgsVectorLayer* layer )
 {
-  if ( layer->dataProvider()->capabilities() & QgsVectorDataProvider::RandomSelectGeometryAtId )
+  // in case the provider allows fast access to features
+  // we will use the model that calls featureAtId() to fetch only the
+  // features in the current view. Otherwise we'll have to store
+  // everything in the memory because using featureAtId() would be too slow
+  if ( layer->dataProvider()->capabilities() & QgsVectorDataProvider::SelectAtId )
     mModel = new QgsAttributeTableModel( layer );
   else
     mModel = new QgsAttributeTableMemoryModel( layer );

Modified: trunk/qgis/src/core/qgsvectordataprovider.cpp
===================================================================
--- trunk/qgis/src/core/qgsvectordataprovider.cpp	2009-07-21 13:19:10 UTC (rev 11136)
+++ trunk/qgis/src/core/qgsvectordataprovider.cpp	2009-07-21 14:29:38 UTC (rev 11137)
@@ -198,8 +198,7 @@
 
   if ( abilities & QgsVectorDataProvider::SelectAtId )
   {
-    // Not really meaningful to the user.
-    // abilitiesList += "Select at ID";
+    abilitiesList += "Fast Access to Features at ID";
     QgsDebugMsg( "Capability: Select at ID" );
   }
 
@@ -209,26 +208,6 @@
     QgsDebugMsg( "Capability: Change Geometries" );
   }
 
-  if ( abilities & QgsVectorDataProvider::SelectGeometryAtId )
-  {
-
-    if ( abilities & QgsVectorDataProvider::RandomSelectGeometryAtId )
-    {
-      abilitiesList += "Select Geometries by ID (random access)";
-      QgsDebugMsg( "Capability: Select Geometries by ID (random access)" );
-    }
-    else if ( abilities & QgsVectorDataProvider::SequentialSelectGeometryAtId )
-    {
-      abilitiesList += "Select Geometries by ID (sequential access)";
-      QgsDebugMsg( "Capability: Select Geometries by ID (sequential access)" );
-    }
-    else
-    {
-      abilitiesList += "Select Geometries by ID (unknown access method)";
-      QgsDebugMsg( "Capability: Select Geometries by ID (unknown access method)" );
-    }
-  }
-
   return abilitiesList.join( ", " );
 
 }

Modified: trunk/qgis/src/core/qgsvectordataprovider.h
===================================================================
--- trunk/qgis/src/core/qgsvectordataprovider.h	2009-07-21 13:19:10 UTC (rev 11136)
+++ trunk/qgis/src/core/qgsvectordataprovider.h	2009-07-21 14:29:38 UTC (rev 11137)
@@ -47,18 +47,31 @@
      */
     enum Capability
     {
+      /** provider has no capabilities */
       NoCapabilities =                     0,
+      /** allows adding features */
       AddFeatures =                        1,
+      /** allows deletion of features */
       DeleteFeatures =               1 <<  1,
+      /** allows modification of attribute values */
       ChangeAttributeValues =        1 <<  2,
+      /** allows addition of new attributes (fields) */
       AddAttributes =                1 <<  3,
+      /** allows deletion of attributes (fields) */
       DeleteAttributes =             1 <<  4,
+      /** DEPRECATED - do not use */
       SaveAsShapefile =              1 <<  5,
+      /** allows creation of spatial index */
       CreateSpatialIndex =           1 <<  6,
+      /** fast access to features using their ID */
       SelectAtId =                   1 <<  7,
+      /** allows modifications of geometries */
       ChangeGeometries =             1 <<  8,
+      /** DEPRECATED - do not use */
       SelectGeometryAtId =           1 <<  9,
+      /** DEPRECATED - do not use */
       RandomSelectGeometryAtId =     1 << 10,
+      /** DEPRECATED - do not use */
       SequentialSelectGeometryAtId = 1 << 11
     };
 

Modified: trunk/qgis/src/providers/delimitedtext/qgsdelimitedtextprovider.cpp
===================================================================
--- trunk/qgis/src/providers/delimitedtext/qgsdelimitedtextprovider.cpp	2009-07-21 13:19:10 UTC (rev 11136)
+++ trunk/qgis/src/providers/delimitedtext/qgsdelimitedtextprovider.cpp	2009-07-21 14:29:38 UTC (rev 11137)
@@ -506,7 +506,7 @@
 
 int QgsDelimitedTextProvider::capabilities() const
 {
-  return 0;
+  return NoCapabilities;
 }
 
 

Modified: trunk/qgis/src/providers/memory/qgsmemoryprovider.cpp
===================================================================
--- trunk/qgis/src/providers/memory/qgsmemoryprovider.cpp	2009-07-21 13:19:10 UTC (rev 11136)
+++ trunk/qgis/src/providers/memory/qgsmemoryprovider.cpp	2009-07-21 14:29:38 UTC (rev 11137)
@@ -360,7 +360,7 @@
 {
   return AddFeatures | DeleteFeatures | ChangeGeometries |
          ChangeAttributeValues | AddAttributes | DeleteAttributes | CreateSpatialIndex |
-         SelectAtId | SelectGeometryAtId | RandomSelectGeometryAtId | SequentialSelectGeometryAtId;
+         SelectAtId | SelectGeometryAtId;
 }
 
 

Modified: trunk/qgis/src/providers/ogr/qgsogrprovider.cpp
===================================================================
--- trunk/qgis/src/providers/ogr/qgsogrprovider.cpp	2009-07-21 13:19:10 UTC (rev 11136)
+++ trunk/qgis/src/providers/ogr/qgsogrprovider.cpp	2009-07-21 14:29:38 UTC (rev 11137)
@@ -896,13 +896,9 @@
       // TODO: Perhaps influence if QGIS caches into memory
       //       (vs read from disk every time) based on this setting.
     {
-      ability |= QgsVectorDataProvider::RandomSelectGeometryAtId;
+      // the latter flag is here just for compatibility
+      ability |= QgsVectorDataProvider::SelectAtId | QgsVectorDataProvider::SelectGeometryAtId;
     }
-    else
-    {
-      ability |= QgsVectorDataProvider::SequentialSelectGeometryAtId;
-    }
-    ability |= QgsVectorDataProvider::SelectGeometryAtId;
 
     if ( OGR_L_TestCapability( ogrLayer, "SequentialWrite" ) )
       // TRUE if the CreateFeature() method works for this layer.

Modified: trunk/qgis/src/providers/postgres/qgspostgresprovider.cpp
===================================================================
--- trunk/qgis/src/providers/postgres/qgspostgresprovider.cpp	2009-07-21 13:19:10 UTC (rev 11136)
+++ trunk/qgis/src/providers/postgres/qgspostgresprovider.cpp	2009-07-21 14:29:38 UTC (rev 11137)
@@ -131,7 +131,9 @@
     return;
   }
 
-  enabledCapabilities = QgsVectorDataProvider::SelectGeometryAtId;
+  // postgres has fast access to features at id (thanks to primary key / unique index)
+  // the latter flag is here just for compatibility
+  enabledCapabilities = QgsVectorDataProvider::SelectAtId | QgsVectorDataProvider::SelectGeometryAtId;
 
   if ( QString::fromUtf8( PQgetvalue( testAccess, 0, 0 ) ) == "t" )
   {

Modified: trunk/qgis/src/providers/spatialite/qgsspatialiteprovider.cpp
===================================================================
--- trunk/qgis/src/providers/spatialite/qgsspatialiteprovider.cpp	2009-07-21 13:19:10 UTC (rev 11136)
+++ trunk/qgis/src/providers/spatialite/qgsspatialiteprovider.cpp	2009-07-21 14:29:38 UTC (rev 11137)
@@ -71,7 +71,7 @@
   }
   sqliteHandle = handle->handle();
 
-  enabledCapabilities = QgsVectorDataProvider::SelectGeometryAtId;
+  enabledCapabilities = QgsVectorDataProvider::SelectAtId | QgsVectorDataProvider::SelectGeometryAtId;
   enabledCapabilities |= QgsVectorDataProvider::DeleteFeatures;
   enabledCapabilities |= QgsVectorDataProvider::ChangeGeometries;
   enabledCapabilities |= QgsVectorDataProvider::ChangeAttributeValues;



More information about the QGIS-commit mailing list