[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