Beispiel #1
0
        public static QsiDataInsertActionNode VisitInsertStatement(InsertStatementContext context)
        {
            var partitionRestriction = context.partitionRestriction();
            var columnListClause     = context.columnListClause();
            var hintClause           = context.hintClause();
            var valueListClause      = context.valueListClause();

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

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

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

            if (columnListClause != null)
            {
                node.Columns = columnListClause.list
                               .Select(x => new QsiQualifiedIdentifier(x[^ 1]))
Beispiel #2
0
        // tableRef
        private void DeparseHanaTableReferenceNode(ScriptWriter writer, HanaTableReferenceNode node, QsiScript script)
        {
            // tableName
            writer.Write(node.Identifier);

            if (!node.Behavior.IsEmpty)
            {
                writer.WriteSpace();
                DeparseTreeNode(writer, node.Behavior.Value, script);
            }

            // partitionRestriction?
            if (!node.Partition.IsEmpty)
            {
                writer.WriteSpace();
                writer.Write(node.Partition.Value.Text);
            }

            // tableSampleClause?
            if (!node.Sampling.IsEmpty)
            {
                writer.WriteSpace();
                writer.Write(node.Sampling.Value.Text);
            }
        }
Beispiel #3
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);
        }