Skip to content

Commit b5360f8

Browse files
committedJul 4, 2017
[MSSQL] Correctly set geometry type from geometry_columns table
1 parent 1fc81d6 commit b5360f8

File tree

4 files changed

+9
-103
lines changed

4 files changed

+9
-103
lines changed
 

‎src/providers/mssql/qgsmssqldataitems.cpp

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -542,24 +542,19 @@ QgsMssqlLayerItem *QgsMssqlSchemaItem::addLayer( const QgsMssqlLayerProperty &la
542542
QString tip = tr( "%1 as %2 in %3" ).arg( layerProperty.geometryColName, QgsWkbTypes::displayString( wkbType ), layerProperty.srid );
543543

544544
QgsLayerItem::LayerType layerType;
545-
switch ( wkbType )
545+
QgsWkbTypes::Type flatType = QgsWkbTypes::flatType( wkbType );
546+
switch ( flatType )
546547
{
547548
case QgsWkbTypes::Point:
548-
case QgsWkbTypes::Point25D:
549549
case QgsWkbTypes::MultiPoint:
550-
case QgsWkbTypes::MultiPoint25D:
551550
layerType = QgsLayerItem::Point;
552551
break;
553552
case QgsWkbTypes::LineString:
554-
case QgsWkbTypes::LineString25D:
555553
case QgsWkbTypes::MultiLineString:
556-
case QgsWkbTypes::MultiLineString25D:
557554
layerType = QgsLayerItem::Line;
558555
break;
559556
case QgsWkbTypes::Polygon:
560-
case QgsWkbTypes::Polygon25D:
561557
case QgsWkbTypes::MultiPolygon:
562-
case QgsWkbTypes::MultiPolygon25D:
563558
layerType = QgsLayerItem::Polygon;
564559
break;
565560
default:

‎src/providers/mssql/qgsmssqlprovider.cpp

Lines changed: 5 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -352,15 +352,15 @@ void QgsMssqlProvider::loadMetadata()
352352

353353
QSqlQuery query = QSqlQuery( mDatabase );
354354
query.setForwardOnly( true );
355-
if ( !query.exec( QStringLiteral( "select f_geometry_column, coord_dimension, srid, geometry_type from geometry_columns where f_table_schema = '%1' and f_table_name = '%2'" ).arg( mSchemaName, mTableName ) ) )
355+
if ( !query.exec( QStringLiteral( "select f_geometry_column, srid, geometry_type from geometry_columns where f_table_schema = '%1' and f_table_name = '%2'" ).arg( mSchemaName, mTableName ) ) )
356356
{
357357
QgsDebugMsg( query.lastError().text() );
358358
}
359359
if ( query.isActive() && query.next() )
360360
{
361361
mGeometryColName = query.value( 0 ).toString();
362-
mSRId = query.value( 2 ).toInt();
363-
mWkbType = getWkbType( query.value( 3 ).toString(), query.value( 1 ).toInt() );
362+
mSRId = query.value( 1 ).toInt();
363+
mWkbType = getWkbType( query.value( 2 ).toString() );
364364
}
365365
}
366366

@@ -1658,42 +1658,9 @@ void QgsMssqlProvider::mssqlWkbTypeAndDimension( QgsWkbTypes::Type wkbType, QStr
16581658
dim = 0;
16591659
}
16601660

1661-
QgsWkbTypes::Type QgsMssqlProvider::getWkbType( const QString &geometryType, int dim )
1661+
QgsWkbTypes::Type QgsMssqlProvider::getWkbType( const QString &geometryType )
16621662
{
1663-
if ( dim == 3 )
1664-
{
1665-
if ( geometryType == QLatin1String( "POINT" ) )
1666-
return QgsWkbTypes::Point25D;
1667-
if ( geometryType == QLatin1String( "LINESTRING" ) )
1668-
return QgsWkbTypes::LineString25D;
1669-
if ( geometryType == QLatin1String( "POLYGON" ) )
1670-
return QgsWkbTypes::Polygon25D;
1671-
if ( geometryType == QLatin1String( "MULTIPOINT" ) )
1672-
return QgsWkbTypes::MultiPoint25D;
1673-
if ( geometryType == QLatin1String( "MULTILINESTRING" ) )
1674-
return QgsWkbTypes::MultiLineString25D;
1675-
if ( geometryType == QLatin1String( "MULTIPOLYGON" ) )
1676-
return QgsWkbTypes::MultiPolygon25D;
1677-
else
1678-
return QgsWkbTypes::Unknown;
1679-
}
1680-
else
1681-
{
1682-
if ( geometryType == QLatin1String( "POINT" ) )
1683-
return QgsWkbTypes::Point;
1684-
if ( geometryType == QLatin1String( "LINESTRING" ) )
1685-
return QgsWkbTypes::LineString;
1686-
if ( geometryType == QLatin1String( "POLYGON" ) )
1687-
return QgsWkbTypes::Polygon;
1688-
if ( geometryType == QLatin1String( "MULTIPOINT" ) )
1689-
return QgsWkbTypes::MultiPoint;
1690-
if ( geometryType == QLatin1String( "MULTILINESTRING" ) )
1691-
return QgsWkbTypes::MultiLineString;
1692-
if ( geometryType == QLatin1String( "MULTIPOLYGON" ) )
1693-
return QgsWkbTypes::MultiPolygon;
1694-
else
1695-
return QgsWkbTypes::Unknown;
1696-
}
1663+
return QgsWkbTypes::parseType( geometryType );
16971664
}
16981665

16991666

‎src/providers/mssql/qgsmssqlprovider.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ class QgsMssqlProvider : public QgsVectorDataProvider
213213
}
214214

