View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package org.apache.shardingsphere.sql.parser.opengauss.visitor.statement.type;
19  
20  import org.antlr.v4.runtime.ParserRuleContext;
21  import org.antlr.v4.runtime.misc.Interval;
22  import org.apache.shardingsphere.sql.parser.api.ASTNode;
23  import org.apache.shardingsphere.sql.parser.api.visitor.statement.type.DDLStatementVisitor;
24  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AbsoluteCountContext;
25  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AddColumnSpecificationContext;
26  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AddConstraintSpecificationContext;
27  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AllContext;
28  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterAggregateContext;
29  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterConversionContext;
30  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterDefaultPrivilegesContext;
31  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterDefinitionClauseContext;
32  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterDirectoryContext;
33  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterDomainContext;
34  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterExtensionContext;
35  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterForeignTableContext;
36  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterFunctionContext;
37  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterGroupContext;
38  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterIndexContext;
39  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterLanguageContext;
40  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterMaterializedViewContext;
41  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterPackageContext;
42  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterProcedureContext;
43  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterRenameViewContext;
44  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterRuleContext;
45  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterSchemaContext;
46  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterSequenceContext;
47  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterSynonymContext;
48  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterTableActionContext;
49  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterTableContext;
50  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterTablespaceContext;
51  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterTextSearchDictionaryContext;
52  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterTextSearchParserContext;
53  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterTextSearchTemplateContext;
54  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterTypeContext;
55  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AlterViewContext;
56  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.BackwardAllContext;
57  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.BackwardContext;
58  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.BackwardCountContext;
59  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CloseContext;
60  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.ColumnConstraintContext;
61  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.ColumnDefinitionContext;
62  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CommentContext;
63  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CountContext;
64  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CreateAggregateContext;
65  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CreateCastContext;
66  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CreateConversionContext;
67  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CreateDatabaseContext;
68  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CreateDefinitionClauseContext;
69  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CreateDefinitionContext;
70  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CreateDirectoryContext;
71  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CreateDomainContext;
72  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CreateExtensionContext;
73  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CreateFunctionContext;
74  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CreateIndexContext;
75  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CreateLanguageContext;
76  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CreateProcedureContext;
77  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CreatePublicationContext;
78  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CreateRuleContext;
79  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CreateSchemaContext;
80  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CreateSequenceContext;
81  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CreateSynonymContext;
82  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CreateTableContext;
83  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CreateTablespaceContext;
84  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CreateTextSearchContext;
85  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CreateTypeContext;
86  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CreateViewContext;
87  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CursorContext;
88  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.CursorNameContext;
89  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.DeallocateContext;
90  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.DeclareContext;
91  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.DropCastContext;
92  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.DropColumnSpecificationContext;
93  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.DropConstraintSpecificationContext;
94  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.DropConversionContext;
95  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.DropDatabaseContext;
96  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.DropDirectoryContext;
97  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.DropDomainContext;
98  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.DropExtensionContext;
99  import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.DropFunctionContext;
100 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.DropIndexContext;
101 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.DropLanguageContext;
102 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.DropProcedureContext;
103 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.DropPublicationContext;
104 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.DropRuleContext;
105 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.DropSchemaContext;
106 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.DropSequenceContext;
107 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.DropServerContext;
108 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.DropSynonymContext;
109 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.DropTableContext;
110 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.DropTablespaceContext;
111 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.DropTypeContext;
112 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.DropViewContext;
113 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.FetchContext;
114 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.FirstContext;
115 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.ForwardAllContext;
116 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.ForwardContext;
117 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.ForwardCountContext;
118 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.FuncArgExprContext;
119 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.FunctionExprWindowlessContext;
120 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.IndexElemContext;
121 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.IndexNameContext;
122 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.IndexNamesContext;
123 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.IndexParamsContext;
124 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.LastContext;
125 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.ModifyColumnSpecificationContext;
126 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.ModifyConstraintSpecificationContext;
127 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.MoveContext;
128 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.NameContext;
129 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.NameListContext;
130 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.NextContext;
131 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.PrepareContext;
132 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.PriorContext;
133 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.RelativeCountContext;
134 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.RenameColumnSpecificationContext;
135 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.RenameTableSpecificationContext;
136 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.TableConstraintContext;
137 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.TableConstraintUsingIndexContext;
138 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.TableNameClauseContext;
139 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.TableNamesClauseContext;
140 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.TruncateTableContext;
141 import org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.ValidateConstraintSpecificationContext;
142 import org.apache.shardingsphere.sql.parser.opengauss.visitor.statement.OpenGaussStatementVisitor;
143 import org.apache.shardingsphere.sql.parser.statement.core.enums.DirectionType;
144 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.AlterDefinitionSegment;
145 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.CreateDefinitionSegment;
146 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.ColumnDefinitionSegment;
147 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.alter.AddColumnDefinitionSegment;
148 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.alter.DropColumnDefinitionSegment;
149 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.alter.ModifyColumnDefinitionSegment;
150 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.alter.RenameColumnSegment;
151 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.ConstraintDefinitionSegment;
152 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.ConstraintSegment;
153 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.alter.AddConstraintDefinitionSegment;
154 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.alter.DropConstraintDefinitionSegment;
155 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.alter.ModifyConstraintDefinitionSegment;
156 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.alter.ValidateConstraintDefinitionSegment;
157 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.cursor.CursorNameSegment;
158 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.cursor.DirectionSegment;
159 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.index.IndexNameSegment;
160 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.index.IndexSegment;
161 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.RenameTableDefinitionSegment;
162 import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
163 import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
164 import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.FunctionSegment;
165 import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DataTypeSegment;
166 import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.NameSegment;
167 import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.OwnerSegment;
168 import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
169 import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment;
170 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.AlterPackageStatement;
171 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.CloseStatement;
172 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.CommentStatement;
173 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.CursorStatement;
174 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.DeallocateStatement;
175 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.FetchStatement;
176 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.MoveStatement;
177 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.PrepareStatement;
178 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.TruncateStatement;
179 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.database.CreateDatabaseStatement;
180 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.database.DropDatabaseStatement;
181 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.directory.CreateDirectoryStatement;
182 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.directory.DropDirectoryStatement;
183 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.domain.AlterDomainStatement;
184 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.domain.CreateDomainStatement;
185 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.function.AlterFunctionStatement;
186 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.function.CreateFunctionStatement;
187 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.function.DropFunctionStatement;
188 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.index.AlterIndexStatement;
189 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.index.CreateIndexStatement;
190 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.index.DropIndexStatement;
191 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.procedure.AlterProcedureStatement;
192 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.procedure.CreateProcedureStatement;
193 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.procedure.DropProcedureStatement;
194 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.schema.AlterSchemaStatement;
195 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.schema.CreateSchemaStatement;
196 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.schema.DropSchemaStatement;
197 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.sequence.AlterSequenceStatement;
198 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.sequence.CreateSequenceStatement;
199 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.sequence.DropSequenceStatement;
200 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.server.DropServerStatement;
201 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.synonym.AlterSynonymStatement;
202 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.synonym.CreateSynonymStatement;
203 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.synonym.DropSynonymStatement;
204 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.table.AlterTableStatement;
205 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.table.CreateTableStatement;
206 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.table.DropTableStatement;
207 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.tablespace.AlterTablespaceStatement;
208 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.tablespace.CreateTablespaceStatement;
209 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.tablespace.DropTablespaceStatement;
210 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.type.AlterTypeStatement;
211 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.type.CreateTypeStatement;
212 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.view.AlterMaterializedViewStatement;
213 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.view.AlterViewStatement;
214 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.view.CreateViewStatement;
215 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.view.DropViewStatement;
216 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.DeleteStatement;
217 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.InsertStatement;
218 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.SelectStatement;
219 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.UpdateStatement;
220 import org.apache.shardingsphere.sql.parser.statement.core.value.collection.CollectionValue;
221 import org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
222 import org.apache.shardingsphere.sql.parser.statement.core.value.literal.impl.NumberLiteralValue;
223 import org.apache.shardingsphere.sql.parser.statement.opengauss.ddl.OpenGaussAlterDirectoryStatement;
224 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.PostgreSQLAlterDefaultPrivilegesStatement;
225 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.PostgreSQLDeclareStatement;
226 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.PostgreSQLDropDomainStatement;
227 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.PostgreSQLDropTypeStatement;
228 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.aggregate.PostgreSQLAlterAggregateStatement;
229 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.aggregate.PostgreSQLCreateAggregateStatement;
230 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.cast.PostgreSQLCreateCastStatement;
231 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.cast.PostgreSQLDropCastStatement;
232 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.conversion.PostgreSQLAlterConversionStatement;
233 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.conversion.PostgreSQLCreateConversionStatement;
234 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.conversion.PostgreSQLDropConversionStatement;
235 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.extension.PostgreSQLAlterExtensionStatement;
236 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.extension.PostgreSQLCreateExtensionStatement;
237 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.extension.PostgreSQLDropExtensionStatement;
238 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.foreigntable.PostgreSQLAlterForeignTableStatement;
239 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.group.PostgreSQLAlterGroupStatement;
240 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.language.PostgreSQLAlterLanguageStatement;
241 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.language.PostgreSQLCreateLanguageStatement;
242 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.language.PostgreSQLDropLanguageStatement;
243 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.publication.PostgreSQLCreatePublicationStatement;
244 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.publication.PostgreSQLDropPublicationStatement;
245 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.rule.PostgreSQLAlterRuleStatement;
246 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.rule.PostgreSQLCreateRuleStatement;
247 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.rule.PostgreSQLDropRuleStatement;
248 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.textsearch.PostgreSQLAlterTextSearchStatement;
249 import org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.textsearch.PostgreSQLCreateTextSearchStatement;
250 
251 import java.util.ArrayList;
252 import java.util.Collection;
253 import java.util.Collections;
254 import java.util.Iterator;
255 import java.util.LinkedList;
256 import java.util.Optional;
257 import java.util.stream.Collectors;
258 
259 /**
260  * DDL statement visitor for openGauss.
261  */
262 public final class OpenGaussDDLStatementVisitor extends OpenGaussStatementVisitor implements DDLStatementVisitor {
263     
264     @SuppressWarnings("unchecked")
265     @Override
266     public ASTNode visitCreateTable(final CreateTableContext ctx) {
267         CreateTableStatement result = new CreateTableStatement();
268         result.setTable((SimpleTableSegment) visit(ctx.tableName()));
269         result.setIfNotExists(null != ctx.ifNotExists());
270         if (null != ctx.createDefinitionClause()) {
271             CollectionValue<CreateDefinitionSegment> createDefinitions = (CollectionValue<CreateDefinitionSegment>) visit(ctx.createDefinitionClause());
272             for (CreateDefinitionSegment each : createDefinitions.getValue()) {
273                 if (each instanceof ColumnDefinitionSegment) {
274                     result.getColumnDefinitions().add((ColumnDefinitionSegment) each);
275                 } else if (each instanceof ConstraintDefinitionSegment) {
276                     result.getConstraintDefinitions().add((ConstraintDefinitionSegment) each);
277                 }
278             }
279         }
280         return result;
281     }
282     
283     @Override
284     public ASTNode visitCreateDefinitionClause(final CreateDefinitionClauseContext ctx) {
285         CollectionValue<CreateDefinitionSegment> result = new CollectionValue<>();
286         for (CreateDefinitionContext each : ctx.createDefinition()) {
287             if (null != each.columnDefinition()) {
288                 result.getValue().add((ColumnDefinitionSegment) visit(each.columnDefinition()));
289             }
290             if (null != each.tableConstraint()) {
291                 result.getValue().add((ConstraintDefinitionSegment) visit(each.tableConstraint()));
292             }
293         }
294         return result;
295     }
296     
297     @SuppressWarnings("unchecked")
298     @Override
299     public ASTNode visitAlterTable(final AlterTableContext ctx) {
300         AlterTableStatement result = new AlterTableStatement();
301         result.setTable((SimpleTableSegment) visit(ctx.tableNameClause().tableName()));
302         if (null != ctx.alterDefinitionClause()) {
303             for (AlterDefinitionSegment each : ((CollectionValue<AlterDefinitionSegment>) visit(ctx.alterDefinitionClause())).getValue()) {
304                 if (each instanceof AddColumnDefinitionSegment) {
305                     result.getAddColumnDefinitions().add((AddColumnDefinitionSegment) each);
306                 } else if (each instanceof ModifyColumnDefinitionSegment) {
307                     result.getModifyColumnDefinitions().add((ModifyColumnDefinitionSegment) each);
308                 } else if (each instanceof DropColumnDefinitionSegment) {
309                     result.getDropColumnDefinitions().add((DropColumnDefinitionSegment) each);
310                 } else if (each instanceof AddConstraintDefinitionSegment) {
311                     result.getAddConstraintDefinitions().add((AddConstraintDefinitionSegment) each);
312                 } else if (each instanceof ValidateConstraintDefinitionSegment) {
313                     result.getValidateConstraintDefinitions().add((ValidateConstraintDefinitionSegment) each);
314                 } else if (each instanceof ModifyConstraintDefinitionSegment) {
315                     result.getModifyConstraintDefinitions().add((ModifyConstraintDefinitionSegment) each);
316                 } else if (each instanceof DropConstraintDefinitionSegment) {
317                     result.getDropConstraintDefinitions().add((DropConstraintDefinitionSegment) each);
318                 } else if (each instanceof RenameTableDefinitionSegment) {
319                     result.setRenameTable(((RenameTableDefinitionSegment) each).getRenameTable());
320                 } else if (each instanceof RenameColumnSegment) {
321                     result.getRenameColumnDefinitions().add((RenameColumnSegment) each);
322                 }
323             }
324         }
325         return result;
326     }
327     
328     @Override
329     public ASTNode visitAlterAggregate(final AlterAggregateContext ctx) {
330         return new PostgreSQLAlterAggregateStatement();
331     }
332     
333     @Override
334     public ASTNode visitAlterDefaultPrivileges(final AlterDefaultPrivilegesContext ctx) {
335         return new PostgreSQLAlterDefaultPrivilegesStatement();
336     }
337     
338     @Override
339     public ASTNode visitAlterDefinitionClause(final AlterDefinitionClauseContext ctx) {
340         CollectionValue<AlterDefinitionSegment> result = new CollectionValue<>();
341         if (null != ctx.alterTableActions()) {
342             result.getValue().addAll(ctx.alterTableActions().alterTableAction().stream().flatMap(each -> getAlterDefinitionSegments(each).stream()).collect(Collectors.toList()));
343         }
344         if (null != ctx.renameColumnSpecification()) {
345             result.getValue().add((RenameColumnSegment) visit(ctx.renameColumnSpecification()));
346         }
347         if (null != ctx.renameTableSpecification()) {
348             result.getValue().add((RenameTableDefinitionSegment) visit(ctx.renameTableSpecification()));
349         }
350         return result;
351     }
352     
353     @SuppressWarnings("unchecked")
354     private Collection<AlterDefinitionSegment> getAlterDefinitionSegments(final AlterTableActionContext ctx) {
355         Collection<AlterDefinitionSegment> result = new LinkedList<>();
356         if (null != ctx.addColumnSpecification()) {
357             result.addAll(((CollectionValue<AddColumnDefinitionSegment>) visit(ctx.addColumnSpecification())).getValue());
358         }
359         if (null != ctx.addConstraintSpecification() && null != ctx.addConstraintSpecification().tableConstraint()) {
360             result.add((AddConstraintDefinitionSegment) visit(ctx.addConstraintSpecification()));
361         }
362         if (null != ctx.validateConstraintSpecification()) {
363             result.add((ValidateConstraintDefinitionSegment) visit(ctx.validateConstraintSpecification()));
364         }
365         if (null != ctx.modifyColumnSpecification()) {
366             result.add((ModifyColumnDefinitionSegment) visit(ctx.modifyColumnSpecification()));
367         }
368         if (null != ctx.modifyConstraintSpecification()) {
369             result.add((ModifyConstraintDefinitionSegment) visit(ctx.modifyConstraintSpecification()));
370         }
371         if (null != ctx.dropColumnSpecification()) {
372             result.add((DropColumnDefinitionSegment) visit(ctx.dropColumnSpecification()));
373         }
374         if (null != ctx.dropConstraintSpecification()) {
375             result.add((DropConstraintDefinitionSegment) visit(ctx.dropConstraintSpecification()));
376         }
377         return result;
378     }
379     
380     @Override
381     public ASTNode visitAlterForeignTable(final AlterForeignTableContext ctx) {
382         return new PostgreSQLAlterForeignTableStatement();
383     }
384     
385     @Override
386     public ASTNode visitAlterGroup(final AlterGroupContext ctx) {
387         return new PostgreSQLAlterGroupStatement();
388     }
389     
390     @Override
391     public ASTNode visitAlterPackage(final AlterPackageContext ctx) {
392         return new AlterPackageStatement();
393     }
394     
395     @Override
396     public ASTNode visitAlterMaterializedView(final AlterMaterializedViewContext ctx) {
397         return new AlterMaterializedViewStatement();
398     }
399     
400     @Override
401     public ASTNode visitAddConstraintSpecification(final AddConstraintSpecificationContext ctx) {
402         return new AddConstraintDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), (ConstraintDefinitionSegment) visit(ctx.tableConstraint()));
403     }
404     
405     @Override
406     public ASTNode visitValidateConstraintSpecification(final ValidateConstraintSpecificationContext ctx) {
407         return new ValidateConstraintDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), (ConstraintSegment) visit(ctx.constraintName()));
408     }
409     
410     @Override
411     public ASTNode visitModifyConstraintSpecification(final ModifyConstraintSpecificationContext ctx) {
412         return new ModifyConstraintDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), (ConstraintSegment) visit(ctx.constraintName()));
413     }
414     
415     @Override
416     public ASTNode visitDropConstraintSpecification(final DropConstraintSpecificationContext ctx) {
417         return new DropConstraintDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), (ConstraintSegment) visit(ctx.constraintName()));
418     }
419     
420     @Override
421     public ASTNode visitAlterDomain(final AlterDomainContext ctx) {
422         return new AlterDomainStatement();
423     }
424     
425     @Override
426     public ASTNode visitRenameTableSpecification(final RenameTableSpecificationContext ctx) {
427         RenameTableDefinitionSegment result = new RenameTableDefinitionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex());
428         TableNameSegment tableName = new TableNameSegment(ctx.identifier().start.getStartIndex(), ctx.identifier().stop.getStopIndex(), (IdentifierValue) visit(ctx.identifier()));
429         result.setRenameTable(new SimpleTableSegment(tableName));
430         return result;
431     }
432     
433     @Override
434     public ASTNode visitAddColumnSpecification(final AddColumnSpecificationContext ctx) {
435         CollectionValue<AddColumnDefinitionSegment> result = new CollectionValue<>();
436         ColumnDefinitionContext columnDefinition = ctx.columnDefinition();
437         if (null != columnDefinition) {
438             AddColumnDefinitionSegment addColumnDefinition = new AddColumnDefinitionSegment(
439                     ctx.columnDefinition().getStart().getStartIndex(), columnDefinition.getStop().getStopIndex(), Collections.singleton((ColumnDefinitionSegment) visit(columnDefinition)));
440             result.getValue().add(addColumnDefinition);
441         }
442         return result;
443     }
444     
445     @Override
446     public ASTNode visitColumnDefinition(final ColumnDefinitionContext ctx) {
447         ColumnSegment column = (ColumnSegment) visit(ctx.columnName());
448         DataTypeSegment dataType = (DataTypeSegment) visit(ctx.dataType());
449         boolean isPrimaryKey = ctx.columnConstraint().stream().anyMatch(each -> null != each.columnConstraintOption() && null != each.columnConstraintOption().primaryKey());
450         // TODO parse not null
451         ColumnDefinitionSegment result = new ColumnDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, dataType, isPrimaryKey, false, getText(ctx));
452         for (ColumnConstraintContext each : ctx.columnConstraint()) {
453             if (null != each.columnConstraintOption().tableName()) {
454                 result.getReferencedTables().add((SimpleTableSegment) visit(each.columnConstraintOption().tableName()));
455             }
456         }
457         return result;
458     }
459     
460     private String getText(final ParserRuleContext ctx) {
461         return ctx.start.getInputStream().getText(new Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex()));
462     }
463     
464     @Override
465     public ASTNode visitTableConstraintUsingIndex(final TableConstraintUsingIndexContext ctx) {
466         ConstraintDefinitionSegment result = new ConstraintDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex());
467         if (null != ctx.constraintName()) {
468             result.setConstraintName((ConstraintSegment) visit(ctx.constraintName()));
469         }
470         if (null != ctx.indexName()) {
471             result.setIndexName((IndexSegment) visit(ctx.indexName()));
472         }
473         return result;
474     }
475     
476     @SuppressWarnings("unchecked")
477     @Override
478     public ASTNode visitTableConstraint(final TableConstraintContext ctx) {
479         ConstraintDefinitionSegment result = new ConstraintDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex());
480         if (null != ctx.constraintClause()) {
481             result.setConstraintName((ConstraintSegment) visit(ctx.constraintClause().constraintName()));
482         }
483         if (null != ctx.tableConstraintOption().primaryKey()) {
484             result.getPrimaryKeyColumns().addAll(((CollectionValue<ColumnSegment>) visit(ctx.tableConstraintOption().columnNames(0))).getValue());
485         }
486         if (null != ctx.tableConstraintOption().FOREIGN()) {
487             result.setReferencedTable((SimpleTableSegment) visit(ctx.tableConstraintOption().tableName()));
488         }
489         return result;
490     }
491     
492     @Override
493     public ASTNode visitModifyColumnSpecification(final ModifyColumnSpecificationContext ctx) {
494         // TODO visit pk and table ref
495         ColumnSegment column = (ColumnSegment) visit(ctx.modifyColumn().columnName());
496         DataTypeSegment dataType = null == ctx.dataType() ? null : (DataTypeSegment) visit(ctx.dataType());
497         ColumnDefinitionSegment columnDefinition = new ColumnDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, dataType, false, false, getText(ctx));
498         return new ModifyColumnDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), columnDefinition);
499     }
500     
501     @Override
502     public ASTNode visitDropColumnSpecification(final DropColumnSpecificationContext ctx) {
503         return new DropColumnDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), Collections.singleton((ColumnSegment) visit(ctx.columnName())));
504     }
505     
506     @Override
507     public ASTNode visitRenameColumnSpecification(final RenameColumnSpecificationContext ctx) {
508         return new RenameColumnSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), (ColumnSegment) visit(ctx.columnName(0)), (ColumnSegment) visit(ctx.columnName(1)));
509     }
510     
511     @SuppressWarnings("unchecked")
512     @Override
513     public ASTNode visitDropTable(final DropTableContext ctx) {
514         boolean containsCascade = null != ctx.dropTableOpt() && null != ctx.dropTableOpt().CASCADE();
515         DropTableStatement result = new DropTableStatement();
516         result.setIfExists(null != ctx.ifExists());
517         result.setContainsCascade(containsCascade);
518         result.getTables().addAll(((CollectionValue<SimpleTableSegment>) visit(ctx.tableNames())).getValue());
519         return result;
520     }
521     
522     @SuppressWarnings("unchecked")
523     @Override
524     public ASTNode visitTruncateTable(final TruncateTableContext ctx) {
525         return new TruncateStatement(((CollectionValue<SimpleTableSegment>) visit(ctx.tableNamesClause())).getValue());
526     }
527     
528     @SuppressWarnings("unchecked")
529     @Override
530     public ASTNode visitCreateIndex(final CreateIndexContext ctx) {
531         CreateIndexStatement result = new CreateIndexStatement();
532         result.setIfNotExists(null != ctx.ifNotExists());
533         result.setTable((SimpleTableSegment) visit(ctx.tableName()));
534         result.getColumns().addAll(((CollectionValue<ColumnSegment>) visit(ctx.indexParams())).getValue());
535         if (null == ctx.indexName()) {
536             result.setAnonymousIndexStartIndex(ctx.ON().getSymbol().getStartIndex() - 1);
537         } else {
538             result.setIndex((IndexSegment) visit(ctx.indexName()));
539         }
540         return result;
541     }
542     
543     @Override
544     public ASTNode visitIndexParams(final IndexParamsContext ctx) {
545         CollectionValue<ColumnSegment> result = new CollectionValue<>();
546         for (IndexElemContext each : ctx.indexElem()) {
547             if (null != each.colId()) {
548                 result.getValue().add(new ColumnSegment(each.colId().start.getStartIndex(), each.colId().stop.getStopIndex(), new IdentifierValue(each.colId().getText())));
549             }
550             if (null != each.functionExprWindowless()) {
551                 FunctionSegment functionSegment = (FunctionSegment) visit(each.functionExprWindowless());
552                 functionSegment.getParameters().forEach(param -> {
553                     if (param instanceof ColumnSegment) {
554                         result.getValue().add((ColumnSegment) param);
555                     }
556                 });
557             }
558         }
559         return result;
560     }
561     
562     @Override
563     public ASTNode visitFunctionExprWindowless(final FunctionExprWindowlessContext ctx) {
564         FunctionSegment result = new FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), ctx.funcApplication().funcName().getText(), getOriginalText(ctx));
565         result.getParameters().addAll(getExpressions(ctx.funcApplication().funcArgList().funcArgExpr()));
566         return result;
567     }
568     
569     private Collection<ExpressionSegment> getExpressions(final Collection<FuncArgExprContext> aExprContexts) {
570         if (null == aExprContexts) {
571             return Collections.emptyList();
572         }
573         Collection<ExpressionSegment> result = new ArrayList<>(aExprContexts.size());
574         for (FuncArgExprContext each : aExprContexts) {
575             result.add((ExpressionSegment) visit(each.aExpr()));
576         }
577         return result;
578     }
579     
580     @Override
581     public ASTNode visitAlterIndex(final AlterIndexContext ctx) {
582         AlterIndexStatement result = new AlterIndexStatement();
583         result.setIndex(createIndexSegment((SimpleTableSegment) visit(ctx.qualifiedName())));
584         if (null != ctx.alterIndexDefinitionClause().renameIndexSpecification()) {
585             result.setRenameIndex((IndexSegment) visit(ctx.alterIndexDefinitionClause().renameIndexSpecification().indexName()));
586         }
587         return result;
588     }
589     
590     private IndexSegment createIndexSegment(final SimpleTableSegment tableSegment) {
591         IndexNameSegment indexName = new IndexNameSegment(tableSegment.getTableName().getStartIndex(), tableSegment.getTableName().getStopIndex(), tableSegment.getTableName().getIdentifier());
592         IndexSegment result = new IndexSegment(tableSegment.getStartIndex(), tableSegment.getStopIndex(), indexName);
593         tableSegment.getOwner().ifPresent(result::setOwner);
594         return result;
595     }
596     
597     @SuppressWarnings("unchecked")
598     @Override
599     public ASTNode visitDropIndex(final DropIndexContext ctx) {
600         DropIndexStatement result = new DropIndexStatement();
601         result.setIfExists(null != ctx.ifExists());
602         result.getIndexes().addAll(createIndexSegments(((CollectionValue<SimpleTableSegment>) visit(ctx.qualifiedNameList())).getValue()));
603         return result;
604     }
605     
606     private Collection<IndexSegment> createIndexSegments(final Collection<SimpleTableSegment> tableSegments) {
607         Collection<IndexSegment> result = new LinkedList<>();
608         for (SimpleTableSegment each : tableSegments) {
609             result.add(createIndexSegment(each));
610         }
611         return result;
612     }
613     
614     @Override
615     public ASTNode visitIndexNames(final IndexNamesContext ctx) {
616         CollectionValue<IndexSegment> result = new CollectionValue<>();
617         for (IndexNameContext each : ctx.indexName()) {
618             result.getValue().add((IndexSegment) visit(each));
619         }
620         return result;
621     }
622     
623     @Override
624     public ASTNode visitTableNameClause(final TableNameClauseContext ctx) {
625         return visit(ctx.tableName());
626     }
627     
628     @Override
629     public ASTNode visitTableNamesClause(final TableNamesClauseContext ctx) {
630         Collection<SimpleTableSegment> tableSegments = new LinkedList<>();
631         for (int i = 0; i < ctx.tableNameClause().size(); i++) {
632             tableSegments.add((SimpleTableSegment) visit(ctx.tableNameClause(i)));
633         }
634         CollectionValue<SimpleTableSegment> result = new CollectionValue<>();
635         result.getValue().addAll(tableSegments);
636         return result;
637     }
638     
639     @Override
640     public ASTNode visitAlterFunction(final AlterFunctionContext ctx) {
641         return new AlterFunctionStatement();
642     }
643     
644     @Override
645     public ASTNode visitAlterProcedure(final AlterProcedureContext ctx) {
646         return new AlterProcedureStatement();
647     }
648     
649     @Override
650     public ASTNode visitCreateFunction(final CreateFunctionContext ctx) {
651         return new CreateFunctionStatement();
652     }
653     
654     @Override
655     public ASTNode visitCreateProcedure(final CreateProcedureContext ctx) {
656         return new CreateProcedureStatement();
657     }
658     
659     @Override
660     public ASTNode visitDropFunction(final DropFunctionContext ctx) {
661         return new DropFunctionStatement();
662     }
663     
664     @SuppressWarnings("unchecked")
665     @Override
666     public ASTNode visitDropView(final DropViewContext ctx) {
667         DropViewStatement result = new DropViewStatement();
668         result.setIfExists(null != ctx.ifExists());
669         result.getViews().addAll(((CollectionValue<SimpleTableSegment>) visit(ctx.qualifiedNameList())).getValue());
670         return result;
671     }
672     
673     @Override
674     public ASTNode visitCreateView(final CreateViewContext ctx) {
675         CreateViewStatement result = new CreateViewStatement();
676         result.setReplaceView(null != ctx.REPLACE());
677         result.setView((SimpleTableSegment) visit(ctx.qualifiedName()));
678         result.setViewDefinition(getOriginalText(ctx.select()));
679         result.setSelect((SelectStatement) visit(ctx.select()));
680         return result;
681     }
682     
683     @Override
684     public ASTNode visitAlterView(final AlterViewContext ctx) {
685         AlterViewStatement result = new AlterViewStatement();
686         result.setView((SimpleTableSegment) visit(ctx.qualifiedName()));
687         if (ctx.alterViewClauses() instanceof AlterRenameViewContext) {
688             NameContext nameContext = ((AlterRenameViewContext) ctx.alterViewClauses()).name();
689             result.setRenameView(
690                     new SimpleTableSegment(new TableNameSegment(nameContext.getStart().getStartIndex(), nameContext.getStop().getStopIndex(), (IdentifierValue) visit(nameContext.identifier()))));
691         }
692         return result;
693     }
694     
695     @Override
696     public ASTNode visitDropDatabase(final DropDatabaseContext ctx) {
697         return new DropDatabaseStatement(((IdentifierValue) visit(ctx.name())).getValue(), null != ctx.ifExists());
698     }
699     
700     @Override
701     public ASTNode visitDropServer(final DropServerContext ctx) {
702         return new DropServerStatement();
703     }
704     
705     @Override
706     public ASTNode visitDropProcedure(final DropProcedureContext ctx) {
707         return new DropProcedureStatement();
708     }
709     
710     @Override
711     public ASTNode visitDropPublication(final DropPublicationContext ctx) {
712         return new PostgreSQLDropPublicationStatement();
713     }
714     
715     @Override
716     public ASTNode visitDropCast(final DropCastContext ctx) {
717         return new PostgreSQLDropCastStatement();
718     }
719     
720     @Override
721     public ASTNode visitDropRule(final DropRuleContext ctx) {
722         return new PostgreSQLDropRuleStatement();
723     }
724     
725     @Override
726     public ASTNode visitCreateDatabase(final CreateDatabaseContext ctx) {
727         return new CreateDatabaseStatement(((IdentifierValue) visit(ctx.name())).getValue(), false);
728     }
729     
730     @Override
731     public ASTNode visitCreateSequence(final CreateSequenceContext ctx) {
732         return new CreateSequenceStatement(((SimpleTableSegment) visit(ctx.qualifiedName())).getTableName().getIdentifier().getValue());
733     }
734     
735     @Override
736     public ASTNode visitAlterSequence(final AlterSequenceContext ctx) {
737         return new AlterSequenceStatement(((SimpleTableSegment) visit(ctx.qualifiedName())).getTableName().getIdentifier().getValue());
738     }
739     
740     @SuppressWarnings({"unchecked", "rawtypes"})
741     @Override
742     public ASTNode visitDropSequence(final DropSequenceContext ctx) {
743         return new DropSequenceStatement(((CollectionValue) visit(ctx.qualifiedNameList())).getValue());
744     }
745     
746     @Override
747     public ASTNode visitDropSynonym(final DropSynonymContext ctx) {
748         return new DropSynonymStatement();
749     }
750     
751     @Override
752     public ASTNode visitDropType(final DropTypeContext ctx) {
753         return new PostgreSQLDropTypeStatement();
754     }
755     
756     @Override
757     public ASTNode visitDropDirectory(final DropDirectoryContext ctx) {
758         return new DropDirectoryStatement();
759     }
760     
761     @Override
762     public ASTNode visitPrepare(final PrepareContext ctx) {
763         PrepareStatement result = new PrepareStatement();
764         if (null != ctx.preparableStmt().select()) {
765             result.setSelect((SelectStatement) visit(ctx.preparableStmt().select()));
766         }
767         if (null != ctx.preparableStmt().insert()) {
768             result.setInsert((InsertStatement) visit(ctx.preparableStmt().insert()));
769         }
770         if (null != ctx.preparableStmt().update()) {
771             result.setUpdate((UpdateStatement) visit(ctx.preparableStmt().update()));
772         }
773         if (null != ctx.preparableStmt().delete()) {
774             result.setDelete((DeleteStatement) visit(ctx.preparableStmt().delete()));
775         }
776         return result;
777     }
778     
779     @Override
780     public ASTNode visitDeallocate(final DeallocateContext ctx) {
781         return new DeallocateStatement();
782     }
783     
784     @Override
785     public ASTNode visitCreateSynonym(final CreateSynonymContext ctx) {
786         return new CreateSynonymStatement();
787     }
788     
789     @Override
790     public ASTNode visitCreateAggregate(final CreateAggregateContext ctx) {
791         return new PostgreSQLCreateAggregateStatement();
792     }
793     
794     @Override
795     public ASTNode visitCreatePublication(final CreatePublicationContext ctx) {
796         return new PostgreSQLCreatePublicationStatement();
797     }
798     
799     @Override
800     public ASTNode visitCreateDirectory(final CreateDirectoryContext ctx) {
801         return new CreateDirectoryStatement();
802     }
803     
804     @Override
805     public ASTNode visitCreateTablespace(final CreateTablespaceContext ctx) {
806         return new CreateTablespaceStatement();
807     }
808     
809     @Override
810     public ASTNode visitAlterTablespace(final AlterTablespaceContext ctx) {
811         return new AlterTablespaceStatement(null, null);
812     }
813     
814     @Override
815     public ASTNode visitDropTablespace(final DropTablespaceContext ctx) {
816         return new DropTablespaceStatement();
817     }
818     
819     @Override
820     public ASTNode visitDropDomain(final DropDomainContext ctx) {
821         return new PostgreSQLDropDomainStatement();
822     }
823     
824     @Override
825     public ASTNode visitCreateDomain(final CreateDomainContext ctx) {
826         return new CreateDomainStatement();
827     }
828     
829     @Override
830     public ASTNode visitCreateRule(final CreateRuleContext ctx) {
831         return new PostgreSQLCreateRuleStatement();
832     }
833     
834     @Override
835     public ASTNode visitCreateLanguage(final CreateLanguageContext ctx) {
836         return new PostgreSQLCreateLanguageStatement();
837     }
838     
839     @Override
840     public ASTNode visitCreateSchema(final CreateSchemaContext ctx) {
841         CreateSchemaStatement result = new CreateSchemaStatement();
842         if (null != ctx.createSchemaClauses().colId()) {
843             result.setSchemaName(new IdentifierValue(ctx.createSchemaClauses().colId().getText()));
844         }
845         if (null != ctx.createSchemaClauses().roleSpec() && null != ctx.createSchemaClauses().roleSpec().identifier()) {
846             result.setUsername((IdentifierValue) visit(ctx.createSchemaClauses().roleSpec().identifier()));
847         }
848         return result;
849     }
850     
851     @Override
852     public ASTNode visitAlterSchema(final AlterSchemaContext ctx) {
853         AlterSchemaStatement result = new AlterSchemaStatement();
854         result.setSchemaName((IdentifierValue) visit(ctx.name().get(0)));
855         if (ctx.name().size() > 1) {
856             result.setRenameSchema((IdentifierValue) visit(ctx.name().get(1)));
857         }
858         return result;
859     }
860     
861     @SuppressWarnings("unchecked")
862     @Override
863     public ASTNode visitDropSchema(final DropSchemaContext ctx) {
864         DropSchemaStatement result = new DropSchemaStatement();
865         result.getSchemaNames().addAll(((CollectionValue<IdentifierValue>) visit(ctx.nameList())).getValue());
866         result.setContainsCascade(null != ctx.dropBehavior() && null != ctx.dropBehavior().CASCADE());
867         return result;
868     }
869     
870     @SuppressWarnings("unchecked")
871     @Override
872     public ASTNode visitNameList(final NameListContext ctx) {
873         CollectionValue<IdentifierValue> result = new CollectionValue<>();
874         if (null != ctx.nameList()) {
875             result.combine((CollectionValue<IdentifierValue>) visit(ctx.nameList()));
876         }
877         if (null != ctx.name()) {
878             result.getValue().add((IdentifierValue) visit(ctx.name()));
879         }
880         return result;
881     }
882     
883     @Override
884     public ASTNode visitAlterLanguage(final AlterLanguageContext ctx) {
885         return new PostgreSQLAlterLanguageStatement();
886     }
887     
888     @Override
889     public ASTNode visitAlterSynonym(final AlterSynonymContext ctx) {
890         return new AlterSynonymStatement();
891     }
892     
893     @Override
894     public ASTNode visitAlterDirectory(final AlterDirectoryContext ctx) {
895         return new OpenGaussAlterDirectoryStatement();
896     }
897     
898     @Override
899     public ASTNode visitAlterRule(final AlterRuleContext ctx) {
900         return new PostgreSQLAlterRuleStatement();
901     }
902     
903     @Override
904     public ASTNode visitAlterType(final AlterTypeContext ctx) {
905         return new AlterTypeStatement();
906     }
907     
908     @Override
909     public ASTNode visitDropLanguage(final DropLanguageContext ctx) {
910         return new PostgreSQLDropLanguageStatement();
911     }
912     
913     @Override
914     public ASTNode visitCreateConversion(final CreateConversionContext ctx) {
915         return new PostgreSQLCreateConversionStatement();
916     }
917     
918     @Override
919     public ASTNode visitCreateCast(final CreateCastContext ctx) {
920         return new PostgreSQLCreateCastStatement();
921     }
922     
923     @Override
924     public ASTNode visitCreateType(final CreateTypeContext ctx) {
925         return new CreateTypeStatement();
926     }
927     
928     @Override
929     public ASTNode visitDropConversion(final DropConversionContext ctx) {
930         return new PostgreSQLDropConversionStatement();
931     }
932     
933     @Override
934     public ASTNode visitAlterConversion(final AlterConversionContext ctx) {
935         return new PostgreSQLAlterConversionStatement();
936     }
937     
938     @Override
939     public ASTNode visitCreateTextSearch(final CreateTextSearchContext ctx) {
940         return new PostgreSQLCreateTextSearchStatement();
941     }
942     
943     @Override
944     public ASTNode visitAlterTextSearchDictionary(final AlterTextSearchDictionaryContext ctx) {
945         return new PostgreSQLAlterTextSearchStatement();
946     }
947     
948     @Override
949     public ASTNode visitAlterTextSearchTemplate(final AlterTextSearchTemplateContext ctx) {
950         return new PostgreSQLAlterTextSearchStatement();
951     }
952     
953     @Override
954     public ASTNode visitAlterTextSearchParser(final AlterTextSearchParserContext ctx) {
955         return new PostgreSQLAlterTextSearchStatement();
956     }
957     
958     @Override
959     public ASTNode visitCreateExtension(final CreateExtensionContext ctx) {
960         return new PostgreSQLCreateExtensionStatement();
961     }
962     
963     @Override
964     public ASTNode visitAlterExtension(final AlterExtensionContext ctx) {
965         return new PostgreSQLAlterExtensionStatement();
966     }
967     
968     @Override
969     public ASTNode visitDropExtension(final DropExtensionContext ctx) {
970         return new PostgreSQLDropExtensionStatement();
971     }
972     
973     @Override
974     public ASTNode visitDeclare(final DeclareContext ctx) {
975         return new PostgreSQLDeclareStatement((CursorNameSegment) visit(ctx.cursorName()), (SelectStatement) visit(ctx.select()));
976     }
977     
978     @Override
979     public ASTNode visitComment(final CommentContext ctx) {
980         if (null != ctx.commentClauses().objectTypeAnyName() && null != ctx.commentClauses().objectTypeAnyName().TABLE()) {
981             return commentOnTable(ctx);
982         }
983         if (null != ctx.commentClauses().COLUMN()) {
984             return commentOnColumn(ctx);
985         }
986         return new CommentStatement();
987     }
988     
989     @SuppressWarnings("unchecked")
990     private CommentStatement commentOnColumn(final CommentContext ctx) {
991         CommentStatement result = new CommentStatement();
992         Iterator<NameSegment> nameSegmentIterator = ((CollectionValue<NameSegment>) visit(ctx.commentClauses().anyName())).getValue().iterator();
993         Optional<NameSegment> columnName = nameSegmentIterator.hasNext() ? Optional.of(nameSegmentIterator.next()) : Optional.empty();
994         columnName.ifPresent(optional -> result.setColumn(new ColumnSegment(optional.getStartIndex(), optional.getStopIndex(), optional.getIdentifier())));
995         result.setComment(new IdentifierValue(ctx.commentClauses().commentText().getText()));
996         setTableSegment(result, nameSegmentIterator);
997         return result;
998     }
999     
1000     @SuppressWarnings("unchecked")
1001     private CommentStatement commentOnTable(final CommentContext ctx) {
1002         CommentStatement result = new CommentStatement();
1003         Iterator<NameSegment> nameSegmentIterator = ((CollectionValue<NameSegment>) visit(ctx.commentClauses().anyName())).getValue().iterator();
1004         result.setComment(new IdentifierValue(ctx.commentClauses().commentText().getText()));
1005         setTableSegment(result, nameSegmentIterator);
1006         return result;
1007     }
1008     
1009     private void setTableSegment(final CommentStatement statement, final Iterator<NameSegment> nameSegmentIterator) {
1010         Optional<NameSegment> tableName = nameSegmentIterator.hasNext() ? Optional.of(nameSegmentIterator.next()) : Optional.empty();
1011         tableName.ifPresent(optional -> statement.setTable(new SimpleTableSegment(new TableNameSegment(optional.getStartIndex(), optional.getStopIndex(), optional.getIdentifier()))));
1012         Optional<NameSegment> schemaName = nameSegmentIterator.hasNext() ? Optional.of(nameSegmentIterator.next()) : Optional.empty();
1013         schemaName.ifPresent(optional -> statement.getTable().setOwner(new OwnerSegment(optional.getStartIndex(), optional.getStopIndex(), optional.getIdentifier())));
1014         Optional<NameSegment> databaseName = nameSegmentIterator.hasNext() ? Optional.of(nameSegmentIterator.next()) : Optional.empty();
1015         databaseName.ifPresent(optional -> statement.getTable().getOwner()
1016                 .ifPresent(owner -> owner.setOwner(new OwnerSegment(optional.getStartIndex(), optional.getStopIndex(), optional.getIdentifier()))));
1017     }
1018     
1019     @Override
1020     public ASTNode visitCursor(final CursorContext ctx) {
1021         return new CursorStatement((CursorNameSegment) visit(ctx.cursorName()), (SelectStatement) visit(ctx.select()));
1022     }
1023     
1024     @Override
1025     public ASTNode visitCursorName(final CursorNameContext ctx) {
1026         return new CursorNameSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), (IdentifierValue) visit(ctx.name()));
1027     }
1028     
1029     @Override
1030     public ASTNode visitClose(final CloseContext ctx) {
1031         return new CloseStatement(null == ctx.cursorName() ? null : (CursorNameSegment) visit(ctx.cursorName()), null != ctx.ALL());
1032     }
1033     
1034     @Override
1035     public ASTNode visitMove(final MoveContext ctx) {
1036         return new MoveStatement((CursorNameSegment) visit(ctx.cursorName()), null == ctx.direction() ? null : (DirectionSegment) visit(ctx.direction()));
1037     }
1038     
1039     @Override
1040     public ASTNode visitFetch(final FetchContext ctx) {
1041         return new FetchStatement((CursorNameSegment) visit(ctx.cursorName()), null == ctx.direction() ? null : (DirectionSegment) visit(ctx.direction()));
1042     }
1043     
1044     @Override
1045     public ASTNode visitNext(final NextContext ctx) {
1046         return new DirectionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), DirectionType.NEXT);
1047     }
1048     
1049     @Override
1050     public ASTNode visitPrior(final PriorContext ctx) {
1051         return new DirectionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), DirectionType.PRIOR);
1052     }
1053     
1054     @Override
1055     public ASTNode visitFirst(final FirstContext ctx) {
1056         return new DirectionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), DirectionType.FIRST);
1057     }
1058     
1059     @Override
1060     public ASTNode visitLast(final LastContext ctx) {
1061         return new DirectionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), DirectionType.LAST);
1062     }
1063     
1064     @Override
1065     public ASTNode visitAbsoluteCount(final AbsoluteCountContext ctx) {
1066         return new DirectionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), DirectionType.ABSOLUTE_COUNT, ((NumberLiteralValue) visit(ctx.signedIconst())).getValue().longValue());
1067     }
1068     
1069     @Override
1070     public ASTNode visitRelativeCount(final RelativeCountContext ctx) {
1071         return new DirectionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), DirectionType.RELATIVE_COUNT, ((NumberLiteralValue) visit(ctx.signedIconst())).getValue().longValue());
1072     }
1073     
1074     @Override
1075     public ASTNode visitCount(final CountContext ctx) {
1076         return new DirectionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), DirectionType.COUNT, ((NumberLiteralValue) visit(ctx.signedIconst())).getValue().longValue());
1077     }
1078     
1079     @Override
1080     public ASTNode visitAll(final AllContext ctx) {
1081         return new DirectionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), DirectionType.ALL);
1082     }
1083     
1084     @Override
1085     public ASTNode visitForward(final ForwardContext ctx) {
1086         return new DirectionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), DirectionType.FORWARD);
1087     }
1088     
1089     @Override
1090     public ASTNode visitForwardCount(final ForwardCountContext ctx) {
1091         return new DirectionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), DirectionType.FORWARD_COUNT, ((NumberLiteralValue) visit(ctx.signedIconst())).getValue().longValue());
1092     }
1093     
1094     @Override
1095     public ASTNode visitForwardAll(final ForwardAllContext ctx) {
1096         return new DirectionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), DirectionType.FORWARD_ALL);
1097     }
1098     
1099     @Override
1100     public ASTNode visitBackward(final BackwardContext ctx) {
1101         return new DirectionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), DirectionType.BACKWARD);
1102     }
1103     
1104     @Override
1105     public ASTNode visitBackwardCount(final BackwardCountContext ctx) {
1106         return new DirectionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), DirectionType.BACKWARD_COUNT, ((NumberLiteralValue) visit(ctx.signedIconst())).getValue().longValue());
1107     }
1108     
1109     @Override
1110     public ASTNode visitBackwardAll(final BackwardAllContext ctx) {
1111         return new DirectionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), DirectionType.BACKWARD_ALL);
1112     }
1113 }