forked from JordanMarr/SqlHydra
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNpgsqlDataTypes.fs
More file actions
67 lines (61 loc) · 4.48 KB
/
NpgsqlDataTypes.fs
File metadata and controls
67 lines (61 loc) · 4.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
module SqlHydra.Npgsql.NpgsqlDataTypes
open System.Data
open NpgsqlTypes
open SqlHydra.Domain
let private r : Npgsql.NpgsqlDataReader = null
/// A list of supported column type mappings
let supportedTypeMappings =
[
"boolean", "bool", DbType.Boolean, None, nameof r.GetBoolean
"smallint", "int16", DbType.Int16, None, nameof r.GetInt16
"integer", "int", DbType.Int32, None, nameof r.GetInt32
"bigint", "int64", DbType.Int64, None, nameof r.GetInt64
"real", "double", DbType.Double, None, nameof r.GetDouble
"double precision", "double", DbType.Double, None, nameof r.GetDouble
"numeric", "decimal", DbType.Decimal, None, nameof r.GetDecimal
"money", "decimal", DbType.Decimal, None, nameof r.GetDecimal
"text", "string", DbType.String, None, nameof r.GetString
"character varying", "string", DbType.String, None, nameof r.GetString
"character", "string", DbType.String, None, nameof r.GetString
"citext", "string", DbType.String, None, nameof r.GetString
"json", "string", DbType.String, Some (nameof NpgsqlDbType.Json), nameof r.GetString
"jsonb", "string", DbType.String, Some (nameof NpgsqlDbType.Jsonb), nameof r.GetString
"xml", "string", DbType.String, None, nameof r.GetString
// skipped unsupported types
"bit(1)", "bool", DbType.Boolean, None, nameof r.GetBoolean
// skipped unsupported types
"uuid", "System.Guid", DbType.Guid, None, nameof r.GetGuid
// skipped unsupported types
"date", "System.DateTime", DbType.DateTime, None, nameof r.GetDateTime
"interval", "System.TimeSpan", DbType.Time, None, nameof r.GetTimeSpan
"timestamp without time zone", "System.DateTime", DbType.DateTime, None, nameof r.GetDateTime
"timestamp with time zone", "System.DateTime", DbType.DateTime, None, nameof r.GetDateTime
"time without time zone", "System.TimeSpan", DbType.Time, None, nameof r.GetTimeSpan
"time with time zone", "System.DateTime", DbType.DateTime, None, nameof r.GetDateTime
"bytea", "byte[]", DbType.Binary, None, nameof r.GetValue
// skipped unsupported types
"name", "string", DbType.String, None, nameof r.GetString
"(internal) char", "char", DbType.String, None, nameof r.GetChar
// skipped unsupported types
]
let typeMappingsByName =
supportedTypeMappings
|> List.map (fun (columnTypeAlias, clrType, dbType, providerDbType, readerMethod) ->
columnTypeAlias,
{
TypeMapping.ColumnTypeAlias = columnTypeAlias
TypeMapping.ClrType = clrType
TypeMapping.DbType = dbType
TypeMapping.ReaderMethod = readerMethod
TypeMapping.ProviderDbType = providerDbType
}
)
|> Map.ofList
let tryFindTypeMapping (providerTypeName: string) =
typeMappingsByName.TryFind (providerTypeName.ToLower().Trim())
let primitiveTypeReaders =
supportedTypeMappings
|> List.map(fun (_, clrType, _, _, readerMethod) ->
{ PrimitiveTypeReader.ClrType = clrType; PrimitiveTypeReader.ReaderMethod = readerMethod }
)
|> List.distinctBy (fun ptr -> ptr.ClrType)