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 93b4d9f8633 Refactor encrypt rewrite to use
SubstituteColumnDefinitionToken (#33396)
93b4d9f8633 is described below
commit 93b4d9f86332a88b6bbe02516258627d3f08bfed
Author: ZhangCheng <[email protected]>
AuthorDate: Fri Oct 25 13:48:07 2024 +0800
Refactor encrypt rewrite to use SubstituteColumnDefinitionToken (#33396)
* Refactor encrypt rewrite to use SubstituteColumnDefinitionToken
* Refactor encrypt rewrite to use SubstituteColumnDefinitionToken
* Refactor encrypt rewrite to use SubstituteColumnDefinitionToken
* Refactor encrypt rewrite to use SubstituteColumnDefinitionToken
---
.../ddl/EncryptCreateTableTokenGenerator.java | 31 ++++++------
.../ddl/EncryptAlterTableTokenGeneratorTest.java | 6 +--
.../ddl/EncryptCreateTableTokenGeneratorTest.java | 38 ++++++++-------
.../common/pojo/generic/ColumnDefinitionToken.java | 50 +++++++++++++++++++
.../generic/SubstituteColumnDefinitionToken.java | 56 ++++++++++++++++++++++
.../statement/type/DorisDDLStatementVisitor.java | 10 +++-
.../statement/type/MySQLDDLStatementVisitor.java | 10 +++-
.../type/OpenGaussDDLStatementVisitor.java | 10 +++-
.../statement/type/OracleDDLStatementVisitor.java | 10 +++-
.../type/PostgreSQLDDLStatementVisitor.java | 10 +++-
.../statement/type/PrestoDDLStatementVisitor.java | 8 +++-
.../statement/type/SQL92DDLStatementVisitor.java | 8 +++-
.../type/SQLServerDDLStatementVisitor.java | 12 +++--
.../ddl/column/ColumnDefinitionSegment.java | 2 +
.../query-with-cipher/ddl/create/create-table.xml | 4 +-
15 files changed, 212 insertions(+), 53 deletions(-)
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/ddl/EncryptCreateTableTokenGenerator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/ddl/EncryptCreateTableTokenGenerator.java
index d75f1f426ac..8e21a1b73b7 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/ddl/EncryptCreateTableTokenGenerator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/ddl/EncryptCreateTableTokenGenerator.java
@@ -19,7 +19,6 @@ package
org.apache.shardingsphere.encrypt.rewrite.token.generator.ddl;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.encrypt.constant.EncryptColumnDataType;
-import org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptColumnToken;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.column.EncryptColumn;
import org.apache.shardingsphere.encrypt.rule.column.item.CipherColumnItem;
@@ -28,7 +27,8 @@ import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementCont
import
org.apache.shardingsphere.infra.binder.context.statement.ddl.CreateTableStatementContext;
import
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.CollectionSQLTokenGenerator;
import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken;
-import
org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.generic.RemoveToken;
+import
org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.generic.ColumnDefinitionToken;
+import
org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.generic.SubstituteColumnDefinitionToken;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.ColumnDefinitionSegment;
import java.util.ArrayList;
@@ -60,35 +60,34 @@ public final class EncryptCreateTableTokenGenerator
implements CollectionSQLToke
ColumnDefinitionSegment each = columns.get(index);
String columnName =
each.getColumnName().getIdentifier().getValue();
if (encryptTable.isEncryptColumn(columnName)) {
-
result.addAll(getColumnTokens(encryptTable.getEncryptColumn(columnName), each,
columns, index));
+
result.add(getSubstituteColumnToken(encryptTable.getEncryptColumn(columnName),
each, columns, index));
}
}
return result;
}
- private Collection<SQLToken> getColumnTokens(final EncryptColumn
encryptColumn, final ColumnDefinitionSegment column, final
List<ColumnDefinitionSegment> columns, final int index) {
+ private SQLToken getSubstituteColumnToken(final EncryptColumn
encryptColumn, final ColumnDefinitionSegment column, final
List<ColumnDefinitionSegment> columns, final int index) {
+ Collection<SQLToken> columnDefinitionTokens = new LinkedList<>();
+ columnDefinitionTokens.add(getCipherColumnToken(encryptColumn,
column));
+ getAssistedQueryColumnToken(encryptColumn,
column).ifPresent(columnDefinitionTokens::add);
+ getLikeQueryColumnToken(encryptColumn,
column).ifPresent(columnDefinitionTokens::add);
boolean lastColumn = columns.size() - 1 == index;
int columnStopIndex = lastColumn ? column.getStopIndex() :
columns.get(index + 1).getStartIndex() - 1;
- Collection<SQLToken> result = new LinkedList<>();
- result.add(new RemoveToken(column.getStartIndex(), columnStopIndex));
- result.add(getCipherColumnToken(encryptColumn, column,
columnStopIndex));
- getAssistedQueryColumnToken(encryptColumn, column, columnStopIndex,
lastColumn).ifPresent(result::add);
- getLikeQueryColumnToken(encryptColumn, column, columnStopIndex,
lastColumn).ifPresent(result::add);
- return result;
+ return new SubstituteColumnDefinitionToken(column.getStartIndex(),
columnStopIndex, lastColumn, columnDefinitionTokens);
}
- private SQLToken getCipherColumnToken(final EncryptColumn encryptColumn,
final ColumnDefinitionSegment column, final int stopIndex) {
+ private SQLToken getCipherColumnToken(final EncryptColumn encryptColumn,
final ColumnDefinitionSegment column) {
CipherColumnItem cipherColumnItem = encryptColumn.getCipher();
- return new EncryptColumnToken(stopIndex + 1, column.getStopIndex(),
cipherColumnItem.getName(), EncryptColumnDataType.DEFAULT_DATA_TYPE);
+ return new ColumnDefinitionToken(cipherColumnItem.getName(),
EncryptColumnDataType.DEFAULT_DATA_TYPE, column.getStartIndex());
}
- private Optional<? extends SQLToken> getAssistedQueryColumnToken(final
EncryptColumn encryptColumn, final ColumnDefinitionSegment column, final int
stopIndex, final boolean lastColumn) {
+ private Optional<? extends SQLToken> getAssistedQueryColumnToken(final
EncryptColumn encryptColumn, final ColumnDefinitionSegment column) {
return encryptColumn.getAssistedQuery()
- .map(optional -> new EncryptColumnToken(stopIndex + 1,
column.getStopIndex(), encryptColumn.getAssistedQuery().get().getName(),
EncryptColumnDataType.DEFAULT_DATA_TYPE, lastColumn));
+ .map(optional -> new
ColumnDefinitionToken(encryptColumn.getAssistedQuery().get().getName(),
EncryptColumnDataType.DEFAULT_DATA_TYPE, column.getStartIndex()));
}
- private Optional<? extends SQLToken> getLikeQueryColumnToken(final
EncryptColumn encryptColumn, final ColumnDefinitionSegment column, final int
stopIndex, final boolean lastColumn) {
+ private Optional<? extends SQLToken> getLikeQueryColumnToken(final
EncryptColumn encryptColumn, final ColumnDefinitionSegment column) {
return encryptColumn.getLikeQuery()
- .map(optional -> new EncryptColumnToken(stopIndex + 1,
column.getStopIndex(), encryptColumn.getLikeQuery().get().getName(),
EncryptColumnDataType.DEFAULT_DATA_TYPE, lastColumn));
+ .map(optional -> new
ColumnDefinitionToken(encryptColumn.getLikeQuery().get().getName(),
EncryptColumnDataType.DEFAULT_DATA_TYPE, column.getStartIndex()));
}
}
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/ddl/EncryptAlterTableTokenGeneratorTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/ddl/EncryptAlterTableTokenGeneratorTest.java
index 341e059dfb7..97f4f8f71c7 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/ddl/EncryptAlterTableTokenGeneratorTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/ddl/EncryptAlterTableTokenGeneratorTest.java
@@ -115,7 +115,7 @@ class EncryptAlterTableTokenGeneratorTest {
AlterTableStatementContext result =
mock(AlterTableStatementContext.class, RETURNS_DEEP_STUBS);
when(result.getSqlStatement().getTable().getTableName().getIdentifier().getValue()).thenReturn("t_encrypt");
ColumnDefinitionSegment columnDefinitionSegment = new
ColumnDefinitionSegment(
- 33, 67, new ColumnSegment(33, 50, new
IdentifierValue("certificate_number")), new DataTypeSegment(), false, false);
+ 33, 67, new ColumnSegment(33, 50, new
IdentifierValue("certificate_number")), new DataTypeSegment(), false, false,
"");
when(result.getSqlStatement().getAddColumnDefinitions()).thenReturn(Collections.singleton(new
AddColumnDefinitionSegment(22, 67,
Collections.singleton(columnDefinitionSegment))));
return result;
}
@@ -129,7 +129,7 @@ class EncryptAlterTableTokenGeneratorTest {
AlterTableStatementContext result =
mock(AlterTableStatementContext.class, RETURNS_DEEP_STUBS);
when(result.getSqlStatement().getTable().getTableName().getIdentifier().getValue()).thenReturn("t_encrypt");
ColumnDefinitionSegment columnDefinitionSegment = new
ColumnDefinitionSegment(
- 36, 70, new ColumnSegment(36, 53, new
IdentifierValue("certificate_number")), new DataTypeSegment(), false, false);
+ 36, 70, new ColumnSegment(36, 53, new
IdentifierValue("certificate_number")), new DataTypeSegment(), false, false,
"");
when(result.getSqlStatement().getModifyColumnDefinitions()).thenReturn(Collections.singleton(new
ModifyColumnDefinitionSegment(22, 70, columnDefinitionSegment)));
return result;
}
@@ -143,7 +143,7 @@ class EncryptAlterTableTokenGeneratorTest {
AlterTableStatementContext result =
mock(AlterTableStatementContext.class, RETURNS_DEEP_STUBS);
when(result.getSqlStatement().getTable().getTableName().getIdentifier().getValue()).thenReturn("t_encrypt");
ColumnDefinitionSegment columnDefinitionSegment = new
ColumnDefinitionSegment(
- 55, 93, new ColumnSegment(55, 76, new
IdentifierValue("certificate_number_new")), new DataTypeSegment(), false,
false);
+ 55, 93, new ColumnSegment(55, 76, new
IdentifierValue("certificate_number_new")), new DataTypeSegment(), false,
false, "");
ChangeColumnDefinitionSegment changeColumnDefinitionSegment = new
ChangeColumnDefinitionSegment(22, 93, columnDefinitionSegment);
changeColumnDefinitionSegment.setPreviousColumn(new ColumnSegment(36,
53, new IdentifierValue("certificate_number")));
when(result.getSqlStatement().getChangeColumnDefinitions()).thenReturn(Collections.singleton(changeColumnDefinitionSegment));
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/ddl/EncryptCreateTableTokenGeneratorTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/ddl/EncryptCreateTableTokenGeneratorTest.java
index cabd35062eb..d2277cb9167 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/ddl/EncryptCreateTableTokenGeneratorTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/ddl/EncryptCreateTableTokenGeneratorTest.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.encrypt.rewrite.token.generator.ddl;
-import org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptColumnToken;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.column.EncryptColumn;
import
org.apache.shardingsphere.encrypt.rule.column.item.AssistedQueryColumnItem;
@@ -27,7 +26,8 @@ import
org.apache.shardingsphere.encrypt.rule.table.EncryptTable;
import org.apache.shardingsphere.encrypt.spi.EncryptAlgorithm;
import
org.apache.shardingsphere.infra.binder.context.statement.ddl.CreateTableStatementContext;
import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken;
-import
org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.generic.RemoveToken;
+import
org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.generic.ColumnDefinitionToken;
+import
org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.generic.SubstituteColumnDefinitionToken;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.ColumnDefinitionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DataTypeSegment;
@@ -42,6 +42,7 @@ import java.util.Iterator;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -80,27 +81,30 @@ class EncryptCreateTableTokenGeneratorTest {
@Test
void assertGenerateSQLTokens() {
Collection<SQLToken> actual =
generator.generateSQLTokens(mockCreateTableStatementContext());
- assertThat(actual.size(), is(4));
- Iterator<SQLToken> actualIterator = actual.iterator();
- assertThat(actualIterator.next(), instanceOf(RemoveToken.class));
- EncryptColumnToken cipherToken = (EncryptColumnToken)
actualIterator.next();
+ assertThat(actual.size(), is(1));
+ SQLToken token = actual.iterator().next();
+ assertThat(token, instanceOf(SubstituteColumnDefinitionToken.class));
+ Collection<SQLToken> columnTokens = ((SubstituteColumnDefinitionToken)
token).getColumnDefinitionTokens();
+ Iterator<SQLToken> actualIterator = columnTokens.iterator();
+ ColumnDefinitionToken cipherToken = (ColumnDefinitionToken)
actualIterator.next();
assertThat(cipherToken.toString(), is("cipher_certificate_number
VARCHAR(4000)"));
- assertThat(cipherToken.getStartIndex(), is(79));
- assertThat(cipherToken.getStopIndex(), is(78));
- EncryptColumnToken assistedToken = (EncryptColumnToken)
actualIterator.next();
- assertThat(assistedToken.toString(), is(", assisted_certificate_number
VARCHAR(4000)"));
- assertThat(assistedToken.getStartIndex(), is(79));
- assertThat(assistedToken.getStopIndex(), is(78));
- EncryptColumnToken likeToken = (EncryptColumnToken)
actualIterator.next();
- assertThat(likeToken.toString(), is(", like_certificate_number
VARCHAR(4000)"));
- assertThat(likeToken.getStartIndex(), is(79));
- assertThat(likeToken.getStopIndex(), is(78));
+ assertThat(cipherToken.getStartIndex(), is(25));
+ ColumnDefinitionToken assistedToken = (ColumnDefinitionToken)
actualIterator.next();
+ assertThat(assistedToken.toString(), is("assisted_certificate_number
VARCHAR(4000)"));
+ assertThat(assistedToken.getStartIndex(), is(25));
+ ColumnDefinitionToken likeToken = (ColumnDefinitionToken)
actualIterator.next();
+ assertThat(likeToken.toString(), is("like_certificate_number
VARCHAR(4000)"));
+ assertThat(likeToken.getStartIndex(), is(25));
+ assertThat(token.toString(), is("cipher_certificate_number
VARCHAR(4000), assisted_certificate_number VARCHAR(4000),
like_certificate_number VARCHAR(4000)"));
+ assertThat(token.getStartIndex(), is(25));
+ assertThat(((SubstituteColumnDefinitionToken) token).getStopIndex(),
is(78));
+ assertTrue(((SubstituteColumnDefinitionToken) token).isLastColumn());
}
private CreateTableStatementContext mockCreateTableStatementContext() {
CreateTableStatementContext result =
mock(CreateTableStatementContext.class, RETURNS_DEEP_STUBS);
when(result.getSqlStatement().getTable().getTableName().getIdentifier().getValue()).thenReturn("t_encrypt");
- ColumnDefinitionSegment segment = new ColumnDefinitionSegment(25, 78,
new ColumnSegment(25, 42, new IdentifierValue("certificate_number")), new
DataTypeSegment(), false, false);
+ ColumnDefinitionSegment segment = new ColumnDefinitionSegment(25, 78,
new ColumnSegment(25, 42, new IdentifierValue("certificate_number")), new
DataTypeSegment(), false, false, "");
when(result.getSqlStatement().getColumnDefinitions()).thenReturn(Collections.singleton(segment));
return result;
}
diff --git
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/ColumnDefinitionToken.java
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/ColumnDefinitionToken.java
new file mode 100644
index 00000000000..bd62611b110
--- /dev/null
+++
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/ColumnDefinitionToken.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.generic;
+
+import com.google.common.base.Strings;
+import lombok.Getter;
+import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken;
+
+/**
+ * Column definition token.
+ */
+@Getter
+public final class ColumnDefinitionToken extends SQLToken {
+
+ private final String columnName;
+
+ private final String dataType;
+
+ public ColumnDefinitionToken(final String columnName, final String
dataType, final int startIndex) {
+ super(startIndex);
+ this.columnName = columnName;
+ this.dataType = dataType;
+ }
+
+ @Override
+ public String toString() {
+ if (Strings.isNullOrEmpty(dataType)) {
+ return columnName;
+ }
+ if (Strings.isNullOrEmpty(columnName)) {
+ return dataType;
+ }
+ return columnName + " " + dataType;
+ }
+}
diff --git
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/SubstituteColumnDefinitionToken.java
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/SubstituteColumnDefinitionToken.java
new file mode 100644
index 00000000000..aac3bc239c8
--- /dev/null
+++
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/SubstituteColumnDefinitionToken.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.generic;
+
+import lombok.Getter;
+import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken;
+import
org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.Substitutable;
+
+import java.util.Collection;
+
+/**
+ * Substitute column definition token.
+ */
+@Getter
+public final class SubstituteColumnDefinitionToken extends SQLToken implements
Substitutable {
+
+ private final int stopIndex;
+
+ private final boolean lastColumn;
+
+ private final Collection<SQLToken> columnDefinitionTokens;
+
+ public SubstituteColumnDefinitionToken(final int startIndex, final int
stopIndex, final boolean lastColumn, final Collection<SQLToken>
columnDefinitionTokens) {
+ super(startIndex);
+ this.stopIndex = stopIndex;
+ this.lastColumn = lastColumn;
+ this.columnDefinitionTokens = columnDefinitionTokens;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ for (SQLToken each : columnDefinitionTokens) {
+ builder.append(each.toString()).append(", ");
+ }
+ if (lastColumn) {
+ builder.delete(builder.length() - 2, builder.length());
+ }
+ return builder.toString();
+ }
+}
diff --git
a/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDDLStatementVisitor.java
b/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDDLStatementVisitor.java
index 288bc0e98f2..aaaee7b0319 100644
---
a/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDDLStatementVisitor.java
+++
b/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDDLStatementVisitor.java
@@ -18,6 +18,8 @@
package org.apache.shardingsphere.sql.parser.doris.visitor.statement.type;
import com.google.common.base.Preconditions;
+import org.antlr.v4.runtime.ParserRuleContext;
+import org.antlr.v4.runtime.misc.Interval;
import org.apache.shardingsphere.sql.parser.api.ASTNode;
import
org.apache.shardingsphere.sql.parser.api.visitor.statement.type.DDLStatementVisitor;
import
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.AddColumnContext;
@@ -358,11 +360,15 @@ public final class DorisDDLStatementVisitor extends
DorisStatementVisitor implem
boolean isPrimaryKey = ctx.columnAttribute().stream().anyMatch(each ->
null != each.KEY() && null == each.UNIQUE());
boolean isAutoIncrement = ctx.columnAttribute().stream().anyMatch(each
-> null != each.AUTO_INCREMENT());
// TODO parse not null
- ColumnDefinitionSegment result = new
ColumnDefinitionSegment(column.getStartIndex(), ctx.getStop().getStopIndex(),
column, dataTypeSegment, isPrimaryKey, false);
+ ColumnDefinitionSegment result = new
ColumnDefinitionSegment(column.getStartIndex(), ctx.getStop().getStopIndex(),
column, dataTypeSegment, isPrimaryKey, false, getText(ctx));
result.setAutoIncrement(isAutoIncrement);
return result;
}
+ private String getText(final ParserRuleContext ctx) {
+ return ctx.start.getInputStream().getText(new
Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex()));
+ }
+
@Override
public ASTNode visitAlterConstraint(final AlterConstraintContext ctx) {
return new
ModifyConstraintDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), (ConstraintSegment) visit(ctx.constraintName()));
@@ -579,7 +585,7 @@ public final class DorisDDLStatementVisitor extends
DorisStatementVisitor implem
boolean isPrimaryKey =
ctx.fieldDefinition().columnAttribute().stream().anyMatch(each -> null !=
each.KEY() && null == each.UNIQUE());
boolean isAutoIncrement =
ctx.fieldDefinition().columnAttribute().stream().anyMatch(each -> null !=
each.AUTO_INCREMENT());
boolean isNotNull =
ctx.fieldDefinition().columnAttribute().stream().anyMatch(each -> null !=
each.NOT() && null != each.NULL());
- ColumnDefinitionSegment result = new
ColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, dataTypeSegment, isPrimaryKey, isNotNull);
+ ColumnDefinitionSegment result = new
ColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, dataTypeSegment, isPrimaryKey, isNotNull,
getText(ctx));
result.getReferencedTables().addAll(getReferencedTables(ctx));
result.setAutoIncrement(isAutoIncrement);
return result;
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 820ea3b780c..cbad47bb37f 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
@@ -17,6 +17,8 @@
package org.apache.shardingsphere.sql.parser.mysql.visitor.statement.type;
+import org.antlr.v4.runtime.ParserRuleContext;
+import org.antlr.v4.runtime.misc.Interval;
import com.google.common.base.Preconditions;
import org.apache.shardingsphere.sql.parser.api.ASTNode;
import
org.apache.shardingsphere.sql.parser.api.visitor.statement.type.DDLStatementVisitor;
@@ -360,11 +362,15 @@ public final class MySQLDDLStatementVisitor extends
MySQLStatementVisitor implem
boolean isPrimaryKey = ctx.columnAttribute().stream().anyMatch(each ->
null != each.KEY() && null == each.UNIQUE());
boolean isAutoIncrement = ctx.columnAttribute().stream().anyMatch(each
-> null != each.AUTO_INCREMENT());
// TODO parse not null
- ColumnDefinitionSegment result = new
ColumnDefinitionSegment(column.getStartIndex(), ctx.getStop().getStopIndex(),
column, dataTypeSegment, isPrimaryKey, false);
+ ColumnDefinitionSegment result = new
ColumnDefinitionSegment(column.getStartIndex(), ctx.getStop().getStopIndex(),
column, dataTypeSegment, isPrimaryKey, false, getText(ctx));
result.setAutoIncrement(isAutoIncrement);
return result;
}
+ private String getText(final ParserRuleContext ctx) {
+ return ctx.start.getInputStream().getText(new
Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex()));
+ }
+
@Override
public ASTNode visitAlterConstraint(final AlterConstraintContext ctx) {
return new
ModifyConstraintDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), (ConstraintSegment) visit(ctx.constraintName()));
@@ -581,7 +587,7 @@ public final class MySQLDDLStatementVisitor extends
MySQLStatementVisitor implem
boolean isPrimaryKey =
ctx.fieldDefinition().columnAttribute().stream().anyMatch(each -> null !=
each.KEY() && null == each.UNIQUE());
boolean isAutoIncrement =
ctx.fieldDefinition().columnAttribute().stream().anyMatch(each -> null !=
each.AUTO_INCREMENT());
boolean isNotNull =
ctx.fieldDefinition().columnAttribute().stream().anyMatch(each -> null !=
each.NOT() && null != each.NULL());
- ColumnDefinitionSegment result = new
ColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, dataTypeSegment, isPrimaryKey, isNotNull);
+ ColumnDefinitionSegment result = new
ColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, dataTypeSegment, isPrimaryKey, isNotNull,
getText(ctx));
result.getReferencedTables().addAll(getReferencedTables(ctx));
result.setAutoIncrement(isAutoIncrement);
if (null != ctx.fieldDefinition().dataType().charsetWithOptBinary()) {
diff --git
a/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDDLStatementVisitor.java
b/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDDLStatementVisitor.java
index 0263ed3fdda..ddc1192fbd2 100644
---
a/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDDLStatementVisitor.java
+++
b/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDDLStatementVisitor.java
@@ -17,6 +17,8 @@
package org.apache.shardingsphere.sql.parser.opengauss.visitor.statement.type;
+import org.antlr.v4.runtime.ParserRuleContext;
+import org.antlr.v4.runtime.misc.Interval;
import org.apache.shardingsphere.sql.parser.api.ASTNode;
import
org.apache.shardingsphere.sql.parser.api.visitor.statement.type.DDLStatementVisitor;
import
org.apache.shardingsphere.sql.parser.autogen.OpenGaussStatementParser.AbsoluteCountContext;
@@ -445,7 +447,7 @@ public final class OpenGaussDDLStatementVisitor extends
OpenGaussStatementVisito
DataTypeSegment dataType = (DataTypeSegment) visit(ctx.dataType());
boolean isPrimaryKey = ctx.columnConstraint().stream().anyMatch(each
-> null != each.columnConstraintOption() && null !=
each.columnConstraintOption().primaryKey());
// TODO parse not null
- ColumnDefinitionSegment result = new
ColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, dataType, isPrimaryKey, false);
+ ColumnDefinitionSegment result = new
ColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, dataType, isPrimaryKey, false,
getText(ctx));
for (ColumnConstraintContext each : ctx.columnConstraint()) {
if (null != each.columnConstraintOption().tableName()) {
result.getReferencedTables().add((SimpleTableSegment)
visit(each.columnConstraintOption().tableName()));
@@ -454,6 +456,10 @@ public final class OpenGaussDDLStatementVisitor extends
OpenGaussStatementVisito
return result;
}
+ private String getText(final ParserRuleContext ctx) {
+ return ctx.start.getInputStream().getText(new
Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex()));
+ }
+
@Override
public ASTNode visitTableConstraintUsingIndex(final
TableConstraintUsingIndexContext ctx) {
ConstraintDefinitionSegment result = new
ConstraintDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex());
@@ -487,7 +493,7 @@ public final class OpenGaussDDLStatementVisitor extends
OpenGaussStatementVisito
// TODO visit pk and table ref
ColumnSegment column = (ColumnSegment)
visit(ctx.modifyColumn().columnName());
DataTypeSegment dataType = null == ctx.dataType() ? null :
(DataTypeSegment) visit(ctx.dataType());
- ColumnDefinitionSegment columnDefinition = new
ColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, dataType, false, false);
+ ColumnDefinitionSegment columnDefinition = new
ColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, dataType, false, false, getText(ctx));
return new
ModifyColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), columnDefinition);
}
diff --git
a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
index f1bb7da89a6..422659d4bd1 100644
---
a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
+++
b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
@@ -17,6 +17,8 @@
package org.apache.shardingsphere.sql.parser.oracle.visitor.statement.type;
+import org.antlr.v4.runtime.ParserRuleContext;
+import org.antlr.v4.runtime.misc.Interval;
import org.apache.shardingsphere.sql.parser.api.ASTNode;
import
org.apache.shardingsphere.sql.parser.api.visitor.statement.type.DDLStatementVisitor;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AddColumnSpecificationContext;
@@ -482,7 +484,7 @@ public final class OracleDDLStatementVisitor extends
OracleStatementVisitor impl
DataTypeSegment dataType = null == ctx.dataType() ? null :
(DataTypeSegment) visit(ctx.dataType());
boolean isPrimaryKey = ctx.inlineConstraint().stream().anyMatch(each
-> null != each.primaryKey());
boolean isNotNull = ctx.inlineConstraint().stream().anyMatch(each ->
null != each.NOT() && null != each.NULL());
- ColumnDefinitionSegment result = new
ColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, dataType, isPrimaryKey, isNotNull);
+ ColumnDefinitionSegment result = new
ColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, dataType, isPrimaryKey, isNotNull,
getText(ctx));
if (null != ctx.REF() && null != ctx.dataType()) {
result.setRef(true);
}
@@ -497,6 +499,10 @@ public final class OracleDDLStatementVisitor extends
OracleStatementVisitor impl
return result;
}
+ private String getText(final ParserRuleContext ctx) {
+ return ctx.start.getInputStream().getText(new
Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex()));
+ }
+
@SuppressWarnings("unchecked")
@Override
public ASTNode visitOutOfLineConstraint(final OutOfLineConstraintContext
ctx) {
@@ -673,7 +679,7 @@ public final class OracleDDLStatementVisitor extends
OracleStatementVisitor impl
ColumnSegment column = (ColumnSegment) visit(ctx.columnName());
DataTypeSegment dataType = null == ctx.dataType() ? null :
(DataTypeSegment) visit(ctx.dataType());
// TODO visit pk and reference table
- return new ColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, dataType, false, false);
+ return new ColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, dataType, false, false, getText(ctx));
}
@Override
diff --git
a/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLDDLStatementVisitor.java
b/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLDDLStatementVisitor.java
index f4027b4800b..98a5a5b20ad 100644
---
a/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLDDLStatementVisitor.java
+++
b/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLDDLStatementVisitor.java
@@ -17,6 +17,8 @@
package org.apache.shardingsphere.sql.parser.postgresql.visitor.statement.type;
+import org.antlr.v4.runtime.ParserRuleContext;
+import org.antlr.v4.runtime.misc.Interval;
import org.apache.shardingsphere.sql.parser.api.ASTNode;
import
org.apache.shardingsphere.sql.parser.api.visitor.statement.type.DDLStatementVisitor;
import
org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.AbsoluteCountContext;
@@ -560,7 +562,7 @@ public final class PostgreSQLDDLStatementVisitor extends
PostgreSQLStatementVisi
DataTypeSegment dataType = (DataTypeSegment) visit(ctx.dataType());
boolean isPrimaryKey = ctx.columnConstraint().stream().anyMatch(each
-> null != each.columnConstraintOption() && null !=
each.columnConstraintOption().primaryKey());
// TODO parse not null
- ColumnDefinitionSegment result = new
ColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, dataType, isPrimaryKey, false);
+ ColumnDefinitionSegment result = new
ColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, dataType, isPrimaryKey, false,
getText(ctx));
for (ColumnConstraintContext each : ctx.columnConstraint()) {
if (null != each.columnConstraintOption().tableName()) {
result.getReferencedTables().add((SimpleTableSegment)
visit(each.columnConstraintOption().tableName()));
@@ -569,6 +571,10 @@ public final class PostgreSQLDDLStatementVisitor extends
PostgreSQLStatementVisi
return result;
}
+ private String getText(final ParserRuleContext ctx) {
+ return ctx.start.getInputStream().getText(new
Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex()));
+ }
+
@Override
public ASTNode visitTableConstraintUsingIndex(final
TableConstraintUsingIndexContext ctx) {
ConstraintDefinitionSegment result = new
ConstraintDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex());
@@ -602,7 +608,7 @@ public final class PostgreSQLDDLStatementVisitor extends
PostgreSQLStatementVisi
// TODO visit pk and table ref
ColumnSegment column = (ColumnSegment)
visit(ctx.modifyColumn().columnName());
DataTypeSegment dataType = null == ctx.dataType() ? null :
(DataTypeSegment) visit(ctx.dataType());
- ColumnDefinitionSegment columnDefinition = new
ColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, dataType, false, false);
+ ColumnDefinitionSegment columnDefinition = new
ColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, dataType, false, false, getText(ctx));
return new
ModifyColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), columnDefinition);
}
diff --git
a/parser/sql/dialect/presto/src/main/java/org/apache/shardingsphere/sql/parser/presto/visitor/statement/type/PrestoDDLStatementVisitor.java
b/parser/sql/dialect/presto/src/main/java/org/apache/shardingsphere/sql/parser/presto/visitor/statement/type/PrestoDDLStatementVisitor.java
index d970c274014..9aa313d94cf 100644
---
a/parser/sql/dialect/presto/src/main/java/org/apache/shardingsphere/sql/parser/presto/visitor/statement/type/PrestoDDLStatementVisitor.java
+++
b/parser/sql/dialect/presto/src/main/java/org/apache/shardingsphere/sql/parser/presto/visitor/statement/type/PrestoDDLStatementVisitor.java
@@ -17,6 +17,8 @@
package org.apache.shardingsphere.sql.parser.presto.visitor.statement.type;
+import org.antlr.v4.runtime.ParserRuleContext;
+import org.antlr.v4.runtime.misc.Interval;
import org.apache.shardingsphere.sql.parser.api.ASTNode;
import
org.apache.shardingsphere.sql.parser.api.visitor.statement.type.DDLStatementVisitor;
import
org.apache.shardingsphere.sql.parser.autogen.PrestoStatementParser.CharsetNameContext;
@@ -106,7 +108,11 @@ public final class PrestoDDLStatementVisitor extends
PrestoStatementVisitor impl
public ASTNode visitColumnDefinition(final ColumnDefinitionContext ctx) {
ColumnSegment column = new
ColumnSegment(ctx.column_name.start.getStartIndex(),
ctx.column_name.stop.getStopIndex(), (IdentifierValue) visit(ctx.column_name));
DataTypeSegment dataTypeSegment = (DataTypeSegment)
visit(ctx.fieldDefinition().dataType());
- return new ColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, dataTypeSegment, false, false);
+ return new ColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, dataTypeSegment, false, false,
getText(ctx));
+ }
+
+ private String getText(final ParserRuleContext ctx) {
+ return ctx.start.getInputStream().getText(new
Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex()));
}
@SuppressWarnings("unchecked")
diff --git
a/parser/sql/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/type/SQL92DDLStatementVisitor.java
b/parser/sql/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/type/SQL92DDLStatementVisitor.java
index cde300eaa0d..d3a9f2eff21 100644
---
a/parser/sql/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/type/SQL92DDLStatementVisitor.java
+++
b/parser/sql/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/type/SQL92DDLStatementVisitor.java
@@ -17,6 +17,8 @@
package org.apache.shardingsphere.sql.parser.sql92.visitor.statement.type;
+import org.antlr.v4.runtime.ParserRuleContext;
+import org.antlr.v4.runtime.misc.Interval;
import org.apache.shardingsphere.sql.parser.api.ASTNode;
import
org.apache.shardingsphere.sql.parser.api.visitor.statement.type.DDLStatementVisitor;
import
org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.AddColumnSpecificationContext;
@@ -103,7 +105,7 @@ public final class SQL92DDLStatementVisitor extends
SQL92StatementVisitor implem
DataTypeSegment dataType = (DataTypeSegment) visit(ctx.dataType());
boolean isPrimaryKey = ctx.dataTypeOption().stream().anyMatch(each ->
null != each.primaryKey());
// TODO parse not null
- ColumnDefinitionSegment result = new
ColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, dataType, isPrimaryKey, false);
+ ColumnDefinitionSegment result = new
ColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, dataType, isPrimaryKey, false,
getText(ctx));
for (DataTypeOptionContext each : ctx.dataTypeOption()) {
if (null != each.referenceDefinition()) {
result.getReferencedTables().add((SimpleTableSegment)
visit(each.referenceDefinition().tableName()));
@@ -112,6 +114,10 @@ public final class SQL92DDLStatementVisitor extends
SQL92StatementVisitor implem
return result;
}
+ private String getText(final ParserRuleContext ctx) {
+ return ctx.start.getInputStream().getText(new
Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex()));
+ }
+
@Override
public ASTNode visitCheckConstraintDefinition(final
CheckConstraintDefinitionContext ctx) {
return new ConstraintDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex());
diff --git
a/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/type/SQLServerDDLStatementVisitor.java
b/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/type/SQLServerDDLStatementVisitor.java
index 277bd5de6be..0180b750bf3 100644
---
a/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/type/SQLServerDDLStatementVisitor.java
+++
b/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/type/SQLServerDDLStatementVisitor.java
@@ -17,6 +17,8 @@
package org.apache.shardingsphere.sql.parser.sqlserver.visitor.statement.type;
+import org.antlr.v4.runtime.ParserRuleContext;
+import org.antlr.v4.runtime.misc.Interval;
import org.apache.shardingsphere.sql.parser.api.ASTNode;
import
org.apache.shardingsphere.sql.parser.api.visitor.statement.type.DDLStatementVisitor;
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.AddColumnSpecificationContext;
@@ -68,6 +70,7 @@ import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.Mod
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.TableConstraintContext;
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.TruncateTableContext;
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ViewNameContext;
+import
org.apache.shardingsphere.sql.parser.sqlserver.visitor.statement.SQLServerStatementVisitor;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.AlterDefinitionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.CreateDefinitionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.ColumnDefinitionSegment;
@@ -116,7 +119,6 @@ import
org.apache.shardingsphere.sql.parser.statement.sqlserver.ddl.SQLServerDro
import
org.apache.shardingsphere.sql.parser.statement.sqlserver.ddl.SQLServerDropViewStatement;
import
org.apache.shardingsphere.sql.parser.statement.sqlserver.ddl.SQLServerTruncateStatement;
import
org.apache.shardingsphere.sql.parser.statement.sqlserver.dml.SQLServerSelectStatement;
-import
org.apache.shardingsphere.sql.parser.sqlserver.visitor.statement.SQLServerStatementVisitor;
import java.util.Collection;
import java.util.Collections;
@@ -166,7 +168,7 @@ public final class SQLServerDDLStatementVisitor extends
SQLServerStatementVisito
DataTypeSegment dataType = (DataTypeSegment) visit(ctx.dataType());
boolean isPrimaryKey = isPrimaryKey(ctx);
// TODO parse not null
- ColumnDefinitionSegment result = new
ColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, dataType, isPrimaryKey, false);
+ ColumnDefinitionSegment result = new
ColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, dataType, isPrimaryKey, false,
getText(ctx));
for (ColumnDefinitionOptionContext each :
ctx.columnDefinitionOption()) {
for (ColumnConstraintContext columnConstraint :
each.columnConstraint()) {
if (null != columnConstraint.columnForeignKeyConstraint()) {
@@ -182,6 +184,10 @@ public final class SQLServerDDLStatementVisitor extends
SQLServerStatementVisito
return result;
}
+ private String getText(final ParserRuleContext ctx) {
+ return ctx.start.getInputStream().getText(new
Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex()));
+ }
+
private boolean isPrimaryKey(final ColumnDefinitionContext ctx) {
for (ColumnDefinitionOptionContext each :
ctx.columnDefinitionOption()) {
for (ColumnConstraintContext columnConstraint :
each.columnConstraint()) {
@@ -287,7 +293,7 @@ public final class SQLServerDDLStatementVisitor extends
SQLServerStatementVisito
// TODO visit pk and table ref
ColumnSegment column = (ColumnSegment)
visit(ctx.alterColumnOperation().columnName());
DataTypeSegment dataType = (DataTypeSegment) visit(ctx.dataType());
- ColumnDefinitionSegment columnDefinition = new
ColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, dataType, false, false);
+ ColumnDefinitionSegment columnDefinition = new
ColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), column, dataType, false, false, getText(ctx));
return new
ModifyColumnDefinitionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), columnDefinition);
}
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 867ef9c242d..b9acd5d4673 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
@@ -50,6 +50,8 @@ public final class ColumnDefinitionSegment implements
CreateDefinitionSegment {
private final boolean notNull;
+ private final String text;
+
private final Collection<SimpleTableSegment> referencedTables = new
LinkedList<>();
@Setter
diff --git
a/test/it/rewriter/src/test/resources/scenario/mix/case/query-with-cipher/ddl/create/create-table.xml
b/test/it/rewriter/src/test/resources/scenario/mix/case/query-with-cipher/ddl/create/create-table.xml
index c2fc464fea8..b4c612ac812 100644
---
a/test/it/rewriter/src/test/resources/scenario/mix/case/query-with-cipher/ddl/create/create-table.xml
+++
b/test/it/rewriter/src/test/resources/scenario/mix/case/query-with-cipher/ddl/create/create-table.xml
@@ -37,7 +37,7 @@
<rewrite-assertion id="create_table_with_random_blank_cipher_column"
db-types="MySQL">
<input sql="CREATE TABLE t_account_detail_new( account_id INT ,
password VARCHAR(100) , amount VARCHAR(100)); " />
- <output sql="CREATE TABLE t_account_detail_new_0( account_id INT ,
cipher_password VARCHAR(4000) , assisted_query_password VARCHAR(4000) ,
cipher_amount VARCHAR(4000)); " />
- <output sql="CREATE TABLE t_account_detail_new_1( account_id INT ,
cipher_password VARCHAR(4000) , assisted_query_password VARCHAR(4000) ,
cipher_amount VARCHAR(4000)); " />
+ <output sql="CREATE TABLE t_account_detail_new_0( account_id INT ,
cipher_password VARCHAR(4000), assisted_query_password VARCHAR(4000),
cipher_amount VARCHAR(4000)); " />
+ <output sql="CREATE TABLE t_account_detail_new_1( account_id INT ,
cipher_password VARCHAR(4000), assisted_query_password VARCHAR(4000),
cipher_amount VARCHAR(4000)); " />
</rewrite-assertion>
</rewrite-assertions>