215215
static void mssqlWkbTypeAndDimension( QgsWkbTypes::Type wkbType, QString &geometryType, int &dim );
216-
static QgsWkbTypes::Type getWkbType( const QString &wkbType, int dim );
216+
static QgsWkbTypes::Type getWkbType( const QString &wkbType );
217217

218218
friend class QgsMssqlFeatureSource;
219219

‎src/providers/mssql/qgsmssqltablemodel.cpp

Lines changed: 1 addition & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -397,61 +397,5 @@ QString QgsMssqlTableModel::layerURI( const QModelIndex &index, const QString &c
397397
QgsWkbTypes::Type QgsMssqlTableModel::wkbTypeFromMssql( QString type )
398398
{
399399
type = type.toUpper();
400-
401-
if ( type == QLatin1String( "POINT" ) )
402-
{
403-
return QgsWkbTypes::Point;
404-
}
405-
else if ( type == QLatin1String( "POINTM" ) )
406-
{
407-
return QgsWkbTypes::Point25D;
408-
}
409-
else if ( type == QLatin1String( "MULTIPOINT" ) )
410-
{
411-
return QgsWkbTypes::MultiPoint;
412-
}
413-
else if ( type == QLatin1String( "MULTIPOINTM" ) )
414-
{
415-
return QgsWkbTypes::MultiPoint25D;
416-
}
417-
else if ( type == QLatin1String( "LINESTRING" ) )
418-
{
419-
return QgsWkbTypes::LineString;
420-
}
421-
else if ( type == QLatin1String( "LINESTRINGM" ) )
422-
{
423-
return QgsWkbTypes::LineString25D;
424-
}
425-
else if ( type == QLatin1String( "MULTILINESTRING" ) )
426-
{
427-
return QgsWkbTypes::MultiLineString;
428-
}
429-
else if ( type == QLatin1String( "MULTILINESTRINGM" ) )
430-
{
431-
return QgsWkbTypes::MultiLineString25D;
432-
}
433-
else if ( type == QLatin1String( "POLYGON" ) )
434-
{
435-
return QgsWkbTypes::Polygon;
436-
}
437-
else if ( type == QLatin1String( "POLYGONM" ) )
438-
{
439-
return QgsWkbTypes::Polygon25D;
440-
}
441-
else if ( type == QLatin1String( "MULTIPOLYGON" ) )
442-
{
443-
return QgsWkbTypes::MultiPolygon;
444-
}
445-
else if ( type == QLatin1String( "MULTIPOLYGONM" ) )
446-
{
447-
return QgsWkbTypes::MultiPolygon25D;
448-
}
449-
else if ( type == QLatin1String( "NONE" ) )
450-
{
451-
return QgsWkbTypes::NoGeometry;
452-
}
453-
else
454-
{
455-
return QgsWkbTypes::Unknown;
456-
}
400+
return QgsWkbTypes::parseType( type );
457401
}

0 commit comments

Comments
 (0)
Please sign in to comment.