Cast() 공개 정적인 메소드

public static Cast ( SqlExpression value, SqlType destType ) : SqlCastExpression
value SqlExpression
destType SqlType
리턴 SqlCastExpression
예제 #1
0
        public static void VisitCast()
        {
            var exp = SqlExpression.Cast(SqlExpression.Constant(SqlObject.String(new SqlString("223"))),
                                         PrimitiveTypes.BigInt());

            Visit(exp);
        }
        public void FormatToString()
        {
            var exp = SqlExpression.Cast(SqlExpression.FunctionCall("test", new SqlExpression[] {
                SqlExpression.Constant(56)
            }), PrimitiveTypes.VarChar(45));

            var expected = "CAST(test(56) AS VARCHAR(45))";

            Assert.AreEqual(expected, exp.ToString());
        }
예제 #3
0
        public static void GetCastType(object value, SqlTypeCode destTypeCode, int p, int s)
        {
            var targetType = PrimitiveTypes.Type(destTypeCode, new { precision = p, scale = s, maxSize = p, size = p });
            var obj        = SqlObject.New(SqlValueUtil.FromObject(value));
            var exp        = SqlExpression.Constant(obj);

            var cast = SqlExpression.Cast(exp, targetType);

            Assert.Equal(targetType, cast.TargetType);
        }
예제 #4
0
        public virtual SqlExpression VisitCast(SqlCastExpression expression)
        {
            var value = expression.Value;

            if (value != null)
            {
                value = Visit(value);
            }

            return(SqlExpression.Cast(value, expression.TargetType));
        }
예제 #5
0
        public static void SerializeCast(object value, SqlTypeCode destTypeCode, int p, int s)
        {
            var targetType = PrimitiveTypes.Type(destTypeCode, new { precision = p, scale = s, maxSize = p, size = p });
            var obj        = SqlObject.New(SqlValueUtil.FromObject(value));
            var exp        = SqlExpression.Constant(obj);

            var cast   = SqlExpression.Cast(exp, targetType);
            var result = BinarySerializeUtil.Serialize(cast);

            Assert.IsType <SqlConstantExpression>(result.Value);
        }
예제 #6
0
        public void CastStringToDate()
        {
            var exp = SqlExpression.Cast(SqlExpression.Constant(DataObject.String("2015-09-01")), PrimitiveTypes.Date());

            SqlExpression casted = null;

            Assert.DoesNotThrow(() => casted = exp.Evaluate());
            Assert.IsNotNull(casted);
            Assert.IsInstanceOf <SqlConstantExpression>(casted);

            var value = ((SqlConstantExpression)casted).Value;

            Assert.IsNotNull(value.Value);
            Assert.IsInstanceOf <DateType>(value.Type);
            Assert.AreEqual(SqlTypeCode.Date, value.Type.TypeCode);
            Assert.AreEqual(new SqlDateTime(2015, 09, 01), value.Value);
        }
예제 #7
0
        public void CastStringToNumber()
        {
            var exp = SqlExpression.Cast(SqlExpression.Constant(DataObject.String("12.3e4")), PrimitiveTypes.Numeric());

            SqlExpression casted = null;

            Assert.DoesNotThrow(() => casted = exp.Evaluate());
            Assert.IsNotNull(casted);
            Assert.IsInstanceOf <SqlConstantExpression>(casted);

            var value = ((SqlConstantExpression)casted).Value;

            Assert.IsNotNull(value.Value);
            Assert.IsInstanceOf <NumericType>(value.Type);
            Assert.AreEqual(SqlTypeCode.Numeric, value.Type.TypeCode);
            Assert.AreEqual(SqlNumber.Parse("12.3e4"), value.Value);
        }
예제 #8
0
        public void CastBooleanTrueToString()
        {
            var exp = SqlExpression.Cast(SqlExpression.Constant(DataObject.Boolean(true)), PrimitiveTypes.String());

            SqlExpression casted = null;

            Assert.DoesNotThrow(() => casted = exp.Evaluate());
            Assert.IsNotNull(casted);
            Assert.IsInstanceOf <SqlConstantExpression>(casted);

            var value = ((SqlConstantExpression)casted).Value;

            Assert.IsNotNull(value.Value);
            Assert.IsInstanceOf <StringType>(value.Type);
            Assert.AreEqual(SqlTypeCode.String, value.Type.TypeCode);
            Assert.AreEqual(new SqlString("True"), value.Value);
        }
