예제 #1
0
        public object Translate(TranslationContext context, ASTNode node)
        {
            if (DataTypes.Equal(node.ResultType, DataTypes.Boolean))
            {
                return new Model.BinaryExpression(new Model.ValueExpression(1), "iEqual", new Model.ValueExpression(Boolean.Parse(node.GetAttribute<string>("value")) ? 1 : 0));
            }
            else if (DataTypes.Equal(node.ResultType, DataTypes.Timestamp))
            {
                // TODO: Convert to format expected by T-SQL
                return new Model.CallExpression("convert", new Model.Expression[] { new Model.IdentifierExpression("datetime"), new Model.ValueExpression(node.GetAttribute<string>("value")) });
            }
            else
            {
                var result = new Model.ValueExpression();

                if (DataTypes.Equal(node.ResultType, DataTypes.String))
                {
                    result.Token = Model.TokenType.String;
                    result.Value = node.GetAttribute<string>("value");
                }
                else if (DataTypes.Equal(node.ResultType, DataTypes.Integer))
                {
                    result.Token = Model.TokenType.Integer;
                    result.Value = Int32.Parse(node.GetAttribute<string>("value"));
                }
                else if (DataTypes.Equal(node.ResultType, DataTypes.Real))
                {
                    result.Token = Model.TokenType.Decimal;
                    result.Value = Decimal.Parse(node.GetAttribute<string>("value"));
                }
                else
                {
                    throw new NotSupportedException(String.Format("Unsupported literal type: {0}.", node.ResultType.Name));
                }

                return result;
            }
        }
예제 #2
0
        public object Translate(TranslationContext context, ASTNode node)
        {
            var result = new Model.ValueExpression();
            result.Token = Model.TokenType.String;

            result.Value = node.GetAttribute<string>("value");

            return result;
        }
예제 #3
0
        public object Translate(TranslationContext context, ASTNode node)
        {
            var result = new Model.ValueExpression();

            result.Token = Model.TokenType.Boolean;
            result.Value = node.GetAttribute<string>("value"); // TODO: This assumes boolean representation will translate...

            return result;
        }
예제 #4
0
        public object Translate(TranslationContext context, ASTNode node)
        {
            // Physical quantity is not supported as a value type within SQL, so the literal will need to be transformed to a "unit normalized representation"
            // TODO: First-class support for Quantity values within the target SQL environment.
            var value = Convert.ToDecimal(node.GetAttribute<string>("value"));
            var unit = node.GetAttribute<string>("unit");

            switch (unit)
            {
                case "1" : break; // Do nothing, this is the unity unit in UCUM, value is unadjusted

                // Time units
                case "a" : value *= 365.25m; break; // Year, convert to days
                case "mo" : value *= 30.4375m; break; // Month, convert to days
                case "wk" : value *= 7m; break; // Week, convert to days
                case "d" : break; // Day

                // These time units are not yet supported
                //"h" : break; // Hour
                //"min" : break; // Minute
                //"Ms" : break; // Megasecond
                //"ks" : break; // Kilosecond
                //"s" : break; // Second
                //"ms" : break; // Millisecond
                //"us" : break; // Microsecond
                //"ns" : break; // Nanosecond
                //"ps" : break; // Picosecond

                default : throw new NotSupportedException(String.Format("Physical quantity unit translation for unit type of '{0}' is not supported.", unit));
            }

            var result = new Model.ValueExpression();
            result.Token = Model.TokenType.Decimal;
            result.Value = value;

            return result;
        }
예제 #5
0
        public object Translate(TranslationContext context, ASTNode node)
        {
            var result = new Model.ValueExpression();
            result.Token = Model.TokenType.Nil;

            return result;
        }