strongduanmu commented on code in PR #36040:
URL: https://github.com/apache/shardingsphere/pull/36040#discussion_r2218064157


##########
parser/sql/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/hive/visitor/statement/type/HiveDDLStatementVisitor.java:
##########
@@ -65,4 +80,86 @@ public ASTNode visitDropTable(final DropTableContext ctx) {
         result.getTables().addAll(((CollectionValue<SimpleTableSegment>) 
visit(ctx.tableList())).getValue());
         return result;
     }
+    
+    @SuppressWarnings("unchecked")
+    @Override
+    public ASTNode visitCreateTable(final CreateTableContext ctx) {
+        CreateTableStatement result = new 
CreateTableStatement(getDatabaseType());
+        result.setTable((SimpleTableSegment) visit(ctx.tableNameWithDb()));
+        result.setIfNotExists(null != ctx.ifNotExists());
+        if (null != ctx.createDefinitionClause()) {
+            CollectionValue<CreateDefinitionSegment> createDefinitions = 
(CollectionValue<CreateDefinitionSegment>) visit(ctx.createDefinitionClause());
+            for (CreateDefinitionSegment each : createDefinitions.getValue()) {
+                if (each instanceof ColumnDefinitionSegment) {
+                    
result.getColumnDefinitions().add((ColumnDefinitionSegment) each);
+                } else if (each instanceof ConstraintDefinitionSegment) {
+                    
result.getConstraintDefinitions().add((ConstraintDefinitionSegment) each);
+                }
+            }
+        }
+        return result;
+    }
+    
+    @Override
+    public ASTNode visitCreateDefinitionClause(final 
CreateDefinitionClauseContext ctx) {
+        CollectionValue<CreateDefinitionSegment> result = new 
CollectionValue<>();
+        for (ColumnDefinitionContext each : ctx.columnDefinition()) {
+            result.getValue().add((ColumnDefinitionSegment) visit(each));
+        }
+        for (TableConstraintContext each : ctx.tableConstraint()) {
+            result.getValue().add((ConstraintDefinitionSegment) visit(each));
+        }
+        return result;
+    }
+    
+    @Override
+    public ASTNode visitColumnDefinition(final ColumnDefinitionContext ctx) {
+        ColumnSegment column = new 
ColumnSegment(ctx.columnName().getStart().getStartIndex(), 
ctx.columnName().getStop().getStopIndex(),
+                new IdentifierValue(ctx.columnName().getText()));
+        DataTypeSegment dataType = (DataTypeSegment) 
visit(ctx.dataTypeClause());
+        return new ColumnDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), column, dataType, false, false, getText(ctx));
+    }
+    
+    private String getText(final ParserRuleContext ctx) {
+        return ctx.start.getInputStream().getText(new 
Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex()));
+    }
+    
+    @Override
+    public ASTNode visitDataTypeClause(final DataTypeClauseContext ctx) {
+        DataTypeSegment result = new DataTypeSegment();
+        result.setStartIndex(ctx.getStart().getStartIndex());
+        result.setStopIndex(ctx.getStop().getStopIndex());
+        if (null != ctx.primitiveType()) {
+            result.setDataTypeName(ctx.primitiveType().getText());
+        } else if (null != ctx.arrayType()) {
+            result.setDataTypeName(ctx.arrayType().getText());
+        } else if (null != ctx.mapType()) {
+            result.setDataTypeName(ctx.mapType().getText());
+        } else if (null != ctx.structType()) {
+            result.setDataTypeName(ctx.structType().getText());
+        } else if (null != ctx.unionType()) {
+            result.setDataTypeName(ctx.unionType().getText());
+        }
+        return result;
+    }
+    
+    @Override
+    public ASTNode visitTableNameWithDb(final TableNameWithDbContext ctx) {
+        if (ctx.identifier().size() == 1) {

Review Comment:
   Please put constant to the left hand.



##########
parser/sql/dialect/hive/src/main/antlr4/imports/hive/DDLStatement.g4:
##########
@@ -35,6 +35,11 @@ use
     : USE (identifier | DEFAULT)
     ;
 
+createTable
+    : CREATE createTableSpecification? TABLE ifNotExists? tableNameWithDb 
createDefinitionClause? tableComment? partitionedBy? clusteredBy? skewedBy? 
rowFormat? storedAs? storageLocation? tblProperties? (AS select)?
+    | CREATE createTableSpecification? TABLE ifNotExists? tableNameWithDb LIKE 
existingTableName storageLocation?

Review Comment:
   Can you merge the same `CREATE createTableSpecification? TABLE ifNotExists? 
tableNameWithDb`



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to