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); }
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); }
/// <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); }