public static string ToQuickString(this DbValueType type) { switch (type) { case DbValueType.B: return("B"); case DbValueType.BOOL: return("BOOL"); case DbValueType.BS: return("BS"); case DbValueType.L: return("L"); case DbValueType.M: return("M"); case DbValueType.N: return("N"); case DbValueType.NS: return("NS"); case DbValueType.NULL: return("NULL"); case DbValueType.S: return("S"); case DbValueType.SS: return("SS"); default: throw new Exception("Unexpected type:" + type.ToString()); } }
public static string ToQuickString(this DbValueType type) { return(type switch { DbValueType.B => "B", DbValueType.BOOL => "BOOL", DbValueType.BS => "BS", DbValueType.L => "L", DbValueType.M => "M", DbValueType.N => "N", DbValueType.NS => "NS", DbValueType.NULL => "NULL", DbValueType.S => "S", DbValueType.SS => "SS", _ => throw new Exception("Unexpected type:" + type.ToString()), });
public DbValue(object value) { var type = value.GetType(); if (type.IsEnum) { this.kind = DbValueType.N; this.value = EnumConverter.Default.FromObject(value, null !).Value; return; } if (type.IsArray) { var elementType = type.GetElementType(); switch (Type.GetTypeCode(elementType)) { case TypeCode.Byte: this.kind = DbValueType.B; break; case TypeCode.String: this.kind = DbValueType.SS; break; case TypeCode.Decimal: case TypeCode.Double: case TypeCode.Int16: case TypeCode.Int32: case TypeCode.Int64: case TypeCode.Single: case TypeCode.UInt16: case TypeCode.UInt32: case TypeCode.UInt64: this.kind = DbValueType.NS; break; default: throw new Exception("Invalid array element type:" + type.Name); } } else { switch (Type.GetTypeCode(type)) { // String case TypeCode.String: if ((string)value == string.Empty) { throw new ArgumentException(paramName: nameof(value), message: "Must not be empty"); } this.kind = DbValueType.S; break; // Numbers case TypeCode.Decimal: case TypeCode.Double: case TypeCode.Int16: case TypeCode.Int32: case TypeCode.Int64: case TypeCode.Single: case TypeCode.UInt16: case TypeCode.UInt32: case TypeCode.UInt64: this.kind = DbValueType.N; break; case TypeCode.DateTime: // Convert dates to unixtime this.value = new DateTimeOffset((DateTime)value).ToUnixTimeSeconds(); this.kind = DbValueType.N; return; // Boolean case TypeCode.Boolean: this.value = (bool)value ? 1 : 0; this.kind = DbValueType.N; return; default: { if (type == typeof(DbValue)) { var dbValue = (DbValue)value; this.kind = dbValue.Kind; this.value = dbValue.Value; } else if (type == typeof(AttributeCollection)) { this.value = value; this.kind = DbValueType.M; } else { if (!DbValueConverterFactory.TryGet(type, out IDbValueConverter converter)) { throw new Exception("Invalid value type. Was: " + type.Name); } var result = converter.FromObject(value, null !); this.value = result.Value; this.kind = result.Kind; } break; } } } this.value = value; }
public DbValue(object value, DbValueType type) { this.value = value; this.kind = type; }
public DbValue(AttributeCollection map) { this.kind = DbValueType.M; this.value = map; }
public DbValue(object value) { if (value == null) { throw new ArgumentNullException(nameof(value)); } var t = value.GetType(); if (t.GetTypeInfo().IsEnum) { this.kind = DbValueType.N; this.value = EnumConverter.Default.FromObject(value, null).Value; return; } if (t.IsArray) { var elementType = t.GetElementType(); var list = value as IList; switch (Type.GetTypeCode(elementType)) { case TypeCode.Byte: this.kind = DbValueType.B; break; case TypeCode.String: this.kind = DbValueType.SS; break; case TypeCode.Decimal: case TypeCode.Double: case TypeCode.Int16: case TypeCode.Int32: case TypeCode.Int64: case TypeCode.Single: case TypeCode.UInt16: case TypeCode.UInt32: case TypeCode.UInt64: this.kind = DbValueType.NS; break; default: throw new Exception("Unexpected array element type:" + t.Name); } } else { switch (Type.GetTypeCode(t)) { // String case TypeCode.String: if (value.ToString() == string.Empty) { throw new ArgumentException(paramName: nameof(value), message: "Must not be empty"); } this.kind = DbValueType.S; break; // Numbers case TypeCode.Decimal: case TypeCode.Double: case TypeCode.Int16: case TypeCode.Int32: case TypeCode.Int64: case TypeCode.Single: case TypeCode.UInt16: case TypeCode.UInt32: case TypeCode.UInt64: this.kind = DbValueType.N; break; case TypeCode.DateTime: // Convert dates to unicode this.value = new XDate((DateTime)value).ToUnixTime(); this.kind = DbValueType.N; return; // Boolean case TypeCode.Boolean: this.value = (bool)value ? 1 : 0; this.kind = DbValueType.N; return; default: { if (t == typeof(DbValue)) { var dbValue = (DbValue)value; this.kind = dbValue.Kind; this.value = dbValue.Value; } else if (t == typeof(AttributeCollection)) { this.value = value; this.kind = DbValueType.M; } else { IDbValueConverter converter; if (!DbValueConverterFactory.TryGet(t, out converter)) { throw new Exception("Unexpected value type. Was: " + t.Name); } var result = converter.FromObject(value, null); this.value = result.Value; this.kind = result.Kind; } break; } } } this.value = value; }