1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.sql.parser.sqlserver.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.SQLServerStatementParser.AddColumnSpecificationContext;
25 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.AlterCheckConstraintContext;
26 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.AlterColumnAddOptionContext;
27 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.AlterDatabaseContext;
28 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.AlterDefinitionClauseContext;
29 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.AlterFunctionContext;
30 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.AlterIndexContext;
31 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.AlterProcedureContext;
32 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.AlterSchemaContext;
33 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.AlterSequenceContext;
34 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.AlterServiceContext;
35 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.AlterTableContext;
36 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.AlterTableDropConstraintContext;
37 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.AlterTriggerContext;
38 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.AlterViewContext;
39 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ColumnConstraintContext;
40 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ColumnDefinitionContext;
41 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ColumnDefinitionOptionContext;
42 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ColumnNameContext;
43 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ColumnNameWithSortContext;
44 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.CreateDatabaseContext;
45 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.CreateFunctionContext;
46 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.CreateIndexContext;
47 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.CreateProcedureContext;
48 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.CreateSchemaContext;
49 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.CreateSequenceContext;
50 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.CreateServiceContext;
51 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.CreateTableClauseContext;
52 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.CreateTableContext;
53 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.CreateTableDefinitionContext;
54 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.CreateTableDefinitionsContext;
55 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.CreateTriggerContext;
56 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.CreateViewContext;
57 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DropColumnSpecificationContext;
58 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DropConstraintNameContext;
59 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DropDatabaseContext;
60 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DropFunctionContext;
61 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DropIndexContext;
62 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DropProcedureContext;
63 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DropSchemaContext;
64 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DropSequenceContext;
65 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DropServiceContext;
66 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DropTableContext;
67 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DropTriggerContext;
68 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DropViewContext;
69 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ModifyColumnSpecificationContext;
70 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.TableConstraintContext;
71 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.TruncateTableContext;
72 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ViewNameContext;
73 import org.apache.shardingsphere.sql.parser.sqlserver.visitor.statement.SQLServerStatementVisitor;
74 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.AlterDefinitionSegment;
75 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.CreateDefinitionSegment;
76 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.ColumnDefinitionSegment;
77 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.alter.AddColumnDefinitionSegment;
78 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.alter.DropColumnDefinitionSegment;
79 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.alter.ModifyColumnDefinitionSegment;
80 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.ConstraintDefinitionSegment;
81 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.ConstraintSegment;
82 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.alter.AddConstraintDefinitionSegment;
83 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.alter.DropConstraintDefinitionSegment;
84 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.alter.ModifyConstraintDefinitionSegment;
85 import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.index.IndexSegment;
86 import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
87 import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DataTypeSegment;
88 import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
89 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.TruncateStatement;
90 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.database.AlterDatabaseStatement;
91 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.database.CreateDatabaseStatement;
92 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.database.DropDatabaseStatement;
93 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.function.AlterFunctionStatement;
94 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.function.CreateFunctionStatement;
95 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.function.DropFunctionStatement;
96 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.index.AlterIndexStatement;
97 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.index.CreateIndexStatement;
98 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.index.DropIndexStatement;
99 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.procedure.AlterProcedureStatement;
100 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.procedure.CreateProcedureStatement;
101 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.procedure.DropProcedureStatement;
102 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.schema.AlterSchemaStatement;
103 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.schema.CreateSchemaStatement;
104 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.schema.DropSchemaStatement;
105 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.sequence.AlterSequenceStatement;
106 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.sequence.CreateSequenceStatement;
107 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.sequence.DropSequenceStatement;
108 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.table.AlterTableStatement;
109 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.table.CreateTableStatement;
110 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.table.DropTableStatement;
111 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.trigger.AlterTriggerStatement;
112 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.trigger.CreateTriggerStatement;
113 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.trigger.DropTriggerStatement;
114 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.view.AlterViewStatement;
115 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.view.CreateViewStatement;
116 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.view.DropViewStatement;
117 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.SelectStatement;
118 import org.apache.shardingsphere.sql.parser.statement.core.value.collection.CollectionValue;
119 import org.apache.shardingsphere.sql.parser.statement.sqlserver.ddl.service.SQLServerAlterServiceStatement;
120 import org.apache.shardingsphere.sql.parser.statement.sqlserver.ddl.service.SQLServerCreateServiceStatement;
121 import org.apache.shardingsphere.sql.parser.statement.sqlserver.ddl.service.SQLServerDropServiceStatement;
122
123 import java.util.Collection;
124 import java.util.Collections;
125 import java.util.LinkedList;
126
127
128
129
130 public final class SQLServerDDLStatementVisitor extends SQLServerStatementVisitor implements DDLStatementVisitor {
131
132 @Override
133 public ASTNode visitCreateTable(final CreateTableContext ctx) {
134 return null == ctx.createTableClause() ? visit(ctx.createTableAsSelectClause()) : visit(ctx.createTableClause());
135 }
136
137 @SuppressWarnings("unchecked")
138 @Override
139 public ASTNode visitCreateTableClause(final CreateTableClauseContext ctx) {
140 CreateTableStatement result = new CreateTableStatement();
141 result.setTable((SimpleTableSegment) visit(ctx.tableName()));
142 CollectionValue<CreateDefinitionSegment> createDefinitions = (CollectionValue<CreateDefinitionSegment>) generateCreateDefinitionSegment(ctx.createDefinitionClause().createTableDefinitions());
143 for (CreateDefinitionSegment each : createDefinitions.getValue()) {
144 if (each instanceof ColumnDefinitionSegment) {
145 result.getColumnDefinitions().add((ColumnDefinitionSegment) each);
146 } else if (each instanceof ConstraintDefinitionSegment) {
147 result.getConstraintDefinitions().add((ConstraintDefinitionSegment) each);
148 }
149 }
150 return result;
151 }
152
153 private ASTNode generateCreateDefinitionSegment(final CreateTableDefinitionsContext ctx) {
154 CollectionValue<CreateDefinitionSegment> result = new CollectionValue<>();
155 for (CreateTableDefinitionContext each : ctx.createTableDefinition()) {
156 if (null != each.columnDefinition()) {
157 result.getValue().add((ColumnDefinitionSegment) visit(each.columnDefinition()));
158 }
159 if (null != each.tableConstraint()) {
160 result.getValue().add((ConstraintDefinitionSegment) visit(each.tableConstraint()));
161 }
162 }
163 return result;
164 }
165
166 @Override
167 public ASTNode visitColumnDefinition(final ColumnDefinitionContext ctx) {
168 ColumnSegment column = (ColumnSegment) visit(ctx.columnName());
169 DataTypeSegment dataType = (DataTypeSegment) visit(ctx.dataType());
170 boolean isPrimaryKey = isPrimaryKey(ctx);
171
172 ColumnDefinitionSegment result = new ColumnDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, dataType, isPrimaryKey, false, getText(ctx));
173 for (ColumnDefinitionOptionContext each : ctx.columnDefinitionOption()) {
174 for (ColumnConstraintContext columnConstraint : each.columnConstraint()) {
175 if (null != columnConstraint.columnForeignKeyConstraint()) {
176 result.getReferencedTables().add((SimpleTableSegment) visit(columnConstraint.columnForeignKeyConstraint().tableName()));
177 }
178 }
179 }
180 for (ColumnConstraintContext each : ctx.columnConstraints().columnConstraint()) {
181 if (null != each.columnForeignKeyConstraint()) {
182 result.getReferencedTables().add((SimpleTableSegment) visit(each.columnForeignKeyConstraint().tableName()));
183 }
184 }
185 return result;
186 }
187
188 private String getText(final ParserRuleContext ctx) {
189 return ctx.start.getInputStream().getText(new Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex()));
190 }
191
192 private boolean isPrimaryKey(final ColumnDefinitionContext ctx) {
193 for (ColumnDefinitionOptionContext each : ctx.columnDefinitionOption()) {
194 for (ColumnConstraintContext columnConstraint : each.columnConstraint()) {
195 if (null != columnConstraint.primaryKeyConstraint() && null != columnConstraint.primaryKeyConstraint().primaryKey()) {
196 return true;
197 }
198 }
199 }
200 for (ColumnConstraintContext each : ctx.columnConstraints().columnConstraint()) {
201 if (null != each.primaryKeyConstraint() && null != each.primaryKeyConstraint().primaryKey()) {
202 return true;
203 }
204 }
205 return false;
206 }
207
208 @SuppressWarnings("unchecked")
209 @Override
210 public ASTNode visitTableConstraint(final TableConstraintContext ctx) {
211 ConstraintDefinitionSegment result = new ConstraintDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex());
212 if (null != ctx.constraintName()) {
213 result.setConstraintName((ConstraintSegment) visit(ctx.constraintName()));
214 }
215 if (null != ctx.tablePrimaryConstraint() && null != ctx.tablePrimaryConstraint().primaryKeyUnique().primaryKey()) {
216 if (null != ctx.tablePrimaryConstraint().diskTablePrimaryConstraintOption()) {
217 result.getPrimaryKeyColumns().addAll(((CollectionValue<ColumnSegment>) visit(ctx.tablePrimaryConstraint().diskTablePrimaryConstraintOption().columnNames())).getValue());
218 }
219 if (null != ctx.tablePrimaryConstraint().memoryTablePrimaryConstraintOption()) {
220 result.getPrimaryKeyColumns().addAll(((CollectionValue<ColumnSegment>) visit(ctx.tablePrimaryConstraint().memoryTablePrimaryConstraintOption().columnNames())).getValue());
221 }
222 }
223 if (null != ctx.tableForeignKeyConstraint()) {
224 result.setReferencedTable((SimpleTableSegment) visit(ctx.tableForeignKeyConstraint().tableName()));
225 }
226 return result;
227 }
228
229 @SuppressWarnings("unchecked")
230 @Override
231 public ASTNode visitAlterTable(final AlterTableContext ctx) {
232 AlterTableStatement result = new AlterTableStatement();
233 result.setTable((SimpleTableSegment) visit(ctx.tableName()));
234 for (AlterDefinitionClauseContext alterDefinitionClauseContext : ctx.alterDefinitionClause()) {
235 for (AlterDefinitionSegment each : ((CollectionValue<AlterDefinitionSegment>) visit(alterDefinitionClauseContext)).getValue()) {
236 if (each instanceof AddColumnDefinitionSegment) {
237 result.getAddColumnDefinitions().add((AddColumnDefinitionSegment) each);
238 } else if (each instanceof ModifyColumnDefinitionSegment) {
239 result.getModifyColumnDefinitions().add((ModifyColumnDefinitionSegment) each);
240 } else if (each instanceof DropColumnDefinitionSegment) {
241 result.getDropColumnDefinitions().add((DropColumnDefinitionSegment) each);
242 } else if (each instanceof AddConstraintDefinitionSegment) {
243 result.getAddConstraintDefinitions().add((AddConstraintDefinitionSegment) each);
244 } else if (each instanceof ModifyConstraintDefinitionSegment) {
245 result.getModifyConstraintDefinitions().add((ModifyConstraintDefinitionSegment) each);
246 } else if (each instanceof DropConstraintDefinitionSegment) {
247 result.getDropConstraintDefinitions().add((DropConstraintDefinitionSegment) each);
248 }
249 }
250 }
251 return result;
252 }
253
254 @SuppressWarnings("unchecked")
255 @Override
256 public ASTNode visitAlterDefinitionClause(final AlterDefinitionClauseContext ctx) {
257 CollectionValue<AlterDefinitionSegment> result = new CollectionValue<>();
258 if (null != ctx.addColumnSpecification()) {
259 result.getValue().addAll(((CollectionValue<AddColumnDefinitionSegment>) visit(ctx.addColumnSpecification())).getValue());
260 }
261 if (null != ctx.modifyColumnSpecification()) {
262 result.getValue().add((ModifyColumnDefinitionSegment) visit(ctx.modifyColumnSpecification()));
263 }
264 if (null != ctx.alterDrop() && null != ctx.alterDrop().dropColumnSpecification()) {
265 result.getValue().add((DropColumnDefinitionSegment) visit(ctx.alterDrop().dropColumnSpecification()));
266 }
267 if (null != ctx.alterDrop() && null != ctx.alterDrop().alterTableDropConstraint()) {
268 result.combine((CollectionValue<AlterDefinitionSegment>) visit(ctx.alterDrop().alterTableDropConstraint()));
269 }
270 if (null != ctx.alterCheckConstraint()) {
271 result.getValue().add((AlterDefinitionSegment) visit(ctx.alterCheckConstraint()));
272 }
273 return result;
274 }
275
276 @Override
277 public ASTNode visitAddColumnSpecification(final AddColumnSpecificationContext ctx) {
278 CollectionValue<AddColumnDefinitionSegment> result = new CollectionValue<>();
279 if (null != ctx.alterColumnAddOptions()) {
280 for (AlterColumnAddOptionContext each : ctx.alterColumnAddOptions().alterColumnAddOption()) {
281 if (null != each.columnDefinition()) {
282 AddColumnDefinitionSegment addColumnDefinition = new AddColumnDefinitionSegment(
283 each.columnDefinition().getStart().getStartIndex(), each.columnDefinition().getStop().getStopIndex(),
284 Collections.singletonList((ColumnDefinitionSegment) visit(each.columnDefinition())));
285 result.getValue().add(addColumnDefinition);
286 }
287 }
288 }
289 return result;
290 }
291
292 @Override
293 public ASTNode visitModifyColumnSpecification(final ModifyColumnSpecificationContext ctx) {
294
295 ColumnSegment column = (ColumnSegment) visit(ctx.alterColumnOperation().columnName());
296 DataTypeSegment dataType = (DataTypeSegment) visit(ctx.dataType());
297 ColumnDefinitionSegment columnDefinition = new ColumnDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, dataType, false, false, getText(ctx));
298 return new ModifyColumnDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), columnDefinition);
299 }
300
301 @Override
302 public ASTNode visitDropColumnSpecification(final DropColumnSpecificationContext ctx) {
303 Collection<ColumnSegment> columns = new LinkedList<>();
304 for (ColumnNameContext each : ctx.columnName()) {
305 columns.add((ColumnSegment) visit(each));
306 }
307 return new DropColumnDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), columns);
308 }
309
310 @SuppressWarnings("unchecked")
311 @Override
312 public ASTNode visitDropTable(final DropTableContext ctx) {
313 DropTableStatement result = new DropTableStatement();
314 result.setContainsCascade(null != ctx.ifExists());
315 result.getTables().addAll(((CollectionValue<SimpleTableSegment>) visit(ctx.tableNames())).getValue());
316 return result;
317 }
318
319 @Override
320 public ASTNode visitTruncateTable(final TruncateTableContext ctx) {
321 return new TruncateStatement(Collections.singleton((SimpleTableSegment) visit(ctx.tableName())));
322 }
323
324 @SuppressWarnings({"rawtypes", "unchecked"})
325 @Override
326 public ASTNode visitCreateIndex(final CreateIndexContext ctx) {
327 CreateIndexStatement result = new CreateIndexStatement();
328 result.setTable((SimpleTableSegment) visit(ctx.tableName()));
329 result.setIndex((IndexSegment) visit(ctx.indexName()));
330 result.getColumns().addAll(((CollectionValue) visit(ctx.columnNamesWithSort())).getValue());
331 return result;
332 }
333
334 @Override
335 public ASTNode visitColumnNameWithSort(final ColumnNameWithSortContext ctx) {
336 return visit(ctx.columnName());
337 }
338
339 @Override
340 public ASTNode visitAlterIndex(final AlterIndexContext ctx) {
341 AlterIndexStatement result = new AlterIndexStatement();
342 if (null != ctx.indexName()) {
343 result.setIndex((IndexSegment) visit(ctx.indexName()));
344 }
345 result.setSimpleTable((SimpleTableSegment) visit(ctx.tableName()));
346 return result;
347 }
348
349 @Override
350 public ASTNode visitDropIndex(final DropIndexContext ctx) {
351 DropIndexStatement result = new DropIndexStatement();
352 result.setIfExists(null != ctx.ifExists());
353 result.getIndexes().add((IndexSegment) visit(ctx.indexName()));
354 result.setSimpleTable((SimpleTableSegment) visit(ctx.tableName()));
355 return result;
356 }
357
358 @Override
359 public ASTNode visitAlterCheckConstraint(final AlterCheckConstraintContext ctx) {
360 return new ModifyConstraintDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), (ConstraintSegment) visit(ctx.constraintName()));
361 }
362
363 @Override
364 public ASTNode visitAlterTableDropConstraint(final AlterTableDropConstraintContext ctx) {
365 CollectionValue<DropConstraintDefinitionSegment> result = new CollectionValue<>();
366 for (DropConstraintNameContext each : ctx.dropConstraintName()) {
367 result.getValue().add(new DropConstraintDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), (ConstraintSegment) visit(each.constraintName())));
368 }
369 return result;
370 }
371
372 @Override
373 public ASTNode visitCreateDatabase(final CreateDatabaseContext ctx) {
374 return new CreateDatabaseStatement(ctx.databaseName().getText(), false);
375 }
376
377 @Override
378 public ASTNode visitCreateFunction(final CreateFunctionContext ctx) {
379 return new CreateFunctionStatement();
380 }
381
382 @Override
383 public ASTNode visitCreateProcedure(final CreateProcedureContext ctx) {
384 return new CreateProcedureStatement();
385 }
386
387 @Override
388 public ASTNode visitCreateView(final CreateViewContext ctx) {
389 CreateViewStatement result = new CreateViewStatement();
390 result.setReplaceView(null != ctx.ALTER());
391 result.setView((SimpleTableSegment) visit(ctx.viewName()));
392 result.setViewDefinition(getOriginalText(ctx.createOrAlterViewClause().select()));
393 result.setSelect((SelectStatement) visit(ctx.createOrAlterViewClause().select()));
394 return result;
395 }
396
397 @Override
398 public ASTNode visitCreateTrigger(final CreateTriggerContext ctx) {
399 return new CreateTriggerStatement();
400 }
401
402 @Override
403 public ASTNode visitCreateSequence(final CreateSequenceContext ctx) {
404 return new CreateSequenceStatement(ctx.sequenceName().name().getText());
405 }
406
407 @Override
408 public ASTNode visitCreateSchema(final CreateSchemaContext ctx) {
409 return new CreateSchemaStatement();
410 }
411
412 @Override
413 public ASTNode visitCreateService(final CreateServiceContext ctx) {
414 return new SQLServerCreateServiceStatement();
415 }
416
417 @Override
418 public ASTNode visitAlterSchema(final AlterSchemaContext ctx) {
419 return new AlterSchemaStatement();
420 }
421
422 @Override
423 public ASTNode visitAlterService(final AlterServiceContext ctx) {
424 return new SQLServerAlterServiceStatement();
425 }
426
427 @Override
428 public ASTNode visitDropSchema(final DropSchemaContext ctx) {
429 return new DropSchemaStatement();
430 }
431
432 @Override
433 public ASTNode visitDropService(final DropServiceContext ctx) {
434 return new SQLServerDropServiceStatement();
435 }
436
437 @Override
438 public ASTNode visitAlterTrigger(final AlterTriggerContext ctx) {
439 return new AlterTriggerStatement();
440 }
441
442 @Override
443 public ASTNode visitAlterSequence(final AlterSequenceContext ctx) {
444 return new AlterSequenceStatement(null);
445 }
446
447 @Override
448 public ASTNode visitAlterProcedure(final AlterProcedureContext ctx) {
449 return new AlterProcedureStatement();
450 }
451
452 @Override
453 public ASTNode visitAlterFunction(final AlterFunctionContext ctx) {
454 return new AlterFunctionStatement();
455 }
456
457 @Override
458 public ASTNode visitAlterView(final AlterViewContext ctx) {
459 AlterViewStatement result = new AlterViewStatement();
460 result.setView((SimpleTableSegment) visit(ctx.viewName()));
461 result.setViewDefinition(getOriginalText(ctx.createOrAlterViewClause().select()));
462 result.setSelect((SelectStatement) visit(ctx.createOrAlterViewClause().select()));
463 return result;
464 }
465
466 @Override
467 public ASTNode visitAlterDatabase(final AlterDatabaseContext ctx) {
468 return new AlterDatabaseStatement();
469 }
470
471 @Override
472 public ASTNode visitDropDatabase(final DropDatabaseContext ctx) {
473 return new DropDatabaseStatement(null, false);
474 }
475
476 @Override
477 public ASTNode visitDropFunction(final DropFunctionContext ctx) {
478 return new DropFunctionStatement();
479 }
480
481 @Override
482 public ASTNode visitDropProcedure(final DropProcedureContext ctx) {
483 return new DropProcedureStatement();
484 }
485
486 @Override
487 public ASTNode visitDropView(final DropViewContext ctx) {
488 DropViewStatement result = new DropViewStatement();
489 result.setIfExists(null != ctx.ifExists());
490 for (ViewNameContext each : ctx.viewName()) {
491 result.getViews().add((SimpleTableSegment) visit(each));
492 }
493 return result;
494 }
495
496 @Override
497 public ASTNode visitDropTrigger(final DropTriggerContext ctx) {
498 return new DropTriggerStatement();
499 }
500
501 @Override
502 public ASTNode visitDropSequence(final DropSequenceContext ctx) {
503 return new DropSequenceStatement(Collections.emptyList());
504 }
505 }