Пример #1
0
        internal override object Clone(SqlNodeCloneContext context)
        {
            if (context.NodeMapping.ContainsKey(this))
            {
                return(context.NodeMapping[this]);
            }

            SqlIf clone;

            clone = new SqlIf((SqlExpression)condition.Clone(context),
                              (SqlStatement)trueStatement.Clone(context),
                              falseStatement == null ? null : (SqlStatement)falseStatement.Clone(context));
            context.NodeMapping[this] = clone;
            return(clone);
        }
Пример #2
0
        internal override object Clone(SqlNodeCloneContext context)
        {
            if (context.NodeMapping.ContainsKey(this))
            {
                return(context.NodeMapping[this]);
            }

            SqlWhile clone = new SqlWhile((SqlExpression)condition.Clone(context));

            if (statement != null)
            {
                clone.Statement = (SqlStatement)statement.Clone(context);
            }
            context.NodeMapping[this] = clone;

            return(clone);
        }
Пример #3
0
            /// <summary>
            /// We need to use same paremeters as for original query
            /// </summary>
            /// <param name="original"></param>
            SqlStatement Clone(SqlStatement original)
            {
                var clone = original.Clone();

                var pairs = from o in original.Parameters.Distinct()
                            join n in clone.Parameters.Distinct() on o.Name equals n.Name
                            select new { Old = o, New = n };

                var dic = pairs.ToDictionary(p => p.New, p => p.Old);

                clone = new QueryVisitor().Convert(clone, e =>
                                                   e is SqlParameter param && dic.TryGetValue(param, out var newParam) ? newParam : e);

                clone.Parameters.Clear();
                clone.Parameters.AddRange(original.Parameters);

                return(clone);
            }