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.
*