@@ -603,6 +603,9 @@ void QgsMssqlProvider::uniqueValues( int index, QList<QVariant> &uniqueValues, i
603
603
// update the extent, wkb type and srid for this layer
604
604
void QgsMssqlProvider::UpdateStatistics ( bool estimate )
605
605
{
606
+ if ( mGeometryColName .isEmpty () )
607
+ return ;
608
+
606
609
// get features to calculate the statistics
607
610
QString statement;
608
611
@@ -1300,12 +1303,24 @@ bool QgsMssqlProvider::deleteFeatures( const QgsFeatureIds & id )
1300
1303
1301
1304
int QgsMssqlProvider::capabilities () const
1302
1305
{
1306
+ int cap = CreateAttributeIndex | AddFeatures | AddAttributes;
1307
+ bool hasGeom = false ;
1308
+ if ( !mGeometryColName .isEmpty () )
1309
+ {
1310
+ hasGeom = true ;
1311
+ cap |= CreateSpatialIndex;
1312
+ }
1313
+
1303
1314
if ( mFidColName .isEmpty () )
1304
- return CreateSpatialIndex | CreateAttributeIndex | AddFeatures | AddAttributes ;
1315
+ return cap ;
1305
1316
else
1306
- return CreateSpatialIndex | CreateAttributeIndex | AddFeatures | DeleteFeatures |
1307
- ChangeAttributeValues | ChangeGeometries | AddAttributes | DeleteAttributes |
1308
- QgsVectorDataProvider::SelectAtId | QgsVectorDataProvider::SelectGeometryAtId;
1317
+ {
1318
+ if ( hasGeom )
1319
+ cap |= ChangeGeometries | QgsVectorDataProvider::SelectGeometryAtId;
1320
+
1321
+ return cap | DeleteFeatures | ChangeAttributeValues | DeleteAttributes |
1322
+ QgsVectorDataProvider::SelectAtId;
1323
+ }
1309
1324
}
1310
1325
1311
1326
bool QgsMssqlProvider::createSpatialIndex ()
@@ -1657,7 +1672,7 @@ QgsVectorLayerImport::ImportError QgsMssqlProvider::createEmptyLayer(
1657
1672
if ( schemaName.isEmpty () )
1658
1673
schemaName = " dbo" ;
1659
1674
1660
- if ( geometryColumn.isEmpty () )
1675
+ if ( wkbType != QGis::WKBNoGeometry && geometryColumn.isEmpty () )
1661
1676
geometryColumn = " geom" ;
1662
1677
1663
1678
if ( primaryKey.isEmpty () )
@@ -1770,19 +1785,33 @@ QgsVectorLayerImport::ImportError QgsMssqlProvider::createEmptyLayer(
1770
1785
}
1771
1786
}
1772
1787
1773
- sql = QString ( " IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[%1].[%2]') AND type in (N'U')) DROP TABLE [%1].[%2]\n "
1774
- " CREATE TABLE [%1].[%2]([%3] [int] IDENTITY(1,1) NOT NULL, [%4] [geometry] NULL CONSTRAINT [PK_%2] PRIMARY KEY CLUSTERED ( [%3] ASC ))\n "
1775
- " DELETE FROM geometry_columns WHERE f_table_schema = '%1' AND f_table_name = '%2'\n "
1776
- " INSERT INTO [geometry_columns] ([f_table_catalog], [f_table_schema],[f_table_name], "
1777
- " [f_geometry_column],[coord_dimension],[srid],[geometry_type]) VALUES ('%5', '%1', '%2', '%4', %6, %7, '%8')" )
1778
- .arg ( schemaName,
1779
- tableName,
1780
- primaryKey,
1781
- geometryColumn,
1782
- dbName,
1783
- QString::number ( dim ),
1784
- QString::number ( srid ),
1785
- geometryType );
1788
+ if ( !geometryColumn.isEmpty () )
1789
+ {
1790
+ sql = QString ( " IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[%1].[%2]') AND type in (N'U')) DROP TABLE [%1].[%2]\n "
1791
+ " CREATE TABLE [%1].[%2]([%3] [int] IDENTITY(1,1) NOT NULL, [%4] [geometry] NULL CONSTRAINT [PK_%2] PRIMARY KEY CLUSTERED ( [%3] ASC ))\n "
1792
+ " DELETE FROM geometry_columns WHERE f_table_schema = '%1' AND f_table_name = '%2'\n "
1793
+ " INSERT INTO [geometry_columns] ([f_table_catalog], [f_table_schema],[f_table_name], "
1794
+ " [f_geometry_column],[coord_dimension],[srid],[geometry_type]) VALUES ('%5', '%1', '%2', '%4', %6, %7, '%8')" )
1795
+ .arg ( schemaName,
1796
+ tableName,
1797
+ primaryKey,
1798
+ geometryColumn,
1799
+ dbName,
1800
+ QString::number ( dim ),
1801
+ QString::number ( srid ),
1802
+ geometryType );
1803
+ }
1804
+ else
1805
+ {
1806
+ // geometryless table
1807
+ sql = QString ( " IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[%1].[%2]') AND type in (N'U')) DROP TABLE [%1].[%2]\n "
1808
+ " CREATE TABLE [%1].[%2]([%3] [int] IDENTITY(1,1) NOT NULL CONSTRAINT [PK_%2] PRIMARY KEY CLUSTERED ( [%3] ASC ))\n "
1809
+ " DELETE FROM geometry_columns WHERE f_table_schema = '%1' AND f_table_name = '%2'\n "
1810
+ )
1811
+ .arg ( schemaName,
1812
+ tableName,
1813
+ primaryKey );
1814
+ }
1786
1815
1787
1816
if ( !q.exec ( sql ) )
1788
1817
{
0 commit comments