public static IQsiTreeNode VisitUpdateStmt(Update_stmtContext context) { var node = ImpalaTree.CreateWithSpan <QsiDataUpdateActionNode>(context); var wildcard = new QsiAllColumnNode(); var targetTable = new QsiDerivedTableNode { Columns = { Value = new QsiColumnsDeclarationNode { Columns = { wildcard } } } }; if (context.from is not null) { if (context.target.children.Count != 1) { throw new QsiException(QsiError.SyntaxError, $"'{context.target.GetInputText()}' is not a valid table alias or reference."); } wildcard.Path = IdentifierVisitor.VisitDottedPath(context.target); targetTable.Source.Value = TableVisitor.VisitFromClause(context.from); } else { targetTable.Source.Value = TableVisitor.VisitDottedPath(context.target); } if (context.where is not null) { targetTable.Where.Value = ExpressionVisitor.VisitWhereClause(context.where); } node.Target.Value = targetTable; node.SetValues.AddRange(ExpressionVisitor.VisitUpdateSetExprList(context.values)); return(node); }
public static QsiActionNode VisitDeleteStatement(DeleteStatement node) { var table = TableVisitor.VisitTableNode(node.Table); if (node.Where != null || node.OrderBy.Any() || node.Limit != null) { var derivedTable = new QsiDerivedTableNode(); derivedTable.Columns.SetValue(TreeHelper.CreateAllColumnsDeclaration()); derivedTable.Source.SetValue(table); if (node.Where != null) { derivedTable.Where.SetValue(ExpressionVisitor.VisitWhere(node.Where)); } if (node.OrderBy.Any()) { derivedTable.Order.SetValue(ExpressionVisitor.VisitOrderBy(node.OrderBy)); } if (node.Limit != null) { derivedTable.Limit.SetValue(ExpressionVisitor.VisitLimitOffset(node.Limit, null)); } table = derivedTable; } var deleteAction = new PDeleteActionNode { Hints = node.Hint?.Hints }; deleteAction.Target.SetValue(table); PTree.RawNode[deleteAction] = node; return(deleteAction); }
public static QsiActionNode VisitDeleteStatement(DeleteStatementContext context) { var derivedNode = new QsiDerivedTableNode(); var withClause = context.withClause(); var whereClause = context.whereClause(); var tableAliasRefList = context.tableAliasRefList(); if (withClause != null) { derivedNode.Directives.SetValue(TableVisitor.VisitWithClause(withClause)); } if (whereClause != null) { derivedNode.Where.SetValue(ExpressionVisitor.VisitWhereClause(whereClause)); } if (tableAliasRefList != null) { var tableReferenceList = context.tableReferenceList(); (QsiQualifiedIdentifier Identifier, bool Wildcard)[] aliases = tableAliasRefList.tableRefWithWildcard()
public static QsiDerivedTableNode VisitWithListElement(WithListElementContext context) { var node = new QsiDerivedTableNode(); node.Alias.SetValue(new QsiAliasNode { Name = context.name.qi }); var columnListClause = context.columnListClause(); node.Columns.SetValue( columnListClause != null ? VisitColumnListClause(columnListClause, QsiSequentialColumnType.Default) : TreeHelper.CreateAllColumnsDeclaration() ); node.Source.SetValue(VisitSubquery(context.subquery())); HanaTree.PutContextSpan(node, context); return(node); }
public static IQsiDefinitionNode VisitCreateViewStatement(CreateTableStatement statement) { var node = new PViewDefinitionNode { Identifier = IdentifierVisitor.Visit(statement.TableName) }; if (statement.ColumnDefs.Any()) { node.DynamicColumns = new QsiColumnsDeclarationNode(); node.DynamicColumns.Columns.AddRange(statement.ColumnDefs.Select(TableVisitor.VisitDynamicColumn)); } QsiTableNode tableNode = TreeHelper.Create <QsiTableReferenceNode>(n => { n.Identifier = IdentifierVisitor.Visit(statement.BaseTableName); PTree.RawNode[n] = statement.BaseTableName; }); if (statement.WhereClause != null) { var derivedTableNode = new QsiDerivedTableNode(); derivedTableNode.Columns.Value = TreeHelper.CreateAllColumnsDeclaration(); derivedTableNode.Where.Value = ExpressionVisitor.VisitWhere(statement.WhereClause); derivedTableNode.Source.Value = tableNode; node.Source.Value = derivedTableNode; } else { node.Source.Value = tableNode; } PTree.RawNode[node] = statement; return(node); }