This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 8759bce4266 [fix](stmt):fix CreateTableStmt toSql placed comment in
wrong place (#27504)
8759bce4266 is described below
commit 8759bce42664e74cfbcfec4e2a934217d4ae61a8
Author: htyoung <[email protected]>
AuthorDate: Thu Dec 21 09:57:20 2023 +0800
[fix](stmt):fix CreateTableStmt toSql placed comment in wrong place (#27504)
Issue Number: close #27474
Co-authored-by: tongyang.han <[email protected]>
---
.../org/apache/doris/analysis/CreateTableStmt.java | 159 ++++++++-------------
.../apache/doris/analysis/CreateTableStmtTest.java | 62 ++++++++
2 files changed, 123 insertions(+), 98 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java
index 3bd12b64eef..210fa60857f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java
@@ -85,7 +85,6 @@ public class CreateTableStmt extends DdlStmt {
// set in analyze
private List<Column> columns = Lists.newArrayList();
-
private List<Index> indexes = Lists.newArrayList();
static {
@@ -130,48 +129,26 @@ public class CreateTableStmt extends DdlStmt {
columnDefs = Lists.newArrayList();
}
- public CreateTableStmt(boolean ifNotExists,
- boolean isExternal,
- TableName tableName,
- List<ColumnDef> columnDefinitions,
- String engineName,
- KeysDesc keysDesc,
- PartitionDesc partitionDesc,
- DistributionDesc distributionDesc,
- Map<String, String> properties,
- Map<String, String> extProperties,
+ public CreateTableStmt(boolean ifNotExists, boolean isExternal, TableName
tableName,
+ List<ColumnDef> columnDefinitions, String engineName, KeysDesc
keysDesc, PartitionDesc partitionDesc,
+ DistributionDesc distributionDesc, Map<String, String> properties,
Map<String, String> extProperties,
String comment) {
this(ifNotExists, isExternal, tableName, columnDefinitions, null,
engineName, keysDesc, partitionDesc,
distributionDesc, properties, extProperties, comment, null);
}
- public CreateTableStmt(boolean ifNotExists,
- boolean isExternal,
- TableName tableName,
- List<ColumnDef> columnDefinitions,
- String engineName,
- KeysDesc keysDesc,
- PartitionDesc partitionDesc,
- DistributionDesc distributionDesc,
- Map<String, String> properties,
- Map<String, String> extProperties,
+ public CreateTableStmt(boolean ifNotExists, boolean isExternal, TableName
tableName,
+ List<ColumnDef> columnDefinitions, String engineName, KeysDesc
keysDesc, PartitionDesc partitionDesc,
+ DistributionDesc distributionDesc, Map<String, String> properties,
Map<String, String> extProperties,
String comment, List<AlterClause> ops) {
this(ifNotExists, isExternal, tableName, columnDefinitions, null,
engineName, keysDesc, partitionDesc,
distributionDesc, properties, extProperties, comment, ops);
}
- public CreateTableStmt(boolean ifNotExists,
- boolean isExternal,
- TableName tableName,
- List<ColumnDef> columnDefinitions,
- List<IndexDef> indexDefs,
- String engineName,
- KeysDesc keysDesc,
- PartitionDesc partitionDesc,
- DistributionDesc distributionDesc,
- Map<String, String> properties,
- Map<String, String> extProperties,
- String comment, List<AlterClause> rollupAlterClauseList) {
+ public CreateTableStmt(boolean ifNotExists, boolean isExternal, TableName
tableName,
+ List<ColumnDef> columnDefinitions, List<IndexDef> indexDefs,
String engineName, KeysDesc keysDesc,
+ PartitionDesc partitionDesc, DistributionDesc distributionDesc,
Map<String, String> properties,
+ Map<String, String> extProperties, String comment,
List<AlterClause> rollupAlterClauseList) {
this.tableName = tableName;
if (columnDefinitions == null) {
this.columnDefs = Lists.newArrayList();
@@ -198,20 +175,10 @@ public class CreateTableStmt extends DdlStmt {
}
// for Nereids
- public CreateTableStmt(boolean ifNotExists,
- boolean isExternal,
- TableName tableName,
- List<Column> columns,
- List<Index> indexes,
- String engineName,
- KeysDesc keysDesc,
- PartitionDesc partitionDesc,
- DistributionDesc distributionDesc,
- Map<String, String> properties,
- Map<String, String> extProperties,
- String comment,
- List<AlterClause> rollupAlterClauseList,
- Void unused) {
+ public CreateTableStmt(boolean ifNotExists, boolean isExternal, TableName
tableName, List<Column> columns,
+ List<Index> indexes, String engineName, KeysDesc keysDesc,
PartitionDesc partitionDesc,
+ DistributionDesc distributionDesc, Map<String, String> properties,
Map<String, String> extProperties,
+ String comment, List<AlterClause> rollupAlterClauseList, Void
unused) {
this.ifNotExists = ifNotExists;
this.isExternal = isExternal;
this.tableName = tableName;
@@ -308,8 +275,8 @@ public class CreateTableStmt extends DdlStmt {
}
@Override
- public void analyze(Analyzer analyzer) throws UserException,
AnalysisException {
- if (Strings.isNullOrEmpty(engineName) ||
engineName.equalsIgnoreCase("olap")) {
+ public void analyze(Analyzer analyzer) throws UserException {
+ if (Strings.isNullOrEmpty(engineName) ||
engineName.equalsIgnoreCase(DEFAULT_ENGINE_NAME)) {
this.properties = maybeRewriteByAutoBucket(distributionDesc,
properties);
}
@@ -319,8 +286,8 @@ public class CreateTableStmt extends DdlStmt {
// disallow external catalog
Util.prohibitExternalCatalog(tableName.getCtl(),
this.getClass().getSimpleName());
- if
(!Env.getCurrentEnv().getAccessManager().checkTblPriv(ConnectContext.get(),
tableName.getDb(),
- tableName.getTbl(), PrivPredicate.CREATE)) {
+ if (!Env.getCurrentEnv().getAccessManager()
+ .checkTblPriv(ConnectContext.get(), tableName.getDb(),
tableName.getTbl(), PrivPredicate.CREATE)) {
ErrorReport.reportAnalysisException(ErrorCode.ERR_SPECIFIC_ACCESS_DENIED_ERROR,
"CREATE");
}
@@ -328,10 +295,10 @@ public class CreateTableStmt extends DdlStmt {
boolean enableDuplicateWithoutKeysByDefault = false;
if (properties != null) {
- enableDuplicateWithoutKeysByDefault =
-
PropertyAnalyzer.analyzeEnableDuplicateWithoutKeysByDefault(properties);
+ enableDuplicateWithoutKeysByDefault =
PropertyAnalyzer.analyzeEnableDuplicateWithoutKeysByDefault(
+ properties);
}
- //pre-block creation with column type ALL
+ // pre-block creation with column type ALL
for (ColumnDef columnDef : columnDefs) {
if (Objects.equals(columnDef.getType(), Type.ALL)) {
throw new AnalysisException("Disable to create table with
`ALL` type columns.");
@@ -340,14 +307,14 @@ public class CreateTableStmt extends DdlStmt {
throw new AnalysisException("Disable to create table with
`DATE` type columns, please use `DATEV2`.");
}
if (Objects.equals(columnDef.getType(), Type.DECIMALV2) &&
Config.disable_decimalv2) {
- throw new AnalysisException("Disable to create table with
`DECIMAL` type columns,"
- + "please use `DECIMALV3`.");
+ throw new AnalysisException(
+ "Disable to create table with `DECIMAL` type columns,"
+ "please use `DECIMALV3`.");
}
}
boolean enableUniqueKeyMergeOnWrite = false;
// analyze key desc
- if (engineName.equalsIgnoreCase("olap")) {
+ if (engineName.equalsIgnoreCase(DEFAULT_ENGINE_NAME)) {
// olap table
if (keysDesc == null) {
List<String> keysColumnNames = Lists.newArrayList();
@@ -361,9 +328,9 @@ public class CreateTableStmt extends DdlStmt {
}
if (hasAggregate) {
for (ColumnDef columnDef : columnDefs) {
- if (columnDef.getAggregateType() == null
- &&
!columnDef.getType().isScalarType(PrimitiveType.STRING)
- &&
!columnDef.getType().isScalarType(PrimitiveType.JSONB)) {
+ if (columnDef.getAggregateType() == null &&
!columnDef.getType()
+ .isScalarType(PrimitiveType.STRING) &&
!columnDef.getType()
+ .isScalarType(PrimitiveType.JSONB)) {
keysColumnNames.add(columnDef.getName());
}
}
@@ -374,8 +341,8 @@ public class CreateTableStmt extends DdlStmt {
keyLength += columnDef.getType().getIndexSize();
if (keysColumnNames.size() >=
FeConstants.shortkey_max_column_count
|| keyLength >
FeConstants.shortkey_maxsize_bytes) {
- if (keysColumnNames.size() == 0
- &&
columnDef.getType().getPrimitiveType().isCharFamily()) {
+ if (keysColumnNames.isEmpty() &&
columnDef.getType().getPrimitiveType()
+ .isCharFamily()) {
keysColumnNames.add(columnDef.getName());
}
break;
@@ -411,7 +378,7 @@ public class CreateTableStmt extends DdlStmt {
} else {
if (enableDuplicateWithoutKeysByDefault) {
throw new AnalysisException("table property
'enable_duplicate_without_keys_by_default' only can"
- + " set 'true' when create olap table by
default.");
+ + " set 'true' when create olap table by
default.");
}
}
@@ -463,13 +430,11 @@ public class CreateTableStmt extends DdlStmt {
}
// analyze column def
- if (!(engineName.equals("elasticsearch"))
- && (columnDefs == null || columnDefs.isEmpty())) {
+ if (!(engineName.equalsIgnoreCase("elasticsearch")) && (columnDefs ==
null || columnDefs.isEmpty())) {
ErrorReport.reportAnalysisException(ErrorCode.ERR_TABLE_MUST_HAVE_COLUMNS);
}
// add a hidden column as delete flag for unique table
- if (Config.enable_batch_delete_by_default
- && keysDesc != null
+ if (Config.enable_batch_delete_by_default && keysDesc != null
&& keysDesc.getKeysType() == KeysType.UNIQUE_KEYS) {
if (enableUniqueKeyMergeOnWrite) {
columnDefs.add(ColumnDef.newDeleteSignColumnDef(AggregateType.NONE));
@@ -502,14 +467,14 @@ public class CreateTableStmt extends DdlStmt {
}
Set<String> columnSet = Sets.newTreeSet(String.CASE_INSENSITIVE_ORDER);
for (ColumnDef columnDef : columnDefs) {
- columnDef.analyze(engineName.equals("olap"));
+
columnDef.analyze(engineName.equalsIgnoreCase(DEFAULT_ENGINE_NAME));
- if (columnDef.getType().isComplexType() &&
engineName.equals("olap")) {
- if (columnDef.getAggregateType() != null
- && columnDef.getAggregateType() != AggregateType.NONE
+ if (columnDef.getType().isComplexType() &&
engineName.equalsIgnoreCase(DEFAULT_ENGINE_NAME)) {
+ if (columnDef.getAggregateType() != null &&
columnDef.getAggregateType() != AggregateType.NONE
&& columnDef.getAggregateType() !=
AggregateType.REPLACE) {
- throw new
AnalysisException(columnDef.getType().getPrimitiveType()
- + " column can't support aggregation " +
columnDef.getAggregateType());
+ throw new AnalysisException(
+ columnDef.getType().getPrimitiveType() + " column
can't support aggregation "
+ + columnDef.getAggregateType());
}
if (columnDef.isKey()) {
throw new
AnalysisException(columnDef.getType().getPrimitiveType()
@@ -526,17 +491,17 @@ public class CreateTableStmt extends DdlStmt {
}
}
- if (engineName.equals("olap")) {
+ if (engineName.equalsIgnoreCase(DEFAULT_ENGINE_NAME)) {
// before analyzing partition, handle the replication allocation
info
- properties = PropertyAnalyzer.rewriteReplicaAllocationProperties(
- tableName.getCtl(), tableName.getDb(), properties);
+ properties =
PropertyAnalyzer.rewriteReplicaAllocationProperties(tableName.getCtl(),
tableName.getDb(),
+ properties);
// analyze partition
if (partitionDesc != null) {
if (partitionDesc instanceof ListPartitionDesc ||
partitionDesc instanceof RangePartitionDesc) {
partitionDesc.analyze(columnDefs, properties);
} else {
- throw new AnalysisException("Currently only support range"
- + " and list partition with engine type olap");
+ throw new AnalysisException(
+ "Currently only support range" + " and list
partition with engine type olap");
}
}
@@ -553,10 +518,10 @@ public class CreateTableStmt extends DdlStmt {
for (ColumnDef columnDef : columnDefs) {
if (columnDef.getAggregateType() ==
AggregateType.REPLACE
|| columnDef.getAggregateType() ==
AggregateType.REPLACE_IF_NOT_NULL) {
- throw new AnalysisException("Create aggregate keys
table with value columns of which"
- + " aggregate type is " +
columnDef.getAggregateType()
- + " should not contain random"
- + " distribution desc");
+ throw new AnalysisException(
+ "Create aggregate keys table with value
columns of which" + " aggregate type is "
+ + columnDef.getAggregateType() + "
should not contain random"
+ + " distribution desc");
}
}
}
@@ -565,8 +530,8 @@ public class CreateTableStmt extends DdlStmt {
EsUtil.analyzePartitionAndDistributionDesc(partitionDesc,
distributionDesc);
} else {
if (partitionDesc != null || distributionDesc != null) {
- throw new AnalysisException("Create " + engineName
- + " table should not contain partition or distribution
desc");
+ throw new AnalysisException(
+ "Create " + engineName + " table should not contain
partition or distribution desc");
}
}
@@ -586,7 +551,7 @@ public class CreateTableStmt extends DdlStmt {
for (IndexDef indexDef : indexDefs) {
indexDef.analyze();
- if (!engineName.equalsIgnoreCase("olap")) {
+ if (!engineName.equalsIgnoreCase(DEFAULT_ENGINE_NAME)) {
throw new AnalysisException("index only support in olap
engine at current version.");
}
for (String indexColName : indexDef.getColumns()) {
@@ -599,13 +564,11 @@ public class CreateTableStmt extends DdlStmt {
}
}
if (!found) {
- throw new AnalysisException("Column does not exist in
table. invalid column: "
- + indexColName);
+ throw new AnalysisException("Column does not exist in
table. invalid column: " + indexColName);
}
}
- indexes.add(new Index(Env.getCurrentEnv().getNextId(),
indexDef.getIndexName(),
- indexDef.getColumns(), indexDef.getIndexType(),
- indexDef.getProperties(), indexDef.getComment()));
+ indexes.add(new Index(Env.getCurrentEnv().getNextId(),
indexDef.getIndexName(), indexDef.getColumns(),
+ indexDef.getIndexType(), indexDef.getProperties(),
indexDef.getComment()));
distinct.add(indexDef.getIndexName());
distinctCol.add(Pair.of(indexDef.getIndexType(),
indexDef.getColumns().stream().map(String::toUpperCase).collect(Collectors.toList())));
@@ -687,12 +650,16 @@ public class CreateTableStmt extends DdlStmt {
}
}
sb.append("\n)");
- sb.append(" ENGINE = ").append(engineName);
+ sb.append(" ENGINE = ").append(engineName.toLowerCase());
if (keysDesc != null) {
sb.append("\n").append(keysDesc.toSql());
}
+ if (!Strings.isNullOrEmpty(comment)) {
+ sb.append("\nCOMMENT \"").append(comment).append("\"");
+ }
+
if (partitionDesc != null) {
sb.append("\n").append(partitionDesc.toSql());
}
@@ -701,7 +668,7 @@ public class CreateTableStmt extends DdlStmt {
sb.append("\n").append(distributionDesc.toSql());
}
- if (rollupAlterClauseList != null && rollupAlterClauseList.size() !=
0) {
+ if (rollupAlterClauseList != null && !rollupAlterClauseList.isEmpty())
{
sb.append("\n rollup(");
StringBuilder opsSb = new StringBuilder();
for (int i = 0; i < rollupAlterClauseList.size(); i++) {
@@ -719,20 +686,16 @@ public class CreateTableStmt extends DdlStmt {
// which is implemented in Catalog.getDdlStmt()
if (properties != null && !properties.isEmpty()) {
sb.append("\nPROPERTIES (");
- sb.append(new PrintableMap<String, String>(properties, " = ",
true, true, true));
+ sb.append(new PrintableMap<>(properties, " = ", true, true, true));
sb.append(")");
}
if (extProperties != null && !extProperties.isEmpty()) {
sb.append("\n").append(engineName.toUpperCase()).append("
PROPERTIES (");
- sb.append(new PrintableMap<String, String>(extProperties, " = ",
true, true, true));
+ sb.append(new PrintableMap<>(extProperties, " = ", true, true,
true));
sb.append(")");
}
- if (!Strings.isNullOrEmpty(comment)) {
- sb.append("\nCOMMENT \"").append(comment).append("\"");
- }
-
return sb.toString();
}
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/analysis/CreateTableStmtTest.java
b/fe/fe-core/src/test/java/org/apache/doris/analysis/CreateTableStmtTest.java
index 30da4033976..ccd865dd6d4 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/analysis/CreateTableStmtTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/analysis/CreateTableStmtTest.java
@@ -456,4 +456,66 @@ public class CreateTableStmtTest {
Assert.assertEquals(createTableStmt.toSql(), createTableSql);
}
+
+ @Test
+ public void testToSqlWithComment() {
+ List<ColumnDef> columnDefs = new ArrayList<>();
+ columnDefs.add(new ColumnDef("a",
TypeDef.create(PrimitiveType.BIGINT), false));
+ columnDefs.add(new ColumnDef("b", TypeDef.create(PrimitiveType.INT),
false));
+ String engineName = "olap";
+ ArrayList<String> aggKeys = Lists.newArrayList("a");
+ KeysDesc keysDesc = new KeysDesc(KeysType.AGG_KEYS, aggKeys);
+ Map<String, String> properties = new HashMap<String, String>() {
+ {
+ put("replication_num", String.valueOf(Math.max(1,
+ Config.min_replication_num_per_tablet)));
+ }
+ };
+ TableName tableName = new TableName("internal", "demo",
"testToSqlWithComment1");
+ CreateTableStmt createTableStmt = new CreateTableStmt(true, false,
+ tableName, columnDefs, engineName, keysDesc, null, null,
+ properties, null, "xxx", null);
+ String createTableSql = "CREATE TABLE IF NOT EXISTS
`demo`.`testToSqlWithComment1` (\n"
+ + " `a` BIGINT NOT NULL COMMENT \"\",\n"
+ + " `b` INT NOT NULL COMMENT \"\"\n"
+ + ") ENGINE = olap\n"
+ + "AGGREGATE KEY(`a`)\n"
+ + "COMMENT \"xxx\"\n"
+ + "PROPERTIES (\"replication_num\" = \"1\")";
+ Assert.assertEquals(createTableStmt.toSql(), createTableSql);
+
+
+ columnDefs.add(new ColumnDef("c",
TypeDef.create(PrimitiveType.STRING), true));
+ columnDefs.add(new ColumnDef("d",
TypeDef.create(PrimitiveType.DOUBLE), true));
+ columnDefs.add(new ColumnDef("e",
TypeDef.create(PrimitiveType.DECIMAL128), false));
+ columnDefs.add(new ColumnDef("f", TypeDef.create(PrimitiveType.DATE),
false));
+ columnDefs.add(new ColumnDef("g",
TypeDef.create(PrimitiveType.SMALLINT), false));
+ columnDefs.add(new ColumnDef("h",
TypeDef.create(PrimitiveType.BOOLEAN), false));
+ aggKeys = Lists.newArrayList("a", "d", "f");
+ keysDesc = new KeysDesc(KeysType.DUP_KEYS, aggKeys);
+ properties = new HashMap<String, String>() {
+ {
+ put("replication_num", String.valueOf(Math.max(10,
+ Config.min_replication_num_per_tablet)));
+ }
+ };
+ tableName = new TableName("internal", "demo", "testToSqlWithComment2");
+ createTableStmt = new CreateTableStmt(false, false,
+ tableName, columnDefs, engineName, keysDesc, null, null,
+ properties, null, "xxx", null);
+ createTableSql = "CREATE TABLE `demo`.`testToSqlWithComment2` (\n"
+ + " `a` BIGINT NOT NULL COMMENT \"\",\n"
+ + " `b` INT NOT NULL COMMENT \"\",\n"
+ + " `c` TEXT NULL COMMENT \"\",\n"
+ + " `d` DOUBLE NULL COMMENT \"\",\n"
+ + " `e` DECIMALV3(38, 0) NOT NULL COMMENT \"\",\n"
+ + " `f` DATE NOT NULL COMMENT \"\",\n"
+ + " `g` SMALLINT NOT NULL COMMENT \"\",\n"
+ + " `h` BOOLEAN NOT NULL COMMENT \"\"\n"
+ + ") ENGINE = olap\n"
+ + "DUPLICATE KEY(`a`, `d`, `f`)\n"
+ + "COMMENT \"xxx\"\n"
+ + "PROPERTIES (\"replication_num\" = \"10\")";
+ Assert.assertEquals(createTableStmt.toSql(), createTableSql);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]