diff --git a/AmalgamationTool/DynamORM.Amalgamation.cs b/AmalgamationTool/DynamORM.Amalgamation.cs index 5b18198..cb95713 100644 --- a/AmalgamationTool/DynamORM.Amalgamation.cs +++ b/AmalgamationTool/DynamORM.Amalgamation.cs @@ -11485,6 +11485,126 @@ namespace DynamORM void Dispose(bool disposing); } + public static class ReaderExtensions + { + public static bool? GetBooleanIfNotNull(this IDataReader r, string name, bool? def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetBoolean(ord); + } + + public static byte? GetByteIfNotNull(this IDataReader r, string name, byte? def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetByte(ord); + } + + public static char? GetCharIfNotNull(this IDataReader r, string name, char? def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetChar(ord); + } + + public static DateTime? GetDateTimeIfNotNull(this IDataReader r, string name, DateTime? def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetDateTime(ord); + } + + public static decimal? GetDecimalIfNotNull(this IDataReader r, string name, decimal? def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetDecimal(ord); + } + + public static double? GetDoubleIfNotNull(this IDataReader r, string name, double? def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetDouble(ord); + } + + public static float? GetFloatIfNotNull(this IDataReader r, string name, float? def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetFloat(ord); + } + + public static Guid? GetGuidIfNotNull(this IDataReader r, string name, Guid? def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetGuid(ord); + } + + public static short? GetInt16IfNotNull(this IDataReader r, string name, short? def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetInt16(ord); + } + + public static int? GetInt32IfNotNull(this IDataReader r, string name, int? def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetInt32(ord); + } + + public static long? GetInt64IfNotNull(this IDataReader r, string name, long? def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetInt64(ord); + } + + public static string GetStringIfNotNull(this IDataReader r, string name, string def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetString(ord); + } + + public static object GetValueIfNotNull(this IDataReader r, string name, object def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetValue(ord); + } + } + /// Class containing useful string extensions. internal static class StringExtensions { @@ -13968,7 +14088,7 @@ namespace DynamORM throw new InvalidOperationException("Enumerables of enumerables are not supported"); Column = attr; - + if (attr != null && attr.AllowNull && !Type.IsNullableType() && Type != typeof(string)) attr.AllowNull = false; diff --git a/DynamORM/Helpers/ReaderExtensions.cs b/DynamORM/Helpers/ReaderExtensions.cs new file mode 100644 index 0000000..3c4cba6 --- /dev/null +++ b/DynamORM/Helpers/ReaderExtensions.cs @@ -0,0 +1,125 @@ +using System; +using System.Data; + +namespace DynamORM.Helpers +{ + public static class ReaderExtensions + { + public static bool? GetBooleanIfNotNull(this IDataReader r, string name, bool? def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetBoolean(ord); + } + + public static byte? GetByteIfNotNull(this IDataReader r, string name, byte? def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetByte(ord); + } + + public static char? GetCharIfNotNull(this IDataReader r, string name, char? def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetChar(ord); + } + + public static DateTime? GetDateTimeIfNotNull(this IDataReader r, string name, DateTime? def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetDateTime(ord); + } + + public static decimal? GetDecimalIfNotNull(this IDataReader r, string name, decimal? def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetDecimal(ord); + } + + public static double? GetDoubleIfNotNull(this IDataReader r, string name, double? def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetDouble(ord); + } + + public static float? GetFloatIfNotNull(this IDataReader r, string name, float? def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetFloat(ord); + } + + public static Guid? GetGuidIfNotNull(this IDataReader r, string name, Guid? def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetGuid(ord); + } + + public static short? GetInt16IfNotNull(this IDataReader r, string name, short? def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetInt16(ord); + } + + public static int? GetInt32IfNotNull(this IDataReader r, string name, int? def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetInt32(ord); + } + + public static long? GetInt64IfNotNull(this IDataReader r, string name, long? def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetInt64(ord); + } + + public static string GetStringIfNotNull(this IDataReader r, string name, string def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetString(ord); + } + + public static object GetValueIfNotNull(this IDataReader r, string name, object def = null) + { + var ord = r.GetOrdinal(name); + if (r.IsDBNull(ord)) + return def; + + return r.GetValue(ord); + } + } +}