Пример #1
0
        public static object ConvertNumber(this IOrmLiteConverter converter, Type toIntegerType, object value)
        {
            if (value.GetType() == toIntegerType)
            {
                return(value);
            }

            var typeCode = toIntegerType.GetUnderlyingTypeCode();

            switch (typeCode)
            {
            case TypeCode.Byte:
                return(Convert.ToByte(value));

            case TypeCode.Int16:
                return(Convert.ToInt16(value));

            case TypeCode.UInt16:
                return(Convert.ToUInt16(value));

            case TypeCode.Int32:
                return(Convert.ToInt32(value));

            case TypeCode.UInt32:
                return(Convert.ToUInt32(value));

            case TypeCode.Int64:
                return(Convert.ToInt64(value));

            case TypeCode.UInt64:
                var byteValue = value as byte[];
                if (byteValue != null)
                {
                    return(OrmLiteUtils.ConvertToULong(byteValue));
                }
                return(Convert.ToUInt64(value));

            case TypeCode.Single:
                return(Convert.ToSingle(value));

            case TypeCode.Double:
                return(Convert.ToDouble(value));

            case TypeCode.Decimal:
                return(Convert.ToDecimal(value));
            }

            var convertedValue = converter.DialectProvider.StringSerializer.DeserializeFromString(value.ToString(), toIntegerType);

            return(convertedValue);
        }
        public static string ToArray <T>(this IOrmLiteConverter converter, T[] source)
        {
            var values = StringBuilderCache.Allocate();

            foreach (var value in source)
            {
                if (values.Length > 0)
                {
                    values.Append(",");
                }
                values.Append(converter.DialectProvider.GetQuotedValue(value, typeof(T)));
            }
            return("ARRAY[" + StringBuilderCache.ReturnAndFree(values) + "]");
        }
Пример #3
0
        public override string GetQuotedValue(object value, Type fieldType)
        {
            if (value == null)
            {
                return("NULL");
            }

            IOrmLiteConverter converter = null;

            try
            {
                var isEnum = fieldType.IsEnum || value.GetType().IsEnum;
                if (isEnum)
                {
                    return(EnumConverter.ToQuotedString(fieldType, value));
                }

                if (Converters.TryGetValue(fieldType, out converter))
                {
                    return(converter.ToQuotedString(fieldType, value));
                }

                if (fieldType.IsRefType())
                {
                    return(ReferenceTypeConverter.ToQuotedString(fieldType, value));
                }

                if (fieldType.IsValueType())
                {
                    return(ValueTypeConverter.ToQuotedString(fieldType, value));
                }
            }
            catch (Exception ex)
            {
                Log.Error("Error in {0}.ToQuotedString() value '{0}' and Type '{1}'"
                          .Fmt(converter.GetType().Name, value != null ? value.GetType().Name : "undefined", fieldType.Name), ex);
                throw;
            }

            return(ShouldQuoteValue(fieldType)
                    ? GetQuotedValue(value.ToString())
                    : value.ToString());
        }
        /// <summary>
        /// based on Npgsql2's source: Npgsql2\src\NpgsqlTypes\NpgsqlTypeConverters.cs
        /// </summary>
        public static string ToBinary(this IOrmLiteConverter converter, object NativeData)
        {
            var byteArray = (byte[])NativeData;
            var res       = StringBuilderCache.Allocate();

            foreach (byte b in byteArray)
            {
                if (b >= 0x20 && b < 0x7F && b != 0x27 && b != 0x5C)
                {
                    res.Append((char)b);
                }
                else
                {
                    res.Append("\\\\")
                    .Append((char)('0' + (7 & (b >> 6))))
                    .Append((char)('0' + (7 & (b >> 3))))
                    .Append((char)('0' + (7 & b)));
                }
            }
            return(StringBuilderCache.ReturnAndFree(res));
        }
        /// <summary>
        /// based on Npgsql2's source: Npgsql2\src\NpgsqlTypes\NpgsqlTypeConverters.cs
        /// </summary>
        public static string ToBinary(this IOrmLiteConverter converter, object NativeData)
        {
            var byteArray = (byte[])NativeData;
            var res       = new StringBuilder(byteArray.Length * 5);

            foreach (byte b in byteArray)
            {
                if (b >= 0x20 && b < 0x7F && b != 0x27 && b != 0x5C)
                {
                    res.Append((char)b);
                }
                else
                {
                    res.Append("\\\\")
                    .Append((char)('0' + (7 & (b >> 6))))
                    .Append((char)('0' + (7 & (b >> 3))))
                    .Append((char)('0' + (7 & b)));
                }
            }
            return(res.ToString());
        }