예제 #9
0
        public void CastStringToBooleanFalse()
        {
            var exp = SqlExpression.Cast(SqlExpression.Constant(DataObject.String("false")), PrimitiveTypes.Boolean());

            SqlExpression casted = null;

            Assert.DoesNotThrow(() => casted = exp.Evaluate());
            Assert.IsNotNull(casted);
            Assert.IsInstanceOf <SqlConstantExpression>(casted);

            var value = ((SqlConstantExpression)casted).Value;

            Assert.IsNotNull(value.Value);
            Assert.IsInstanceOf <BooleanType>(value.Type);
            Assert.AreEqual(SqlTypeCode.Boolean, value.Type.TypeCode);
            Assert.AreEqual(SqlBoolean.False, value.Value);
        }
        public void CastStringToInteger()
        {
            var exp = SqlExpression.Cast(SqlExpression.Constant(Field.String("1234")), PrimitiveTypes.Integer());

            SqlExpression casted = null;

            Assert.DoesNotThrow(() => casted = exp.Evaluate());
            Assert.IsNotNull(casted);
            Assert.IsInstanceOf <SqlConstantExpression>(casted);

            var value = ((SqlConstantExpression)casted).Value;

            Assert.IsNotNull(value.Value);
            Assert.IsInstanceOf <NumericType>(value.Type);
            Assert.AreEqual(SqlTypeCode.Integer, value.Type.TypeCode);
            Assert.AreEqual(new SqlNumber(1234), value.Value);
        }
예제 #11
0
        public void CastDateToString()
        {
            var date = DataObject.Date(new SqlDateTime(2015, 02, 03));
            var exp  = SqlExpression.Cast(SqlExpression.Constant(date), PrimitiveTypes.String());

            SqlExpression casted = null;

            Assert.DoesNotThrow(() => casted = exp.Evaluate());
            Assert.IsNotNull(casted);
            Assert.IsInstanceOf <SqlConstantExpression>(casted);

            var value = ((SqlConstantExpression)casted).Value;

            Assert.IsNotNull(value.Value);
            Assert.IsInstanceOf <StringType>(value.Type);
            Assert.AreEqual(SqlTypeCode.String, value.Type.TypeCode);
            Assert.AreEqual(new SqlString("2015-02-03"), value.Value);
        }
예제 #12
0
        public void CastStringToTime()
        {
            var exp = SqlExpression.Cast(SqlExpression.Constant(DataObject.String("22:13:01")), PrimitiveTypes.Time());

            SqlExpression casted = null;

            Assert.DoesNotThrow(() => casted = exp.Evaluate());
            Assert.IsNotNull(casted);
            Assert.IsInstanceOf <SqlConstantExpression>(casted);

            var value = ((SqlConstantExpression)casted).Value;

            Assert.IsNotNull(value.Value);
            Assert.IsInstanceOf <DateType>(value.Type);
            Assert.AreEqual(SqlTypeCode.Time, value.Type.TypeCode);

            // we round the expected value to the result offset because of the UTC parsing logic
            // of the date type: all we care here is the time component

            var result   = ((SqlDateTime)value.Value);
            var expected = new SqlDateTime(1, 1, 1, 22, 13, 01, 0, result.Offset);

            Assert.AreEqual(expected, result);
        }
예제 #13
0
        public static async void ReduceCast(object value, SqlTypeCode destTypeCode, int p, int s, object expected)
        {
            var targetType = PrimitiveTypes.Type(destTypeCode, new { precision = p, scale = s, maxSize = p, size = p });
            var obj        = SqlObject.New(SqlValueUtil.FromObject(value));
            var exp        = SqlExpression.Constant(obj);

            var cast = SqlExpression.Cast(exp, targetType);

            Assert.True(cast.CanReduce);

            var reduced = await cast.ReduceAsync(null);

            Assert.NotNull(reduced);
            Assert.IsType <SqlConstantExpression>(reduced);

            var result = ((SqlConstantExpression)reduced).Value;

            Assert.NotNull(result);
            Assert.Equal(destTypeCode, result.Type.TypeCode);

            var expectedResult = SqlObject.New(SqlValueUtil.FromObject(expected));

            Assert.Equal(expectedResult, result);
        }