From 420067a7e138ea60ed316c3a0938275c14ee1d98 Mon Sep 17 00:00:00 2001 From: Andreas Christou Date: Wed, 17 Apr 2024 22:49:51 +0100 Subject: [PATCH] MSSQL: Add `SQL_VARIANT` converter and update test (#85823) Add SQL_VARIANT converter and update test --- pkg/tsdb/mssql/mssql.go | 15 +++++++++++++++ pkg/tsdb/mssql/mssql_test.go | 4 +++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/pkg/tsdb/mssql/mssql.go b/pkg/tsdb/mssql/mssql.go index 8d1cd05c98c..b0d31e2a70c 100644 --- a/pkg/tsdb/mssql/mssql.go +++ b/pkg/tsdb/mssql/mssql.go @@ -403,5 +403,20 @@ func (t *mssqlQueryResultTransformer) GetConverterList() []sqlutil.StringConvert }, }, }, + { + Name: "handle SQL_VARIANT", + InputScanKind: reflect.Pointer, + InputTypeName: "SQL_VARIANT", + ConversionFunc: func(in *string) (*string, error) { return in, nil }, + Replacer: &sqlutil.StringFieldReplacer{ + OutputFieldType: data.FieldTypeNullableString, + ReplaceFunc: func(in *string) (any, error) { + if in == nil { + return nil, nil + } + return in, nil + }, + }, + }, } } diff --git a/pkg/tsdb/mssql/mssql_test.go b/pkg/tsdb/mssql/mssql_test.go index 7030e14e3a2..40c6ee50ac3 100644 --- a/pkg/tsdb/mssql/mssql_test.go +++ b/pkg/tsdb/mssql/mssql_test.go @@ -92,6 +92,7 @@ func TestMSSQL(t *testing.T) { c_datetimeoffset datetimeoffset, c_uuid uniqueidentifier + c_sql_variant sql_variant ) ` @@ -114,7 +115,7 @@ func TestMSSQL(t *testing.T) { 'char10', 'varchar10', 'text', N'☺nchar12☺', N'☺nvarchar12☺', N'☺text☺', CAST('%s' AS DATETIME), CAST('%s' AS DATETIME2), CAST('%s' AS SMALLDATETIME), CAST('%s' AS DATE), CAST('%s' AS TIME), SWITCHOFFSET(CAST('%s' AS DATETIMEOFFSET), '-07:00'), - CONVERT(uniqueidentifier, '%s') + CONVERT(uniqueidentifier, '%s'), 'test-sql-variant' `, d, d2, d, d, d, d2, uuid) _, err = db.Exec(sql) @@ -170,6 +171,7 @@ func TestMSSQL(t *testing.T) { require.Equal(t, dt2.In(time.FixedZone("UTC-7", int(-7*60*60))).Unix(), (*frames[0].Fields[22].At(0).(*time.Time)).Unix()) require.Equal(t, uuid, *frames[0].Fields[23].At(0).(*string)) + require.Equal(t, "test-sql-variant", *frames[0].Fields[24].At(0).(*string)) }) })