@@ -93,6 +93,7 @@ private TypeMapper()
93
93
// date/time
94
94
var typeDate = AddDbTypeMapping ( new DbTypeMapping ( typeof ( DateTime ) , new [ ] { DbType . Date } ) ) ;
95
95
var typeDateTime = AddDbTypeMapping ( new DbTypeMapping ( typeof ( DateTime ) , new [ ] { DbType . DateTime , DbType . DateTime2 , DbType . DateTimeOffset } ) ) ;
96
+ AddDbTypeMapping ( new DbTypeMapping ( typeof ( DateTimeOffset ) , new [ ] { DbType . DateTimeOffset } ) ) ;
96
97
var typeTime = AddDbTypeMapping ( new DbTypeMapping ( typeof ( TimeSpan ) , new [ ] { DbType . Time } ) ) ;
97
98
AddColumnTypeMetadata ( new ColumnTypeMetadata ( "DATETIME" , typeDateTime , MySqlDbType . DateTime ) ) ;
98
99
AddColumnTypeMetadata ( new ColumnTypeMetadata ( "DATE" , typeDate , MySqlDbType . Date ) ) ;
@@ -274,6 +275,157 @@ public static MySqlDbType ConvertToMySqlDbType(ColumnDefinitionPayload columnDef
274
275
}
275
276
}
276
277
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
+
277
429
internal IEnumerable < ColumnTypeMetadata > GetColumnMappings ( )
278
430
{
279
431
return m_columnTypeMetadataLookup . Values . AsEnumerable ( ) ;
0 commit comments