コード例 #1
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);
            }
コード例 #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
            protected override void Walk(WalkOptions options, Func <ISqlExpression, ISqlExpression> func)
            {
                base.Walk(options, func);
                Expr2 = Expr2.Walk(options, func) !;

                Escape = Escape?.Walk(options, func);
            }
コード例 #4
0
            protected override void Walk <TContext>(WalkOptions options, TContext context, Func <TContext, ISqlExpression, ISqlExpression> func)
            {
                base.Walk(options, context, func);
                Expr2 = Expr2.Walk(options, context, func) !;

                Escape = Escape?.Walk(options, context, func);
            }
コード例 #5
0
        ISqlExpression ISqlExpressionWalkable.Walk(bool skipColumns, Func <ISqlExpression, ISqlExpression> func)
        {
            Expr1 = Expr1.Walk(skipColumns, func);
            Expr2 = Expr2.Walk(skipColumns, func);

            return(func(this));
        }
コード例 #6
0
ファイル: SqlBinaryExpression.cs プロジェクト: zxd60/linq2db
        ISqlExpression ISqlExpressionWalkable.Walk(WalkOptions options, Func <ISqlExpression, ISqlExpression> func)
        {
            Expr1 = Expr1.Walk(options, func) !;
            Expr2 = Expr2.Walk(options, func) !;

            return(func(this));
        }
コード例 #7
0
        protected override void Walk(bool skipColumns, Func <IQueryExpression, IQueryExpression> func)
        {
            base.Walk(skipColumns, func);
            Expr2 = Expr2.Walk(skipColumns, func);

            Escape = Escape?.Walk(skipColumns, func);
        }
コード例 #8
0
 public Tuple(KaitaiStream p__io, Expr2.ModStr p__parent = null, Expr2 p__root = null) : base(p__io)
 {
     m_parent = p__parent;
     m_root   = p__root;
     f_avg    = false;
     _read();
 }
コード例 #9
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);
        }
コード例 #10
0
        public IFormType BuildForm(ITypeEnvironment env)
        {
            IFormType a    = Expr1.BuildForm(env);
            IFormType b    = Expr2.BuildForm(env);
            IFormType type = a.GetLeastUpperBound(b);

            return(type);
        }
コード例 #11
0
 public override void UpdatePlacements(ref int actx, int acty, ref int linehi)
 {
     AndLabel.Visible = true;
     Expr1.UpdatePlacement(ref actx, acty);
     AndLabel.Left = actx;
     AndLabel.Top  = acty;
     actx         += AndLabel.Width;
     Expr2.UpdatePlacement(ref actx, acty);
 }
コード例 #12
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);
        }
コード例 #13
0
 public ModStr(KaitaiStream p__io, Expr2 p__parent = null, Expr2 p__root = null) : base(p__io)
 {
     m_parent = p__parent;
     m_root   = p__root;
     f_lenMod = false;
     f_char5  = false;
     f_tuple5 = false;
     _read();
 }
コード例 #14
0
ファイル: SqlBinaryExpression.cs プロジェクト: zxd60/linq2db
        StringBuilder IQueryElement.ToString(StringBuilder sb, Dictionary <IQueryElement, IQueryElement> dic)
        {
            Expr1
            .ToString(sb, dic)
            .Append(' ')
            .Append(Operation)
            .Append(' ');

            return(Expr2.ToString(sb, dic));
        }
コード例 #15
0
ファイル: SqlBinaryExpression.cs プロジェクト: zxd60/linq2db
        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
ファイル: Or.cs プロジェクト: GregEakin/Dragon
        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     = 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);
        }
コード例 #19
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);
        }
コード例 #20
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);
        }
コード例 #21
0
 public Expr2(KaitaiStream p__io, KaitaiStruct p__parent = null, Expr2 p__root = null) : base(p__io)
 {
     m_parent     = p__parent;
     m_root       = p__root ?? this;
     f_str1LenMod = false;
     f_str1Len    = false;
     f_str1Tuple5 = false;
     f_str2Tuple5 = false;
     f_str1Avg    = false;
     f_str1Byte1  = false;
     f_str1Char5  = false;
     _read();
 }
コード例 #22
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());
        }
コード例 #23
0
ファイル: SqlPredicate.cs プロジェクト: stsrki/linq2db
            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);
            }
コード例 #24
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);
            }
        }
コード例 #25
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("'||' not possible. Incompatible types: '{0}', '{1}'. Only the bool type is supported.",
                                              a, b), SourceStartPosition, SourceEndPosition);

                return(ExpressionUpperBound);
            }

            return(a.GetLeastUpperBound(b));
        }
コード例 #26
0
ファイル: SqlBinaryExpression.cs プロジェクト: zxd60/linq2db
        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));
        }
コード例 #27
0
 public override void Hide()
 {
     if (Expr1 != null)
     {
         Expr1.Hide();
     }
     if (Expr2 != null)
     {
         Expr2.Hide();
     }
     if (AndLabel != null)
     {
         AndLabel.Hide();
     }
 }
コード例 #28
0
        bool IEquatable <ISqlExpression> .Equals(ISqlExpression other)
        {
            if (this == other)
            {
                return(true);
            }

            var expr = other as SqlBinaryExpression;

            return
                (expr != null &&
                 Operation == expr.Operation &&
                 SystemType == expr.SystemType &&
                 Expr1.Equals(expr.Expr1) &&
                 Expr2.Equals(expr.Expr2));
        }
コード例 #29
0
        public bool Equals(IQueryExpression other, Func <IQueryExpression, IQueryExpression, bool> comparer)
        {
            if (this == other)
            {
                return(true);
            }

            var expr = other as ISqlBinaryExpression;

            return
                (expr != null &&
                 Operation == expr.Operation &&
                 SystemType == expr.SystemType &&
                 Expr1.Equals(expr.Expr1, comparer) &&
                 Expr2.Equals(expr.Expr2, comparer) &&
                 comparer(this, other));
        }
コード例 #30
0
ファイル: SqlPredicate.cs プロジェクト: stsrki/linq2db
            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 Between(
                                       (ISqlExpression)Expr1.Clone(objectTree, doClone),
                                       IsNot,
                                       (ISqlExpression)Expr2.Clone(objectTree, doClone),
                                       (ISqlExpression)Expr3.Clone(objectTree, doClone)));
                }

                return(clone);
            }