Beispiel #1
0
 public void ParseTimeSpanFriendly()
 {
     Assert.AreEqual(TimeSpan.FromSeconds(5), TypeConverterFactory.ConvertSingle("5s", typeof(TimeSpan)));
     Assert.AreEqual(TimeSpan.FromMinutes(15), TypeConverterFactory.ConvertSingle("15m", typeof(TimeSpan)));
     Assert.AreEqual(TimeSpan.FromHours(5), TypeConverterFactory.ConvertSingle("5h", typeof(TimeSpan)));
     Assert.AreEqual(TimeSpan.FromDays(7), TypeConverterFactory.ConvertSingle("7d", typeof(TimeSpan)));
 }
Beispiel #2
0
 public void ParseTimeSpanFriendly()
 {
     //Assert.AreEqual(null, TypeConverterFactory.ConvertSingle((string)null, typeof(TimeSpan)));
     //Assert.AreEqual(null, TypeConverterFactory.ConvertSingle("", typeof(TimeSpan)));
     Assert.AreEqual(TimeSpan.FromSeconds(5.5), TypeConverterFactory.ConvertSingle("5.5s", typeof(TimeSpan)));
     Assert.AreEqual(TimeSpan.FromMinutes(15), TypeConverterFactory.ConvertSingle("15m", typeof(TimeSpan)));
     Assert.AreEqual(TimeSpan.FromHours(0.5), TypeConverterFactory.ConvertSingle("0.5h", typeof(TimeSpan)));
     Assert.AreEqual(TimeSpan.FromDays(7), TypeConverterFactory.ConvertSingle("7d", typeof(TimeSpan)));
 }
Beispiel #3
0
        public static IXColumn Build(IXTable source, IXColumn column, Type targetType, ValueKinds errorOnKinds = ValueKindsDefaults.ErrorOn, object defaultValue = null, ValueKinds changeToDefaultKinds = ValueKindsDefaults.ChangeToDefault)
        {
            // If the column is already the right type, just return it
            if (column.ColumnDetails.Type == targetType)
            {
                return(column);
            }

            // Convert constants individually
            if (column.IsConstantColumn())
            {
                XArray array = column.ValuesGetter()();
                return(new ConstantColumn(source, TypeConverterFactory.ConvertSingle(array.Array.GetValue(0), targetType), targetType));
            }

            // Otherwise, wrap in a CastedColumn [Enums are automatically converted just once]
            return(new CastedColumn(column, targetType, errorOnKinds, defaultValue, changeToDefaultKinds));
        }
Beispiel #4
0
        public IXColumn NextColumn(IXTable source, XDatabaseContext context, Type requiredType = null)
        {
            if (source == null)
            {
                throw new ArgumentNullException("source");
            }

            IXColumn result = null;

            if (_scanner.Current.Type == TokenType.Value)
            {
                object value = String8.Convert(_scanner.Current.Value, new byte[String8.GetLength(_scanner.Current.Value)]);

                if (requiredType != null && requiredType != typeof(String8))
                {
                    value = TypeConverterFactory.ConvertSingle(value, requiredType);
                }

                result = new ConstantColumn(source, value, (requiredType == null ? typeof(String8) : requiredType), !_scanner.Current.IsWrapped);
                _scanner.Next();
            }
            else if (_scanner.Current.Type == TokenType.FunctionName)
            {
                result = NextFunction(source, context);
            }
            else if (_scanner.Current.Type == TokenType.ColumnName)
            {
                result = source.Columns.Find(NextColumnName(source, requiredType));
            }

            if (result == null || (requiredType != null && result.ColumnDetails.Type != requiredType))
            {
                Throw("Col|Func|Const", EscapedColumnList(source, requiredType).Concat(EscapedFunctionList(requiredType)));
            }

            if (_scanner.Current.Value.Equals("as", StringComparison.OrdinalIgnoreCase))
            {
                _scanner.Next();
                string columnName = NextOutputColumnName(source);
                result = RenamedColumn.Build(result, columnName);
            }

            return(result);
        }