Пример #6
0
        protected override void Load(ContainerBuilder builder)
        {
            builder
            .RegisterAssemblyTypes(GetType().Assembly)
            .WithPublicConstructors()
            .AsDefaultInterface()
            .AsSelf();

            builder.RegisterType <FileSystem>().As <IFileSystem>();

            builder.Register(_ => SystemClock.Instance).As <IClock>();

            builder.RegisterType <MemoryCacheClient>().As <ICacheClient>().SingleInstance();

            string connectionString = _configuration.GetConnectionString("DefaultConnection");

            builder.Register(_ =>
            {
                string dbType = _configuration.GetValue("DbType", "Sqlite");
                OrmLiteConnectionFactory connectionFactory = new(
                    connectionString,
                    dbType switch
                {
                    "SQLServer" => SqlServer2019OrmLiteDialectProvider.Instance,
                    "MySQL" => MySqlConnectorDialectProvider.Instance,
                    "PostgreSQL" => PostgreSqlDialectProvider.Instance,
                    "Sqlite" => SqliteOrmLiteDialectProvider.Instance,
                    _ => throw new ArgumentOutOfRangeException(nameof(dbType), "The database type is not supported")
                });

                IOrmLiteConverter dateTimeConverter = connectionFactory.DialectProvider.GetConverter <DateTime>();
                connectionFactory.DialectProvider.RegisterConverter <Instant>(new InstantConverter(dateTimeConverter));

                if (connectionFactory.DialectProvider == SqliteOrmLiteDialectProvider.Instance)
                {
                    connectionFactory.ConnectionString =
                        connectionFactory.ConnectionString.Replace("Data Source=", string.Empty);
                }
                return(connectionFactory);
            })
Пример #7
0
        public override object ToDbValue(object value, Type type)
        {
            if (value == null || value is DBNull)
            {
                return(null);
            }

            if (type.IsEnum && !type.HasAttribute <EnumAsIntAttribute>())
            {
                return(EnumConverter.ToDbValue(type, value));
            }

            if (type.IsRefType())
            {
                return(ReferenceTypeConverter.ToDbValue(type, value));
            }

            IOrmLiteConverter converter = null;

            try
            {
                if (Converters.TryGetValue(type, out converter))
                {
                    if (type == typeof(DateTimeOffset))
                    {
                        return(converter.ToQuotedString(type, value));
                    }

                    return(converter.ToDbValue(type, value));
                }
            }
            catch (Exception ex)
            {
                Log.Error("Error in {0}.ToDbValue() value '{1}' and Type '{2}'"
                          .Fmt(converter.GetType().Name, value != null ? value.GetType().Name : "undefined", type.Name), ex);
                throw;
            }

            return(base.ToDbValue(value, type));
        }
Пример #8
0
 public static object ConvertNumber(this IOrmLiteConverter converter, Type toIntegerType, object value)
 {
     return(converter.DialectProvider.ConvertNumber(toIntegerType, value));
 }
Пример #9
0
 public InstantConverter(IOrmLiteConverter dateTimeConverter)
 {
     _dateTimeConverter = dateTimeConverter;
 }