fix: recover from driver panic on GEOGRAPHY/GEOMETRY columns by dlevy-msft-sql · Pull Request #704 · microsoft/go-sqlcmd
Problem
sqlcmd crashes with a panic when selecting NULL for GEOGRAPHY or GEOMETRY data types:
declare @v geography
select @v
go
panic: not implemented makeGoLangScanType for type 240
Root Cause
The go-mssqldb driver panics in makeGoLangScanType when encountering type 240 (GEOGRAPHY/GEOMETRY). The rows.ColumnTypes() call propagates this panic up, crashing sqlcmd.
Code Change
Added safeColumnTypes() wrapper that uses defer/recover to catch the panic and convert it to an error:
func safeColumnTypes(rows *sql.Rows) (cols []*sql.ColumnType, err error) { defer func() { if r := recover(); r != nil { err = localizer.Errorf("unsupported column type: %v", r) cols = nil } }() return rows.ColumnTypes() }
Testing
- Build passes:
go build ./... - New test
TestSafeColumnTypesRecoversPanicpasses TestQueryTimeoutandTestQueryServerPropertyReturnsColumnNamepass with live database
Fixes #553