Пример #1
0
        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());
            }
        }
Пример #2
0
 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()),
     });
Пример #3
0
        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;
        }
Пример #4
0
 public DbValue(object value, DbValueType type)
 {
     this.value = value;
     this.kind  = type;
 }
Пример #5
0
 public DbValue(AttributeCollection map)
 {
     this.kind  = DbValueType.M;
     this.value = map;
 }
Пример #6
0
        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;
        }