Skip to content

Commit f1caa67

Browse files
smoothdeveloperlcg-gauthier-segay
authored andcommitted
workaround for #484, return None instead of throwing an exception if a SQL Server datatype is not mapped yet with a provided type descriptor.
1 parent d014cdf commit f1caa67

2 files changed

Lines changed: 42 additions & 36 deletions

File tree

‎RELEASE_NOTES.md‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
#### 2.9.99-alpha April 30, 2024
1+
#### 2.9.100-alpha July 30, 2026
2+
3+
* Issue #484 bypass sql types that are not yet mapped to provider types rather than design time failure
4+
* Contributor: Gauthier Segay (https://github.com/smoothdeveloper)
5+
6+
#### 2.9.99-alpha April 30, 2026
27

38
* Issue #482 Support for Microsoft.Data.SqlClient in FSharp.Data.MicrosoftSqlClient package
49
* Contributor: Daniel Little (https://github.com/daniellittledev), Gauthier Segay (https://github.com/smoothdeveloper)

‎src/SqlClient.DesignTime/SqlClientExtensions.fs‎

Lines changed: 36 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -130,59 +130,60 @@ type internal Routine = {
130130
let internal providerTypes =
131131
dict [
132132
// exact numerics
133-
"bigint", (SqlDbType.BigInt, "System.Int64", true)
134-
"bit", (SqlDbType.Bit, "System.Boolean", true)
135-
"decimal", (SqlDbType.Decimal, "System.Decimal", true)
136-
"int", (SqlDbType.Int, "System.Int32", true)
137-
"money", (SqlDbType.Money, "System.Decimal", true)
138-
"numeric", (SqlDbType.Decimal, "System.Decimal", true)
139-
"smallint", (SqlDbType.SmallInt, "System.Int16", true)
140-
"smallmoney", (SqlDbType.SmallMoney, "System.Decimal", true)
141-
"tinyint", (SqlDbType.TinyInt, "System.Byte", true)
133+
"bigint" , (SqlDbType.BigInt , "System.Int64" , true)
134+
"bit" , (SqlDbType.Bit , "System.Boolean" , true)
135+
"decimal" , (SqlDbType.Decimal , "System.Decimal" , true)
136+
"int" , (SqlDbType.Int , "System.Int32" , true)
137+
"money" , (SqlDbType.Money , "System.Decimal" , true)
138+
"numeric" , (SqlDbType.Decimal , "System.Decimal" , true)
139+
"smallint" , (SqlDbType.SmallInt , "System.Int16" , true)
140+
"smallmoney", (SqlDbType.SmallMoney , "System.Decimal" , true)
141+
"tinyint" , (SqlDbType.TinyInt , "System.Byte" , true)
142142

143143
// approximate numerics
144-
"float", (SqlDbType.Float, "System.Double", true) // This is correct. SQL Server 'float' type maps to double
145-
"real", (SqlDbType.Real, "System.Single", true)
144+
"float" , (SqlDbType.Float , "System.Double" , true) // This is correct. SQL Server 'float' type maps to double
145+
"real" , (SqlDbType.Real , "System.Single" , true)
146146

147147
// date and time
148-
"date", (SqlDbType.Date, "System.DateTime", true)
149-
"datetime", (SqlDbType.DateTime, "System.DateTime", true)
150-
"datetime2", (SqlDbType.DateTime2, "System.DateTime", true)
151-
"datetimeoffset", (SqlDbType.DateTimeOffset, "System.DateTimeOffset", true)
152-
"smalldatetime", (SqlDbType.SmallDateTime, "System.DateTime", true)
153-
"time", (SqlDbType.Time, "System.TimeSpan", true)
148+
"date" , (SqlDbType.Date , "System.DateTime" , true)
149+
"datetime" , (SqlDbType.DateTime , "System.DateTime" , true)
150+
"datetime2" , (SqlDbType.DateTime2 , "System.DateTime" , true)
151+
"datetimeoffset", (SqlDbType.DateTimeOffset , "System.DateTimeOffset" , true)
152+
"smalldatetime" , (SqlDbType.SmallDateTime , "System.DateTime" , true)
153+
"time" , (SqlDbType.Time , "System.TimeSpan" , true)
154154

155155
// character strings
156-
"char", (SqlDbType.Char, "System.String", false)
157-
"text", (SqlDbType.Text, "System.String", false)
158-
"varchar", (SqlDbType.VarChar, "System.String", false)
156+
"char" , (SqlDbType.Char , "System.String" , false)
157+
"text" , (SqlDbType.Text , "System.String" , false)
158+
"varchar" , (SqlDbType.VarChar , "System.String" , false)
159159

160160
// unicode character strings
161-
"nchar", (SqlDbType.NChar, "System.String", false)
162-
"ntext", (SqlDbType.NText, "System.String", false)
163-
"nvarchar", (SqlDbType.NVarChar, "System.String", false)
164-
"sysname", (SqlDbType.NVarChar, "System.String", false)
161+
"nchar" , (SqlDbType.NChar , "System.String" , false)
162+
"ntext" , (SqlDbType.NText , "System.String" , false)
163+
"nvarchar" , (SqlDbType.NVarChar , "System.String" , false)
164+
"sysname" , (SqlDbType.NVarChar , "System.String" , false)
165165

166166
// binary
167-
"binary", (SqlDbType.Binary, "System.Byte[]", false)
168-
"image", (SqlDbType.Image, "System.Byte[]", false)
169-
"varbinary", (SqlDbType.VarBinary, "System.Byte[]", false)
167+
"binary" , (SqlDbType.Binary , "System.Byte[]" , false)
168+
"image" , (SqlDbType.Image , "System.Byte[]" , false)
169+
"varbinary" , (SqlDbType.VarBinary , "System.Byte[]" , false)
170170

171171
//spatial
172-
"geography", (SqlDbType.Udt, "Microsoft.SqlServer.Types.SqlGeography, Microsoft.SqlServer.Types", false)
173-
"geometry", (SqlDbType.Udt, "Microsoft.SqlServer.Types.SqlGeometry, Microsoft.SqlServer.Types", false)
172+
"geography" , (SqlDbType.Udt , "Microsoft.SqlServer.Types.SqlGeography, Microsoft.SqlServer.Types", false)
173+
"geometry" , (SqlDbType.Udt , "Microsoft.SqlServer.Types.SqlGeometry, Microsoft.SqlServer.Types" , false)
174174

175175
//other
176-
"hierarchyid", (SqlDbType.Udt, "Microsoft.SqlServer.Types.SqlHierarchyId, Microsoft.SqlServer.Types", false)
177-
"sql_variant", (SqlDbType.Variant, "System.Object", false)
176+
"hierarchyid" , (SqlDbType.Udt , "Microsoft.SqlServer.Types.SqlHierarchyId, Microsoft.SqlServer.Types", false)
177+
"sql_variant" , (SqlDbType.Variant , "System.Object" , false)
178178

179-
"timestamp", (SqlDbType.Timestamp, "System.Byte[]", true) // note: rowversion is a synonym but SQL Server stores the data type as 'timestamp'
180-
"uniqueidentifier", (SqlDbType.UniqueIdentifier, "System.Guid", true)
181-
"xml", (SqlDbType.Xml, "System.String", false)
179+
"timestamp" , (SqlDbType.Timestamp , "System.Byte[]" , true) // note: rowversion is a synonym but SQL Server stores the data type as 'timestamp'
180+
"uniqueidentifier", (SqlDbType.UniqueIdentifier, "System.Guid" , true)
181+
"xml" , (SqlDbType.Xml , "System.String" , false)
182182

183183
//TODO
184184
//"cursor", typeof<TODO>
185185
//"table", typeof<TODO>
186+
//"json" , (SqlDbType.Json , "System.String" , false)
186187
]
187188

188189

@@ -591,7 +592,7 @@ order by
591592
| true, item -> Some item
592593
| false, _ when is_table_type ->
593594
Some (SqlDbType.Structured, null, false)
594-
| _ -> failwith ("Unexpected type: " + name)
595+
| _ -> None
595596

596597
let getProvidedTypeForSqlTypeEntry (x:SqlTypeEntry) = getProvidedType x.name x.is_user_defined x.is_table_type x.system_type_id x.user_type_id
597598

0 commit comments

Comments
 (0)