Пример #1
0
        public static QsiDataDeleteActionNode VisitDeleteStatement(DeleteStatementContext context)
        {
            var partitionRestriction = context.partitionRestriction();
            var whereClause          = context.whereClause();
            var hintClause           = context.hintClause();

            QsiTableNode tableNode = new HanaTableReferenceNode
            {
                Identifier = context.tableName().qqi
            };

            if (partitionRestriction != null)
            {
                ((HanaTableReferenceNode)tableNode).Partition.Value = TreeHelper.Fragment(partitionRestriction.GetInputText());
            }

            if (whereClause != null || hintClause != null)
            {
                var derivedTableNode = new HanaDerivedTableNode
                {
                    Columns = { Value = TreeHelper.CreateAllColumnsDeclaration() },
                    Source  = { Value = tableNode }
                };

                if (whereClause != null)
                {
                    derivedTableNode.Where.Value = ExpressionVisitor.VisitWhereClause(whereClause);
                }

                if (hintClause != null)
                {
                    derivedTableNode.Hint.Value = TreeHelper.Fragment(hintClause.GetInputText());
                }

                tableNode = derivedTableNode;
            }

            var node = new QsiDataDeleteActionNode
            {
                Target = { Value = tableNode }
            };

            HanaTree.PutContextSpan(node, context);

            return(node);
        }
Пример #2
0
        public List <DeleteStatement> ParseDeleteStatement(DeleteStatementContext node)
        {
            List <DeleteStatement> statements = new List <DeleteStatement>();

            SingleDeleteStatementContext   single   = node.singleDeleteStatement();
            MultipleDeleteStatementContext multiple = node.multipleDeleteStatement();

            if (single != null)
            {
                DeleteStatement statement = new DeleteStatement();
                statement.TableName = this.ParseTableName(single.tableName());
                statement.Condition = this.ParseCondition(single.expression());

                statements.Add(statement);
            }

            return(statements);
        }
Пример #3
0
        public static DeleteQueryInfo VisitDeleteStatement(DeleteStatementContext context)
        {
            var queryInfo = new DeleteQueryInfo
            {
                TableName       = VisitTableName(context.tableName()),
                WhereExpression = context.expression() != null?
                                  ExpressionVisitor.VisitExpression(context.expression())
                                      : null
            };

            if (context.limitClause() != null)
            {
                var limitClause = context.limitClause();

                if (int.TryParse(limitClause.limit.GetText(), out int limit))
                {
                    queryInfo.Limit = limit;
                }
            }

            return(queryInfo);
        }
Пример #4
0
        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()