Skip to content

Commit d7557ec

Browse files
committed
Add type mapping for DateTimeOffset.
Signed-off-by: Bradley Grainger <[email protected]>
1 parent 4dd6758 commit d7557ec

File tree

1 file changed

+152
-0
lines changed

1 file changed

+152
-0
lines changed

src/MySqlConnector/Core/TypeMapper.cs

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ private TypeMapper()
9393
// date/time
9494
var typeDate = AddDbTypeMapping(new DbTypeMapping(typeof(DateTime), new[] { DbType.Date }));
9595
var typeDateTime = AddDbTypeMapping(new DbTypeMapping(typeof(DateTime), new[] { DbType.DateTime, DbType.DateTime2, DbType.DateTimeOffset }));
96+
AddDbTypeMapping(new DbTypeMapping(typeof(DateTimeOffset), new[] { DbType.DateTimeOffset }));
9697
var typeTime = AddDbTypeMapping(new DbTypeMapping(typeof(TimeSpan), new[] { DbType.Time }));
9798
AddColumnTypeMetadata(new ColumnTypeMetadata("DATETIME", typeDateTime, MySqlDbType.DateTime));
9899
AddColumnTypeMetadata(new ColumnTypeMetadata("DATE", typeDate, MySqlDbType.Date));
@@ -274,6 +275,157 @@ public static MySqlDbType ConvertToMySqlDbType(ColumnDefinitionPayload columnDef
274275
}
275276
}
276277

278+
public static ushort ConvertToColumnTypeAndFlags(MySqlDbType dbType, MySqlGuidFormat guidFormat)
279+
{
280+
var isUnsigned = false;
281+
ColumnType columnType;
282+
switch (dbType)
283+
{
284+
case MySqlDbType.Bool:
285+
case MySqlDbType.Byte:
286+
columnType = ColumnType.Tiny;
287+
break;
288+
289+
case MySqlDbType.UByte:
290+
columnType = ColumnType.Tiny;
291+
isUnsigned = true;
292+
break;
293+
294+
case MySqlDbType.Int16:
295+
columnType = ColumnType.Short;
296+
break;
297+
298+
case MySqlDbType.UInt16:
299+
columnType = ColumnType.Short;
300+
isUnsigned = true;
301+
break;
302+
303+
case MySqlDbType.Int24:
304+
columnType = ColumnType.Int24;
305+
break;
306+
307+
case MySqlDbType.UInt24:
308+
columnType = ColumnType.Int24;
309+
isUnsigned = true;
310+
break;
311+
312+
case MySqlDbType.Int32:
313+
columnType = ColumnType.Long;
314+
break;
315+
316+
case MySqlDbType.UInt32:
317+
columnType = ColumnType.Long;
318+
isUnsigned = true;
319+
break;
320+
321+
case MySqlDbType.Int64:
322+
columnType = ColumnType.Longlong;
323+
break;
324+
325+
case MySqlDbType.UInt64:
326+
columnType = ColumnType.Longlong;
327+
isUnsigned = true;
328+
break;
329+
330+
case MySqlDbType.Bit:
331+
columnType = ColumnType.Bit;
332+
break;
333+
334+
case MySqlDbType.Guid:
335+
if (guidFormat == MySqlGuidFormat.Char36 || guidFormat == MySqlGuidFormat.Char32)
336+
columnType = ColumnType.String;
337+
else
338+
columnType = ColumnType.Blob;
339+
break;
340+
341+
case MySqlDbType.Enum:
342+
case MySqlDbType.Set:
343+
columnType = ColumnType.String;
344+
break;
345+
346+
case MySqlDbType.Binary:
347+
case MySqlDbType.String:
348+
columnType = ColumnType.String;
349+
break;
350+
351+
case MySqlDbType.VarBinary:
352+
case MySqlDbType.VarChar:
353+
case MySqlDbType.VarString:
354+
columnType = ColumnType.VarString;
355+
break;
356+
357+
case MySqlDbType.TinyBlob:
358+
case MySqlDbType.TinyText:
359+
columnType = ColumnType.TinyBlob;
360+
break;
361+
362+
case MySqlDbType.Blob:
363+
case MySqlDbType.Text:
364+
columnType = ColumnType.Blob;
365+
break;
366+
367+
case MySqlDbType.MediumBlob:
368+
case MySqlDbType.MediumText:
369+
columnType = ColumnType.MediumBlob;
370+
break;
371+
372+
case MySqlDbType.LongBlob:
373+
case MySqlDbType.LongText:
374+
columnType = ColumnType.LongBlob;
375+
break;
376+
377+
case MySqlDbType.JSON:
378+
columnType = ColumnType.Json; // TODO: test
379+
break;
380+
381+
case MySqlDbType.Date:
382+
case MySqlDbType.Newdate:
383+
columnType = ColumnType.Date;
384+
break;
385+
386+
case MySqlDbType.DateTime:
387+
columnType = ColumnType.DateTime;
388+
break;
389+
390+
case MySqlDbType.Timestamp:
391+
columnType = ColumnType.Timestamp;
392+
break;
393+
394+
case MySqlDbType.Time:
395+
columnType = ColumnType.Time;
396+
break;
397+
398+
case MySqlDbType.Year:
399+
columnType = ColumnType.Year;
400+
break;
401+
402+
case MySqlDbType.Float:
403+
columnType = ColumnType.Float;
404+
break;
405+
406+
case MySqlDbType.Double:
407+
columnType = ColumnType.Double;
408+
break;
409+
410+
case MySqlDbType.Decimal:
411+
columnType = ColumnType.Decimal;
412+
break;
413+
414+
case MySqlDbType.NewDecimal:
415+
columnType = ColumnType.NewDecimal;
416+
break;
417+
418+
case MySqlDbType.Geometry:
419+
columnType = ColumnType.Geometry;
420+
break;
421+
422+
default:
423+
throw new NotImplementedException("ConvertToColumnTypeAndFlags for {0} is not implemented".FormatInvariant(dbType));
424+
}
425+
426+
return (ushort) ((byte) columnType | (isUnsigned ? 0x8000 : 0));
427+
}
428+
277429
internal IEnumerable<ColumnTypeMetadata> GetColumnMappings()
278430
{
279431
return m_columnTypeMetadataLookup.Values.AsEnumerable();

0 commit comments

Comments
 (0)