This is an automated email from the ASF dual-hosted git repository.

duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 0efdc3203b9 Add mysql charset sql parsing (#32282)
0efdc3203b9 is described below

commit 0efdc3203b9601844a02005caf2d0f93d4090de7
Author: ZhangCheng <[email protected]>
AuthorDate: Fri Jul 26 20:02:41 2024 +0800

    Add mysql charset sql parsing (#32282)
    
    * Add mysql charset sql parsing
    
    * Add mysql charset sql parsing
---
 .../visitor/statement/type/MySQLDDLStatementVisitor.java    | 13 +++++++++++++
 .../core/segment/ddl/column/ColumnDefinitionSegment.java    |  6 ++++++
 .../core/segment/ddl/table/CreateTableOptionSegment.java    |  4 ++++
 3 files changed, 23 insertions(+)

diff --git 
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
 
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
index 4c6e72f5c42..a0555365bba 100644
--- 
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
+++ 
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
@@ -48,6 +48,7 @@ import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.BeginSt
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CaseStatementContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ChangeColumnContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CharsetNameContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CollationNameContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ColumnDefinitionContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CompoundStatementContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CreateDatabaseContext;
@@ -101,6 +102,7 @@ import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.SimpleS
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.TableConstraintDefContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.TableElementContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.TableNameContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.TextOrIdentifierContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.TruncateTableContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ValidStatementContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.WhileStatementContext;
@@ -279,6 +281,12 @@ public final class MySQLDDLStatementVisitor extends 
MySQLStatementVisitor implem
                 result.setEngine((EngineSegment) visit(each.engineRef()));
             } else if (null != each.COMMENT()) {
                 result.setCommentSegment(new 
CommentSegment(each.string_().getText(), 
each.string_().getStart().getStartIndex(), 
each.string_().getStop().getStopIndex()));
+            } else if (null != each.defaultCharset()) {
+                
Optional.ofNullable(each.defaultCharset().charsetName()).map(CharsetNameContext::textOrIdentifier).map(TextOrIdentifierContext::identifier)
+                        .ifPresent(optional -> 
result.setCharsetName(optional.getText()));
+            } else if (null != each.defaultCollation()) {
+                
Optional.ofNullable(each.defaultCollation().collationName()).map(CollationNameContext::textOrIdentifier).map(TextOrIdentifierContext::identifier)
+                        .ifPresent(optional -> 
result.setCollateName(optional.getText()));
             }
         }
         return result;
@@ -576,6 +584,11 @@ public final class MySQLDDLStatementVisitor extends 
MySQLStatementVisitor implem
         ColumnDefinitionSegment result = new 
ColumnDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), column, dataTypeSegment, isPrimaryKey, false);
         result.getReferencedTables().addAll(getReferencedTables(ctx));
         result.setAutoIncrement(isAutoIncrement);
+        if (null != ctx.fieldDefinition().dataType().charsetWithOptBinary()) {
+            
result.setCharsetName(ctx.fieldDefinition().dataType().charsetWithOptBinary().charsetName().textOrIdentifier().identifier().IDENTIFIER_().getText());
+        }
+        ctx.fieldDefinition().columnAttribute().stream().filter(each -> 
each.collateClause() != null).findFirst()
+                .ifPresent(optional -> 
result.setCollateName(optional.collateClause().collationName().textOrIdentifier().identifier().IDENTIFIER_().getText()));
         return result;
     }
     
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/column/ColumnDefinitionSegment.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/column/ColumnDefinitionSegment.java
index 60a03f13026..867ef9c242d 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/column/ColumnDefinitionSegment.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/column/ColumnDefinitionSegment.java
@@ -54,4 +54,10 @@ public final class ColumnDefinitionSegment implements 
CreateDefinitionSegment {
     
     @Setter
     private boolean isRef;
+    
+    @Setter
+    private String charsetName;
+    
+    @Setter
+    private String collateName;
 }
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/table/CreateTableOptionSegment.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/table/CreateTableOptionSegment.java
index 62fbf3bb627..5dab4fbd20a 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/table/CreateTableOptionSegment.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/table/CreateTableOptionSegment.java
@@ -42,6 +42,10 @@ public final class CreateTableOptionSegment implements 
CreateDefinitionSegment {
     
     private CommentSegment commentSegment;
     
+    private String charsetName;
+    
+    private String collateName;
+    
     /**
      * Get engine.
      *

Reply via email to