/
krasninja
/
querycat
Обзор
Документация
Войти
/
krasninja
/
querycat
Код
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/QueryCat.Backend/Ast/Nodes/Update/UpdateNode.cs
56 строк
2 KB
Ivan Kozhin
Improve AST clone support
29 апр 2024, 20:52
29 апр 2024, 20:52
a38ad63
Код
Авторство
О чём код?
using QueryCat.Backend.Ast.Nodes.Select; namespace QueryCat.Backend.Ast.Nodes.Update; internal sealed class UpdateNode : AstNode, ISelectAliasNode { public ExpressionNode TargetExpressionNode { get; } public List<UpdateSetNode> SetNodes { get; } = new(); public SelectSearchConditionNode? SearchConditionNode { get; set; } /// <inheritdoc /> public string Alias { get; set; } = string.Empty; /// <inheritdoc /> public override string Code => "update"; /// <inheritdoc /> public UpdateNode(ExpressionNode targetExpressionNode, IEnumerable<UpdateSetNode> setNodes) { TargetExpressionNode = targetExpressionNode; SetNodes.AddRange(setNodes); } public UpdateNode(UpdateNode node) : this( (ExpressionNode)node.TargetExpressionNode.Clone(), node.SetNodes.Select(n => (UpdateSetNode)n.Clone()).ToList()) { if (node.SearchConditionNode != null) { SearchConditionNode = (SelectSearchConditionNode)node.SearchConditionNode.Clone(); } node.CopyTo(this); } /// <inheritdoc /> public override object Clone() => new UpdateNode(this); /// <inheritdoc /> public override IEnumerable<IAstNode> GetChildren() { yield return TargetExpressionNode; foreach (var setNode in SetNodes) { yield return setNode; } if (SearchConditionNode != null) { yield return SearchConditionNode; } } /// <inheritdoc /> public override void Accept(AstVisitor visitor) => visitor.Visit(this); }