Skip to content

Commit 9e67d7a

Browse files
committed
Fix #9139 - Don't crash on MSSQL relations
1 parent a94483e commit 9e67d7a

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

src/providers/mssql/qgsmssqlfeatureiterator.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ void QgsMssqlFeatureIterator::BuildStatement( const QgsFeatureRequest& request )
9797
mAttributesToFetch.append( i );
9898
}
9999
}
100+
100101
// get fid col if not yet required
101102
if ( mFidCol == -1 && !mSource->mFidColName.isEmpty() )
102103
{
@@ -107,7 +108,7 @@ void QgsMssqlFeatureIterator::BuildStatement( const QgsFeatureRequest& request )
107108
++fieldCount;
108109
}
109110
// get geometry col
110-
if ( !( request.flags() & QgsFeatureRequest::NoGeometry ) && !mSource->mGeometryColName.isEmpty() )
111+
if ( !( request.flags() & QgsFeatureRequest::NoGeometry ) && mSource->isSpatial() )
111112
{
112113
if ( fieldCount != 0 )
113114
mStatement += ",";
@@ -124,7 +125,7 @@ void QgsMssqlFeatureIterator::BuildStatement( const QgsFeatureRequest& request )
124125

125126
bool filterAdded = false;
126127
// set spatial filter
127-
if ( request.filterType() & QgsFeatureRequest::FilterRect )
128+
if ( request.filterType() & QgsFeatureRequest::FilterRect && isSpatial() )
128129
{
129130
// polygons should be CCW for SqlGeography
130131
QString r;
@@ -162,6 +163,7 @@ void QgsMssqlFeatureIterator::BuildStatement( const QgsFeatureRequest& request )
162163
mStatement += " and (" + mSource->mSqlWhereClause + ")";
163164
}
164165

166+
// QgsDebugMsg( mStatement );
165167
if ( fieldCount == 0 )
166168
{
167169
QgsDebugMsg( "QgsMssqlProvider::select no fields have been requested" );

src/providers/mssql/qgsmssqlfeatureiterator.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ class QgsMssqlFeatureSource : public QgsAbstractFeatureSource
6262
// SQL statement used to limit the features retrieved
6363
QString mSqlWhereClause;
6464

65+
// Return True if this feature source has spatial attributes.
66+
bool isSpatial() { return !mGeometryColName.isEmpty() || !mGeometryColType.isEmpty(); }
67+
6568
friend class QgsMssqlFeatureIterator;
6669
};
6770

@@ -111,6 +114,9 @@ class QgsMssqlFeatureIterator : public QgsAbstractFeatureIteratorFromSource<QgsM
111114

112115
// for parsing sql geometries
113116
QgsMssqlGeometryParser mParser;
117+
118+
// Return True of the geometry column was found when parsing the columns.
119+
bool isSpatial() { return mGeometryCol > -1; }
114120
};
115121

116122
#endif // QGSMSSQLFEATUREITERATOR_H

0 commit comments

Comments
 (0)