/
krasninja
/
querycat
Обзор
Документация
Войти
/
krasninja
/
querycat
Код
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/QueryCat.Backend/Ast/Nodes/Select/SelectIdentifierExpressionNode.cs
64 строки
2 KB
Ivan Kozhin
Add experimental AST cache, fix AST nodes clone issues
28 апр 2024, 13:17
28 апр 2024, 13:17
145905e
Код
Авторство
О чём код?
using QueryCat.Backend.Ast.Nodes.Function; namespace QueryCat.Backend.Ast.Nodes.Select; /// <summary> /// The special node is used to distinguish between identifier and /// another identifier that can be only used for CTE expression. /// </summary> internal sealed class SelectIdentifierExpressionNode : IdentifierExpressionNode, ISelectAliasNode { /// <inheritdoc /> public string Alias { get; set; } /// <inheritdoc /> public override string Code => "cte_or_id"; /// <summary> /// Optional formatter. /// </summary> public FunctionCallNode? Format { get; set; } public List<SelectTableJoinedNode> JoinedNodes { get; } = new(); /// <inheritdoc /> public SelectIdentifierExpressionNode(IdentifierExpressionNode identifierExpressionNode, string alias) : base(identifierExpressionNode) { Alias = !string.IsNullOrEmpty(alias) ? alias : identifierExpressionNode.Name; } /// <inheritdoc /> public SelectIdentifierExpressionNode(SelectIdentifierExpressionNode node) : base(node) { Alias = node.Alias; if (node.Format != null) { Format = (FunctionCallNode)node.Format.Clone(); } JoinedNodes = node.JoinedNodes.Select(jn => (SelectTableJoinedNode)jn.Clone()).ToList(); } /// <inheritdoc /> public override IEnumerable<IAstNode> GetChildren() { foreach (var astNode in base.GetChildren()) { yield return astNode; } if (Format != null) { yield return Format; } foreach (var selectTableJoinedNode in JoinedNodes) { yield return selectTableJoinedNode; } } /// <inheritdoc /> public override void Accept(AstVisitor visitor) => visitor.Visit(this); /// <inheritdoc /> public override object Clone() => new SelectIdentifierExpressionNode(this); }