/
krasninja
/
querycat
Обзор
Документация
Войти
/
krasninja
/
querycat
Код
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/QueryCat.Backend/Ast/Nodes/Select/SelectWithNode.cs
57 строк
1 KB
Ivan Kozhin
Make most of AST classes internal
04 дек 2023, 19:35
04 дек 2023, 19:35
7aa397b
Код
Авторство
О чём код?
using System.Text; namespace QueryCat.Backend.Ast.Nodes.Select; internal sealed class SelectWithNode : AstNode { public List<SelectColumnsSublistNode> ColumnNodes { get; } = new(); public SelectQueryNode QueryNode { get; } public string Name { get; } /// <inheritdoc /> public override string Code => "with_elem"; /// <inheritdoc /> public SelectWithNode(string name, SelectQueryNode queryNode) { Name = name; QueryNode = queryNode; } public SelectWithNode(SelectWithNode node) : this(node.Name, (SelectQueryNode)node.QueryNode.Clone()) { ColumnNodes = node.ColumnNodes.Select(c => (SelectColumnsSublistNode)c.Clone()).ToList(); node.CopyTo(this); } /// <inheritdoc /> public override object Clone() => new SelectWithNode(this); /// <inheritdoc /> public override IEnumerable<IAstNode> GetChildren() { foreach (var column in ColumnNodes) { yield return column; } yield return QueryNode; } /// <inheritdoc /> public override void Accept(AstVisitor visitor) => visitor.Visit(this); /// <inheritdoc /> public override string ToString() { var sb = new StringBuilder(); if (ColumnNodes.Count > 0) { sb.Append($" ({string.Join(", ", ColumnNodes.Select(c => c.ToString()))})"); } sb.Append($" {Name} AS ({QueryNode})"); return sb.ToString(); } }