Bug report #19455

Add MSSQL layer to canvas crashes QGIS3.2

Added by Liam Caffrey over 5 years ago. Updated over 5 years ago.

Status:Closed
Priority:Normal
Assignee:-
Category:Data Provider/MSSQL
Affected QGIS version:3.2 Regression?:No
Operating System:Windows 10.0.17134 Easy fix?:No
Pull Request or Patch supplied:No Resolution:fixed/implemented
Crashes QGIS or corrupts data:Yes Copied to github as #:27283

Description

This issue appears to be similar to a previous problem #12324 on QGIS 2.8 Wien

User Feedback

Add MSSQL layer to canvas and pan the canvas around. QGIS crashes. Alternatively, add 1 layer, then without interacting with the canvas, add a second layer, QGIS crashes.

Report Details

Crash ID: 5bfd6ac6f67d8a578b91a0865116ad7a62cabaea

Stack Trace

RtlEnterCriticalSection :
ODBCSetTryWaitValue :
LockHandle :
SQLGetStmtAttrW :
QSqlDatabase::open :
sourceSelectProviders :
sourceSelectProviders :
QgsVectorLayerFeatureIterator::QgsVectorLayerFeatureIterator :
QgsVectorLayerFeatureSource::getFeatures :
QgsVectorLayerLabelProvider::registerFeature :
QgsMapRendererCustomPainterJob::doRender :
QgsMapRendererCustomPainterJob::staticRender :
QgsLayoutItemAttributeTable::maximumNumberOfFeatures :
QThreadPoolPrivate::reset :
QThread::start :
BaseThreadInitThunk :
RtlUserThreadStart :

QGIS Info
QGIS Version: 3.2.0-Bonn
QGIS code revision: bc43194061
Compiled against Qt: 5.9.2
Running against Qt: 5.9.2
Compiled against GDAL: 2.2.4
Running against GDAL: 2.2.4

System Info
CPU Type: x86_64
Kernel Type: winnt
Kernel Version: 10.0.17134

Database Engine
Microsoft SQL Server 2012 (SP4) (KB4018073) - 11.0.7001.0 (X64) Aug 15 2017 10:23:29 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

Here is a simple MRE, run this code against your database. Navigate to it in QGIS and "Add selected layer(s) to canvas". Just pan around a bit and QGIS crashes.
IF OBJECT_ID('dbo.[qgis_temp_2]') IS NOT NULL drop table dbo.[qgis_temp_2];
CREATE TABLE dbo.[qgis_temp_2]
(
[OBJECTID] [int] NOT NULL
,[the_geom] [geometry] NULL
,CONSTRAINT [PK_qgis_temp_2_OBJECTID] PRIMARY KEY CLUSTERED ([OBJECTID])
);

with
the_points as
(
select cast(1 as int) as OBJECTID, geometry::STPointFromText('POINT (-8.317927 53.301678)', 4326) as the_geom union all
select cast(2 as int) as OBJECTID, geometry::STPointFromText('POINT (-8.317833 53.301747)', 4326) as the_geom union all
select cast(3 as int) as OBJECTID, geometry::STPointFromText('POINT (-8.242390 53.313442)', 4326) as the_geom
)
insert into dbo.qgis_temp_2 (OBJECTID, the_geom)
select OBJECTID, the_geom
from the_points;

I am snookered now. Most of my spatial is in MSSQL. No option in DBManager for MSSQL, and separately, as a workaround, I am having trouble connecting to my SQL Server instance from Postgres via Foreign Tables and via FreeTDS/tsql!! Lots of hoops to jump through for MSSQL users. :-(

History

#1 Updated by Jürgen Fischer over 5 years ago

  • Description updated (diff)

#2 Updated by Jürgen Fischer over 5 years ago

  • Assignee deleted (Liam Caffrey)

#3 Updated by Nyall Dawson over 5 years ago

  • Status changed from Open to Feedback

Should be fixed in 3.3 master - please test

#4 Updated by Liam Caffrey over 5 years ago

I just tested as per above. It doesn't crash 3.3 master now. Also works with larger data sets from MSSQL. Looks good. Tnx.

#5 Updated by Giovanni Manghi over 5 years ago

  • Resolution set to fixed/implemented
  • Status changed from Feedback to Closed

Also available in: Atom PDF