Пример #1
0
            protected override void ToString(StringBuilder sb, Dictionary <IQueryElement, IQueryElement> dic)
            {
                Expr1.ToString(sb, dic);

                string op;

                switch (Operator)
                {
                case Operator.Equal: op = "=";  break;

                case Operator.NotEqual: op = "<>"; break;

                case Operator.Greater: op = ">";  break;

                case Operator.GreaterOrEqual: op = ">="; break;

                case Operator.NotGreater: op = "!>"; break;

                case Operator.Less: op = "<";  break;

                case Operator.LessOrEqual: op = "<="; break;

                case Operator.NotLess: op = "!<"; break;

                default: throw new InvalidOperationException();
                }

                sb.Append(" ").Append(op).Append(" ");

                Expr2.ToString(sb, dic);
            }
Пример #2
0
            protected override void ToString(StringBuilder sb, Dictionary <IQueryElement, IQueryElement> dic)
            {
                Expr1.ToString(sb, dic);

                if (IsNot)
                {
                    sb.Append(" NOT");
                }
                switch (Kind)
                {
                case SearchKind.StartsWith:
                    sb.Append(" STARTS_WITH ");
                    break;

                case SearchKind.EndsWith:
                    sb.Append(" ENS_WITH ");
                    break;

                case SearchKind.Contains:
                    sb.Append(" CONTAINS ");
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                Expr2.ToString(sb, dic);
            }
Пример #3
0
        ISqlExpression ISqlExpressionWalkable.Walk(bool skipColumns, Func <ISqlExpression, ISqlExpression> func)
        {
            Expr1 = Expr1.Walk(skipColumns, func);
            Expr2 = Expr2.Walk(skipColumns, func);

            return(func(this));
        }
Пример #4
0
            protected override void ToString(StringBuilder sb, Dictionary <IQueryElement, IQueryElement> dic)
            {
                Expr1.ToString(sb, dic);

                if (IsNot)
                {
                    sb.Append(" NOT");
                }
                switch (Kind)
                {
                case SearchKind.StartsWith:
                    sb.Append(" STARTS_WITH ");
                    break;

                case SearchKind.EndsWith:
                    sb.Append(" ENDS_WITH ");
                    break;

                case SearchKind.Contains:
                    sb.Append(" CONTAINS ");
                    break;

                default:
                    throw new InvalidOperationException($"Unexpected search kind: {Kind}");
                }

                Expr2.ToString(sb, dic);
            }
Пример #5
0
        ISqlExpression ISqlExpressionWalkable.Walk(WalkOptions options, Func <ISqlExpression, ISqlExpression> func)
        {
            Expr1 = Expr1.Walk(options, func) !;
            Expr2 = Expr2.Walk(options, func) !;

            return(func(this));
        }
Пример #6
0
        public override void Jumping(int t, int f)
        {
            var a    = Expr1.Reduce();
            var b    = Expr2.Reduce();
            var test = a + " " + Op + " " + b;

            EmitJumps(test, t, f);
        }
Пример #7
0
 public Expr1(KaitaiStream p__io, KaitaiStruct p__parent = null, Expr1 p__root = null) : base(p__io)
 {
     m_parent    = p__parent;
     m_root      = p__root ?? this;
     f_lenOf1Mod = false;
     f_str1Len   = false;
     _read();
 }
Пример #8
0
 protected override void ToString(StringBuilder sb, Dictionary <IQueryElement, IQueryElement> dic)
 {
     Expr1.ToString(sb, dic);
     sb
     .Append(" IS ")
     .Append(IsNot ? "NOT " : "")
     .Append("NULL");
 }
Пример #9
0
        public IFormType BuildForm(ITypeEnvironment env)
        {
            IFormType a    = Expr1.BuildForm(env);
            IFormType b    = Expr2.BuildForm(env);
            IFormType type = a.GetLeastUpperBound(b);

            return(type);
        }
Пример #10
0
        protected override void ToStringInternal(StringBuilder sb, Dictionary <IQueryElement, IQueryElement> dic)
        {
            Expr1.ToString(sb, dic);

            sb.Append(" " + GetOperator() + " ");

            Expr2.ToString(sb, dic);
        }
Пример #11
0
        public IEnumerable <Inline> BuildDocument()
        {
            List <Inline> inlines = new List <Inline>();

            inlines.AddRange(Expr1.BuildDocument());
            inlines.Add(new Run(" % "));
            inlines.AddRange(Expr2.BuildDocument());
            return(inlines);
        }
Пример #12
0
        public override bool Equals(object obj)
        {
            if (!(obj is UnaryExpr))
            {
                return(false);
            }

            return(Expr1.Equals(((UnaryExpr)obj).Expr1));
        }
Пример #13
0
        static void Main(string[] args)
        {
            var path = "./input1.txt";

            Scan.Init(path);
            var tree = Expr1.GetAstTree();

            Expr.GenCode(tree);
        }
Пример #14
0
        StringBuilder IQueryElement.ToString(StringBuilder sb, Dictionary <IQueryElement, IQueryElement> dic)
        {
            Expr1
            .ToString(sb, dic)
            .Append(' ')
            .Append(Operation)
            .Append(' ');

            return(Expr2.ToString(sb, dic));
        }
Пример #15
0
        public override int GetHashCode()
        {
            var hashCode = Operation.GetHashCode();

            hashCode = unchecked (hashCode + (hashCode * 397) ^ SystemType.GetHashCode());
            hashCode = unchecked (hashCode + (hashCode * 397) ^ Expr1.GetHashCode());
            hashCode = unchecked (hashCode + (hashCode * 397) ^ Expr2.GetHashCode());

            return(hashCode);
        }
Пример #16
0
        public override void Jumping(int t, int f)
        {
            var label = t != 0 ? t : NewLabel();

            Expr1.Jumping(label, 0);
            Expr2.Jumping(t, f);
            if (t == 0)
            {
                EmitLabel(label);
            }
        }
Пример #17
0
        public override bool Equals(object obj)
        {
            if (!(obj is BinaryExpr))
            {
                return(false);
            }

            BinaryExpr other = (BinaryExpr)obj;

            return(Expr1.Equals(other.Expr1) && Expr2.Equals(other.Expr2));
        }
Пример #18
0
        public ValueContainer Evaluate(IValueEnvironment env)
        {
            ValueContainer a     = Expr1.Evaluate(env);
            ValueContainer value = new ValueContainer(!Convert.ToBoolean(a.Value));

            Action onValueChanged = () => value.Value = !Convert.ToBoolean(a.Value);

            a.ValueChanged += onValueChanged;

            return(value);
        }
Пример #19
0
            protected override void ToString(StringBuilder sb, Dictionary <IQueryElement, IQueryElement> dic)
            {
                Expr1.ToString(sb, dic);

                if (IsNot)
                {
                    sb.Append(" NOT");
                }
                sb.Append(" IN (");

                ((IQueryElement)SubQuery).ToString(sb, dic);
                sb.Append(")");
            }
Пример #20
0
        public ValueContainer Evaluate(IValueEnvironment env)
        {
            ValueContainer a     = Expr2.Evaluate(env);
            ValueContainer b     = Expr3.Evaluate(env);
            ValueContainer value = new ValueContainer(Convert.ToBoolean(Expr1.Evaluate(env).Value) ? a.Value : b.Value);

            Action onValueChanged = () => value.Value = Convert.ToBoolean(Expr1.Evaluate(env).Value) ? a.Value : b.Value;

            a.ValueChanged += onValueChanged;
            b.ValueChanged += onValueChanged;

            return(value);
        }
Пример #21
0
        public ValueContainer Evaluate(IValueEnvironment env)
        {
            ValueContainer a     = Expr1.Evaluate(env);
            ValueContainer b     = Expr2.Evaluate(env);
            ValueContainer value = new ValueContainer(Evaluate(a, b));

            Action onValueChanged = () => value.Value = Evaluate(a, b);

            a.ValueChanged += onValueChanged;
            b.ValueChanged += onValueChanged;

            return(value);
        }
Пример #22
0
        public override Expr Simplify()
        {
            if (Expr1.Equals(new CstI(0)) && Expr2.Equals(new CstI(0)))
            {
                return(new CstI(0));
            }
            if (Expr1.Equals(Expr2))
            {
                return(new CstI(0));
            }

            return(Expr2.Equals(new CstI(0)) ? Expr1 : this);
        }
Пример #23
0
        public override ITypeCheckType TypeCheck(ITypeEnvironment env)
        {
            ITypeCheckType a = Expr1.TypeCheck(env);
            ITypeCheckType b = Expr2.TypeCheck(env);

            if (!a.CompatibleWith(ExpressionUpperBound) || !a.CompatibleWith(b))
            {
                env.ReportError(String.Format("Comparison using '<=' not possible. Incompatible types: '{0}', '{1}'. Only numeric types are supported.",
                                              a, b), SourceStartPosition, SourceEndPosition);
            }

            return(new BoolType());
        }
Пример #24
0
            protected override void ToString(StringBuilder sb, Dictionary <IQueryElement, IQueryElement> dic)
            {
                Expr1.ToString(sb, dic);

                if (IsNot)
                {
                    sb.Append(" NOT");
                }
                sb.Append(" BETWEEN ");

                Expr2.ToString(sb, dic);
                sb.Append(" AND ");
                Expr3.ToString(sb, dic);
            }
Пример #25
0
        protected override void ToStringInternal(StringBuilder sb, Dictionary <IQueryElement, IQueryElement> dic)
        {
            Expr1.ToString(sb, dic);

            sb.Append(GetOperator());

            Expr2.ToString(sb, dic);

            if (Escape != null)
            {
                sb.Append(" ESCAPE ");
                Escape.ToString(sb, dic);
            }
        }
Пример #26
0
        public ITypeCheckType TypeCheck(ITypeEnvironment env)
        {
            ITypeCheckType a = Expr1.TypeCheck(env);

            if (!a.CompatibleWith(NegationUpperBound))
            {
                env.ReportError(String.Format("Negation not possible. Incompatible type: '{0}'. Only numerical types are supported.",
                                              a), SourceStartPosition, SourceEndPosition);

                return(NegationUpperBound);
            }

            return(a);
        }
Пример #27
0
            protected override ICloneableElement Clone(Dictionary <ICloneableElement, ICloneableElement> objectTree, Predicate <ICloneableElement> doClone)
            {
                if (!doClone(this))
                {
                    return(this);
                }

                if (!objectTree.TryGetValue(this, out var clone))
                {
                    objectTree.Add(this, clone = new IsTrue((ISqlExpression)Expr1.Clone(objectTree, doClone), TrueValue, FalseValue, WithNull, IsNot));
                }

                return(clone);
            }
Пример #28
0
            protected override ICloneableElement Clone(Dictionary <ICloneableElement, ICloneableElement> objectTree, Predicate <ICloneableElement> doClone)
            {
                if (!doClone(this))
                {
                    return(this);
                }

                if (!objectTree.TryGetValue(this, out var clone))
                {
                    objectTree.Add(this, clone = new NotExpr((ISqlExpression)Expr1.Clone(objectTree, doClone), IsNot, Precedence));
                }

                return(clone);
            }
Пример #29
0
        public bool Equals(ISqlExpression?other, Func <ISqlExpression, ISqlExpression, bool> comparer)
        {
            if (this == other)
            {
                return(true);
            }

            return
                (other is SqlBinaryExpression expr &&
                 Operation == expr.Operation &&
                 SystemType == expr.SystemType &&
                 Expr1.Equals(expr.Expr1, comparer) &&
                 Expr2.Equals(expr.Expr2, comparer) &&
                 comparer(this, other));
        }
Пример #30
0
            protected override ICloneableElement Clone(Dictionary <ICloneableElement, ICloneableElement> objectTree, Predicate <ICloneableElement> doClone)
            {
                if (!doClone(this))
                {
                    return(this);
                }

                if (!objectTree.TryGetValue(this, out var clone))
                {
                    objectTree.Add(this, clone = new SearchString(
                                       (ISqlExpression)Expr1.Clone(objectTree, doClone), IsNot, (ISqlExpression)Expr2.Clone(objectTree, doClone), Kind, IgnoreCase));
                }

                return(clone);
            }