-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathUtils.cs
More file actions
162 lines (146 loc) · 6.22 KB
/
Utils.cs
File metadata and controls
162 lines (146 loc) · 6.22 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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
// auto-generated by sqlc - do not edit
namespace MySqlConnectorDapperLegacyExampleGen
{
using CsvHelper;
using CsvHelper.Configuration;
using CsvHelper.TypeConversion;
using Dapper;
using NodaTime;
using NodaTime.Extensions;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Text.Json;
public static class Utils
{
private class NodaInstantTypeHandler : SqlMapper.TypeHandler<Instant>
{
public override Instant Parse(object value)
{
if (value is DateTime dt)
{
if (dt.Kind != DateTimeKind.Utc)
dt = DateTime.SpecifyKind(dt, DateTimeKind.Utc);
return dt.ToInstant();
}
throw new DataException($"Cannot convert {value?.GetType()} to Instant");
}
public override void SetValue(IDbDataParameter parameter, Instant value)
{
parameter.Value = value;
}
}
private class JsonElementTypeHandler : SqlMapper.TypeHandler<JsonElement>
{
public override JsonElement Parse(object value)
{
if (value is string s)
return JsonDocument.Parse(s).RootElement;
throw new DataException($"Cannot convert {value?.GetType()} to JsonElement");
}
public override void SetValue(IDbDataParameter parameter, JsonElement value)
{
parameter.Value = value.GetRawText();
}
}
public static void ConfigureSqlMapper()
{
SqlMapper.AddTypeHandler(typeof(Instant), new NodaInstantTypeHandler());
SqlMapper.AddTypeHandler(typeof(JsonElement), new JsonElementTypeHandler());
SqlMapper.AddTypeHandler(typeof(HashSet<BiosAuthorType>), new BiosAuthorTypeTypeHandler());
SqlMapper.AddTypeHandler(typeof(HashSet<MysqlStringTypesCSet>), new MysqlStringTypesCSetTypeHandler());
}
public static string TransformQueryForSliceArgs(string originalSql, int sliceSize, string paramName)
{
var paramArgs = Enumerable.Range(0, sliceSize).Select(i => $"@{paramName}Arg{i}").ToList();
return originalSql.Replace($"/*SLICE:{paramName}*/@{paramName}", string.Join(",", paramArgs));
}
private class BiosAuthorTypeTypeHandler : SqlMapper.TypeHandler<HashSet<BiosAuthorType>>
{
public override HashSet<BiosAuthorType> Parse(object value)
{
if (value is string s)
return s.ToBiosAuthorTypeSet();
throw new DataException($"Cannot convert {value?.GetType()} to HashSet<BiosAuthorType>");
}
public override void SetValue(IDbDataParameter parameter, HashSet<BiosAuthorType> value)
{
if (value is null)
return;
parameter.Value = string.Join(",", value);
}
}
private class MysqlStringTypesCSetTypeHandler : SqlMapper.TypeHandler<HashSet<MysqlStringTypesCSet>>
{
public override HashSet<MysqlStringTypesCSet> Parse(object value)
{
if (value is string s)
return s.ToMysqlStringTypesCSetSet();
throw new DataException($"Cannot convert {value?.GetType()} to HashSet<MysqlStringTypesCSet>");
}
public override void SetValue(IDbDataParameter parameter, HashSet<MysqlStringTypesCSet> value)
{
if (value is null)
return;
parameter.Value = string.Join(",", value);
}
}
public class MysqlStringTypesCSetCsvConverter : DefaultTypeConverter
{
public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
{
if (value == null)
return @"\N";
if (value is HashSet<MysqlStringTypesCSet> setVal)
return string.Join(",", setVal);
return base.ConvertToString(value, row, memberMapData);
}
}
public class NullToStringCsvConverter : DefaultTypeConverter
{
public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
{
return value == null ? @"\N" : base.ConvertToString(value, row, memberMapData);
}
}
public class BoolToBitCsvConverter : DefaultTypeConverter
{
public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
{
switch (value)
{
case null:
return @"\N";
case bool b:
return b ? "1" : "0";
default:
return base.ConvertToString(value, row, memberMapData);
}
}
}
public class ByteCsvConverter : DefaultTypeConverter
{
public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
{
if (value == null)
return @"\N";
if (value is byte byteVal)
return System.Text.Encoding.UTF8.GetString(new byte[] { byteVal });
return base.ConvertToString(value, row, memberMapData);
}
}
public class ByteArrayCsvConverter : DefaultTypeConverter
{
public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
{
if (value == null)
return @"\N";
if (value is byte[] byteArray)
return System.Text.Encoding.UTF8.GetString(byteArray);
return base.ConvertToString(value, row, memberMapData);
}
}
}
}