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

diwu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris-flink-connector.git


The following commit(s) were added to refs/heads/master by this push:
     new 784a6a17 [improve]Improve the way of dorisSystem create table (#452)
784a6a17 is described below

commit 784a6a171b234b4a9f64e0d2b310995d172b1bf6
Author: wudongliang <46414265+donglian...@users.noreply.github.com>
AuthorDate: Tue Aug 6 19:17:52 2024 +0800

    [improve]Improve the way of dorisSystem create table (#452)
---
 .../flink/catalog/doris/DorisSchemaFactory.java    | 132 +++++++++++++++++++++
 .../doris/flink/catalog/doris/DorisSystem.java     | 125 ++-----------------
 .../doris/flink/sink/copy/CopySQLBuilder.java      |   4 +-
 .../flink/sink/schema/SchemaChangeHelper.java      |  30 ++---
 .../catalog/doris/DorisSchemaFactoryTest.java      | 111 ++++++++++++-----
 5 files changed, 237 insertions(+), 165 deletions(-)

diff --git 
a/flink-doris-connector/src/main/java/org/apache/doris/flink/catalog/doris/DorisSchemaFactory.java
 
b/flink-doris-connector/src/main/java/org/apache/doris/flink/catalog/doris/DorisSchemaFactory.java
index 3f824a1f..9693d433 100644
--- 
a/flink-doris-connector/src/main/java/org/apache/doris/flink/catalog/doris/DorisSchemaFactory.java
+++ 
b/flink-doris-connector/src/main/java/org/apache/doris/flink/catalog/doris/DorisSchemaFactory.java
@@ -18,9 +18,12 @@
 package org.apache.doris.flink.catalog.doris;
 
 import org.apache.flink.annotation.VisibleForTesting;
+import org.apache.flink.util.Preconditions;
+import org.apache.flink.util.StringUtils;
 
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.MapUtils;
+import org.apache.doris.flink.exception.CreateTableException;
 import org.apache.doris.flink.tools.cdc.DorisTableConfig;
 
 import java.util.ArrayList;
@@ -30,6 +33,7 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Objects;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
 /**
  * Factory that creates doris schema.
@@ -103,4 +107,132 @@ public class DorisSchemaFactory {
         }
         return null;
     }
+
+    public static String generateCreateTableDDL(TableSchema schema) {
+        StringBuilder sb = new StringBuilder("CREATE TABLE IF NOT EXISTS ");
+        sb.append(identifier(schema.getDatabase()))
+                .append(".")
+                .append(identifier(schema.getTable()))
+                .append("(");
+
+        Map<String, FieldSchema> fields = schema.getFields();
+        List<String> keys = schema.getKeys();
+        // append keys
+        for (String key : keys) {
+            if (!fields.containsKey(key)) {
+                throw new CreateTableException("key " + key + " not found in 
column list");
+            }
+            FieldSchema field = fields.get(key);
+            buildColumn(sb, field, true);
+        }
+
+        // append values
+        for (Map.Entry<String, FieldSchema> entry : fields.entrySet()) {
+            if (keys.contains(entry.getKey())) {
+                continue;
+            }
+            FieldSchema field = entry.getValue();
+            buildColumn(sb, field, false);
+        }
+        sb = sb.deleteCharAt(sb.length() - 1);
+        sb.append(" ) ");
+        // append uniq model
+        if (DataModel.UNIQUE.equals(schema.getModel())) {
+            sb.append(schema.getModel().name())
+                    .append(" KEY(")
+                    .append(String.join(",", identifier(schema.getKeys())))
+                    .append(")");
+        }
+
+        // append table comment
+        if (!StringUtils.isNullOrWhitespaceOnly(schema.getTableComment())) {
+            sb.append(" COMMENT 
'").append(quoteComment(schema.getTableComment())).append("' ");
+        }
+
+        // append distribute key
+        sb.append(" DISTRIBUTED BY HASH(")
+                .append(String.join(",", 
identifier(schema.getDistributeKeys())))
+                .append(")");
+
+        Map<String, String> properties = schema.getProperties();
+        if (schema.getTableBuckets() != null) {
+
+            int bucketsNum = schema.getTableBuckets();
+            if (bucketsNum <= 0) {
+                throw new CreateTableException("The number of buckets must be 
positive.");
+            }
+            sb.append(" BUCKETS ").append(bucketsNum);
+        } else {
+            sb.append(" BUCKETS AUTO ");
+        }
+        // append properties
+        int index = 0;
+        for (Map.Entry<String, String> entry : properties.entrySet()) {
+            if (index == 0) {
+                sb.append(" PROPERTIES (");
+            }
+            if (index > 0) {
+                sb.append(",");
+            }
+            sb.append(quoteProperties(entry.getKey()))
+                    .append("=")
+                    .append(quoteProperties(entry.getValue()));
+            index++;
+
+            if (index == (schema.getProperties().size())) {
+                sb.append(")");
+            }
+        }
+        return sb.toString();
+    }
+
+    private static void buildColumn(StringBuilder sql, FieldSchema field, 
boolean isKey) {
+        String fieldType = field.getTypeString();
+        if (isKey && DorisType.STRING.equals(fieldType)) {
+            fieldType = String.format("%s(%s)", DorisType.VARCHAR, 65533);
+        }
+        sql.append(identifier(field.getName())).append(" ").append(fieldType);
+
+        if (field.getDefaultValue() != null) {
+            sql.append(" DEFAULT " + 
quoteDefaultValue(field.getDefaultValue()));
+        }
+        sql.append(" COMMENT 
'").append(quoteComment(field.getComment())).append("',");
+    }
+
+    private static String quoteProperties(String name) {
+        return "'" + name + "'";
+    }
+
+    private static List<String> identifier(List<String> names) {
+        return 
names.stream().map(DorisSchemaFactory::identifier).collect(Collectors.toList());
+    }
+
+    public static String identifier(String name) {
+        if (name.startsWith("`") && name.endsWith("`")) {
+            return name;
+        }
+        return "`" + name + "`";
+    }
+
+    public static String quoteDefaultValue(String defaultValue) {
+        // DEFAULT current_timestamp not need quote
+        if (defaultValue.equalsIgnoreCase("current_timestamp")) {
+            return defaultValue;
+        }
+        return "'" + defaultValue + "'";
+    }
+
+    public static String quoteComment(String comment) {
+        if (comment == null) {
+            return "";
+        } else {
+            return comment.replaceAll("'", "\\\\'");
+        }
+    }
+
+    public static String quoteTableIdentifier(String tableIdentifier) {
+        String[] dbTable = tableIdentifier.split("\\.");
+        Preconditions.checkArgument(dbTable.length == 2);
+        return identifier(dbTable[0]) + "." + identifier(dbTable[1]);
+    }
 }
diff --git 
a/flink-doris-connector/src/main/java/org/apache/doris/flink/catalog/doris/DorisSystem.java
 
b/flink-doris-connector/src/main/java/org/apache/doris/flink/catalog/doris/DorisSystem.java
index be6572d3..427eb8b3 100644
--- 
a/flink-doris-connector/src/main/java/org/apache/doris/flink/catalog/doris/DorisSystem.java
+++ 
b/flink-doris-connector/src/main/java/org/apache/doris/flink/catalog/doris/DorisSystem.java
@@ -18,14 +18,12 @@
 package org.apache.doris.flink.catalog.doris;
 
 import org.apache.flink.annotation.Public;
-import org.apache.flink.util.Preconditions;
 import org.apache.flink.util.StringUtils;
 
 import org.apache.commons.compress.utils.Lists;
 import org.apache.doris.flink.cfg.DorisConnectionOptions;
 import org.apache.doris.flink.connection.JdbcConnectionProvider;
 import org.apache.doris.flink.connection.SimpleJdbcConnectionProvider;
-import org.apache.doris.flink.exception.CreateTableException;
 import org.apache.doris.flink.exception.DorisRuntimeException;
 import org.apache.doris.flink.exception.DorisSystemException;
 import org.slf4j.Logger;
@@ -41,7 +39,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.function.Predicate;
-import java.util.stream.Collectors;
 
 import static org.apache.flink.util.Preconditions.checkArgument;
 
@@ -141,81 +138,7 @@ public class DorisSystem implements Serializable {
     }
 
     public static String buildCreateTableDDL(TableSchema schema) {
-        StringBuilder sb = new StringBuilder("CREATE TABLE IF NOT EXISTS ");
-        sb.append(identifier(schema.getDatabase()))
-                .append(".")
-                .append(identifier(schema.getTable()))
-                .append("(");
-
-        Map<String, FieldSchema> fields = schema.getFields();
-        List<String> keys = schema.getKeys();
-        // append keys
-        for (String key : keys) {
-            if (!fields.containsKey(key)) {
-                throw new CreateTableException("key " + key + " not found in 
column list");
-            }
-            FieldSchema field = fields.get(key);
-            buildColumn(sb, field, true);
-        }
-
-        // append values
-        for (Map.Entry<String, FieldSchema> entry : fields.entrySet()) {
-            if (keys.contains(entry.getKey())) {
-                continue;
-            }
-            FieldSchema field = entry.getValue();
-            buildColumn(sb, field, false);
-        }
-        sb = sb.deleteCharAt(sb.length() - 1);
-        sb.append(" ) ");
-        // append uniq model
-        if (DataModel.UNIQUE.equals(schema.getModel())) {
-            sb.append(schema.getModel().name())
-                    .append(" KEY(")
-                    .append(String.join(",", identifier(schema.getKeys())))
-                    .append(")");
-        }
-
-        // append table comment
-        if (!StringUtils.isNullOrWhitespaceOnly(schema.getTableComment())) {
-            sb.append(" COMMENT 
'").append(quoteComment(schema.getTableComment())).append("' ");
-        }
-
-        // append distribute key
-        sb.append(" DISTRIBUTED BY HASH(")
-                .append(String.join(",", 
identifier(schema.getDistributeKeys())))
-                .append(")");
-
-        Map<String, String> properties = schema.getProperties();
-        if (schema.getTableBuckets() != null) {
-
-            int bucketsNum = schema.getTableBuckets();
-            if (bucketsNum <= 0) {
-                throw new CreateTableException("The number of buckets must be 
positive.");
-            }
-            sb.append(" BUCKETS ").append(bucketsNum);
-        } else {
-            sb.append(" BUCKETS AUTO ");
-        }
-        // append properties
-        int index = 0;
-        for (Map.Entry<String, String> entry : properties.entrySet()) {
-            if (index == 0) {
-                sb.append(" PROPERTIES (");
-            }
-            if (index > 0) {
-                sb.append(",");
-            }
-            sb.append(quoteProperties(entry.getKey()))
-                    .append("=")
-                    .append(quoteProperties(entry.getValue()));
-            index++;
-
-            if (index == (schema.getProperties().size())) {
-                sb.append(")");
-            }
-        }
-        return sb.toString();
+        return DorisSchemaFactory.generateCreateTableDDL(schema);
     }
 
     public Map<String, String> getTableFieldNames(String databaseName, String 
tableName) {
@@ -244,53 +167,23 @@ public class DorisSystem implements Serializable {
         }
     }
 
-    private static void buildColumn(StringBuilder sql, FieldSchema field, 
boolean isKey) {
-        String fieldType = field.getTypeString();
-        if (isKey && DorisType.STRING.equals(fieldType)) {
-            fieldType = String.format("%s(%s)", DorisType.VARCHAR, 65533);
-        }
-        sql.append(identifier(field.getName())).append(" ").append(fieldType);
-
-        if (field.getDefaultValue() != null) {
-            sql.append(" DEFAULT " + 
quoteDefaultValue(field.getDefaultValue()));
-        }
-        sql.append(" COMMENT 
'").append(quoteComment(field.getComment())).append("',");
-    }
-
+    @Deprecated
     public static String quoteDefaultValue(String defaultValue) {
-        // DEFAULT current_timestamp not need quote
-        if (defaultValue.equalsIgnoreCase("current_timestamp")) {
-            return defaultValue;
-        }
-        return "'" + defaultValue + "'";
+        return DorisSchemaFactory.quoteDefaultValue(defaultValue);
     }
 
+    @Deprecated
     public static String quoteComment(String comment) {
-        if (comment == null) {
-            return "";
-        } else {
-            return comment.replaceAll("'", "\\\\'");
-        }
-    }
-
-    private static List<String> identifier(List<String> name) {
-        return 
name.stream().map(DorisSystem::identifier).collect(Collectors.toList());
+        return DorisSchemaFactory.quoteComment(comment);
     }
 
+    @Deprecated
     public static String identifier(String name) {
-        if (name.startsWith("`") && name.endsWith("`")) {
-            return name;
-        }
-        return "`" + name + "`";
+        return DorisSchemaFactory.identifier(name);
     }
 
+    @Deprecated
     public static String quoteTableIdentifier(String tableIdentifier) {
-        String[] dbTable = tableIdentifier.split("\\.");
-        Preconditions.checkArgument(dbTable.length == 2);
-        return identifier(dbTable[0]) + "." + identifier(dbTable[1]);
-    }
-
-    private static String quoteProperties(String name) {
-        return "'" + name + "'";
+        return DorisSchemaFactory.quoteTableIdentifier(tableIdentifier);
     }
 }
diff --git 
a/flink-doris-connector/src/main/java/org/apache/doris/flink/sink/copy/CopySQLBuilder.java
 
b/flink-doris-connector/src/main/java/org/apache/doris/flink/sink/copy/CopySQLBuilder.java
index 33843a06..8edfba3f 100644
--- 
a/flink-doris-connector/src/main/java/org/apache/doris/flink/sink/copy/CopySQLBuilder.java
+++ 
b/flink-doris-connector/src/main/java/org/apache/doris/flink/sink/copy/CopySQLBuilder.java
@@ -17,7 +17,7 @@
 
 package org.apache.doris.flink.sink.copy;
 
-import org.apache.doris.flink.catalog.doris.DorisSystem;
+import org.apache.doris.flink.catalog.doris.DorisSchemaFactory;
 import org.apache.doris.flink.cfg.DorisExecutionOptions;
 
 import java.util.Arrays;
@@ -53,7 +53,7 @@ public class CopySQLBuilder {
     public String buildCopySQL() {
         StringBuilder sb = new StringBuilder();
         sb.append("COPY INTO ")
-                .append(DorisSystem.quoteTableIdentifier(tableIdentifier))
+                
.append(DorisSchemaFactory.quoteTableIdentifier(tableIdentifier))
                 .append(" FROM @~('{")
                 .append(String.join(",", fileList))
                 .append("}') ")
diff --git 
a/flink-doris-connector/src/main/java/org/apache/doris/flink/sink/schema/SchemaChangeHelper.java
 
b/flink-doris-connector/src/main/java/org/apache/doris/flink/sink/schema/SchemaChangeHelper.java
index 06546877..74b57417 100644
--- 
a/flink-doris-connector/src/main/java/org/apache/doris/flink/sink/schema/SchemaChangeHelper.java
+++ 
b/flink-doris-connector/src/main/java/org/apache/doris/flink/sink/schema/SchemaChangeHelper.java
@@ -20,7 +20,7 @@ package org.apache.doris.flink.sink.schema;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.compress.utils.Lists;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.doris.flink.catalog.doris.DorisSystem;
+import org.apache.doris.flink.catalog.doris.DorisSchemaFactory;
 import org.apache.doris.flink.catalog.doris.FieldSchema;
 
 import java.util.List;
@@ -114,11 +114,11 @@ public class SchemaChangeHelper {
                 new StringBuilder(
                         String.format(
                                 ADD_DDL,
-                                
DorisSystem.quoteTableIdentifier(tableIdentifier),
-                                DorisSystem.identifier(name),
+                                
DorisSchemaFactory.quoteTableIdentifier(tableIdentifier),
+                                DorisSchemaFactory.identifier(name),
                                 type));
         if (defaultValue != null) {
-            addDDL.append(" DEFAULT 
").append(DorisSystem.quoteDefaultValue(defaultValue));
+            addDDL.append(" DEFAULT 
").append(DorisSchemaFactory.quoteDefaultValue(defaultValue));
         }
         commentColumn(addDDL, comment);
         return addDDL.toString();
@@ -127,17 +127,17 @@ public class SchemaChangeHelper {
     public static String buildDropColumnDDL(String tableIdentifier, String 
columName) {
         return String.format(
                 DROP_DDL,
-                DorisSystem.quoteTableIdentifier(tableIdentifier),
-                DorisSystem.identifier(columName));
+                DorisSchemaFactory.quoteTableIdentifier(tableIdentifier),
+                DorisSchemaFactory.identifier(columName));
     }
 
     public static String buildRenameColumnDDL(
             String tableIdentifier, String oldColumnName, String 
newColumnName) {
         return String.format(
                 RENAME_DDL,
-                DorisSystem.quoteTableIdentifier(tableIdentifier),
-                DorisSystem.identifier(oldColumnName),
-                DorisSystem.identifier(newColumnName));
+                DorisSchemaFactory.quoteTableIdentifier(tableIdentifier),
+                DorisSchemaFactory.identifier(oldColumnName),
+                DorisSchemaFactory.identifier(newColumnName));
     }
 
     public static String buildColumnExistsQuery(String database, String table, 
String column) {
@@ -156,9 +156,9 @@ public class SchemaChangeHelper {
             String tableIdentifier, String columnName, String newComment) {
         return String.format(
                 MODIFY_COMMENT_DDL,
-                DorisSystem.quoteTableIdentifier(tableIdentifier),
-                DorisSystem.identifier(columnName),
-                DorisSystem.quoteComment(newComment));
+                DorisSchemaFactory.quoteTableIdentifier(tableIdentifier),
+                DorisSchemaFactory.identifier(columnName),
+                DorisSchemaFactory.quoteComment(newComment));
     }
 
     public static String buildModifyColumnDataTypeDDL(
@@ -170,8 +170,8 @@ public class SchemaChangeHelper {
                 new StringBuilder(
                         String.format(
                                 MODIFY_TYPE_DDL,
-                                
DorisSystem.quoteTableIdentifier(tableIdentifier),
-                                DorisSystem.identifier(columnName),
+                                
DorisSchemaFactory.quoteTableIdentifier(tableIdentifier),
+                                DorisSchemaFactory.identifier(columnName),
                                 dataType));
         commentColumn(modifyDDL, comment);
         return modifyDDL.toString();
@@ -179,7 +179,7 @@ public class SchemaChangeHelper {
 
     private static void commentColumn(StringBuilder ddl, String comment) {
         if (StringUtils.isNotEmpty(comment)) {
-            ddl.append(" COMMENT 
'").append(DorisSystem.quoteComment(comment)).append("'");
+            ddl.append(" COMMENT 
'").append(DorisSchemaFactory.quoteComment(comment)).append("'");
         }
     }
 
diff --git 
a/flink-doris-connector/src/test/java/org/apache/doris/flink/catalog/doris/DorisSchemaFactoryTest.java
 
b/flink-doris-connector/src/test/java/org/apache/doris/flink/catalog/doris/DorisSchemaFactoryTest.java
index 1bc1f115..a0f3aaf0 100644
--- 
a/flink-doris-connector/src/test/java/org/apache/doris/flink/catalog/doris/DorisSchemaFactoryTest.java
+++ 
b/flink-doris-connector/src/test/java/org/apache/doris/flink/catalog/doris/DorisSchemaFactoryTest.java
@@ -46,6 +46,13 @@ public class DorisSchemaFactoryTest {
 
     @Test
     public void testCreateTableSchema() {
+        TableSchema tableSchema = buildCreateTableSchema();
+        Assert.assertEquals(
+                "TableSchema{database='doris', table='create_tab', 
tableComment='auto_tab_comment', fields={name=FieldSchema{name='name', 
typeString='VARVHAR(100)', defaultValue='null', comment='Name_test'}, 
id=FieldSchema{name='id', typeString='INT', defaultValue='100', 
comment='int_test'}, age=FieldSchema{name='age', typeString='INT', 
defaultValue='null', comment='null'}, email=FieldSchema{name='email', 
typeString='VARCHAR(100)', defaultValue='em...@doris.com', comment='e'}}, 
keys=emai [...]
+                tableSchema.toString());
+    }
+
+    private TableSchema buildCreateTableSchema() {
         String dorisTable = "doris.create_tab";
         String[] dbTable = dorisTable.split("\\.");
         Preconditions.checkArgument(dbTable.length == 2);
@@ -58,21 +65,24 @@ public class DorisSchemaFactoryTest {
         List<String> pkKeys = Collections.singletonList("email");
         Map<String, String> tableProperties = new HashMap<>();
         String tableComment = "auto_tab_comment";
-        TableSchema tableSchema =
-                DorisSchemaFactory.createTableSchema(
-                        dbTable[0],
-                        dbTable[1],
-                        columnFields,
-                        pkKeys,
-                        new DorisTableConfig(tableProperties),
-                        tableComment);
-        Assert.assertEquals(
-                "TableSchema{database='doris', table='create_tab', 
tableComment='auto_tab_comment', fields={name=FieldSchema{name='name', 
typeString='VARVHAR(100)', defaultValue='null', comment='Name_test'}, 
id=FieldSchema{name='id', typeString='INT', defaultValue='100', 
comment='int_test'}, age=FieldSchema{name='age', typeString='INT', 
defaultValue='null', comment='null'}, email=FieldSchema{name='email', 
typeString='VARCHAR(100)', defaultValue='em...@doris.com', comment='e'}}, 
keys=emai [...]
-                tableSchema.toString());
+        return DorisSchemaFactory.createTableSchema(
+                dbTable[0],
+                dbTable[1],
+                columnFields,
+                pkKeys,
+                new DorisTableConfig(tableProperties),
+                tableComment);
     }
 
     @Test
     public void testCreateTableSchemaTableBuckets() {
+        TableSchema tableSchema = buildCreateTableSchemaTableBuckets();
+        Assert.assertEquals(
+                "TableSchema{database='doris', table='create_tab', 
tableComment='auto_tab_comment', fields={name=FieldSchema{name='name', 
typeString='VARVHAR(100)', defaultValue='null', comment='Name_test'}, 
id=FieldSchema{name='id', typeString='INT', defaultValue='100', 
comment='int_test'}, age=FieldSchema{name='age', typeString='INT', 
defaultValue='null', comment='null'}, email=FieldSchema{name='email', 
typeString='VARCHAR(100)', defaultValue='em...@doris.com', comment='e'}}, 
keys=emai [...]
+                tableSchema.toString());
+    }
+
+    private TableSchema buildCreateTableSchemaTableBuckets() {
         String dorisTable = "doris.create_tab";
         String[] dbTable = dorisTable.split("\\.");
         Preconditions.checkArgument(dbTable.length == 2);
@@ -87,21 +97,24 @@ public class DorisSchemaFactoryTest {
         tableProperties.put("table-buckets", "create_tab:40, create_taba:10, 
tabs:12");
         tableProperties.put("replication_num", "2");
         String tableComment = "auto_tab_comment";
-        TableSchema tableSchema =
-                DorisSchemaFactory.createTableSchema(
-                        dbTable[0],
-                        dbTable[1],
-                        columnFields,
-                        pkKeys,
-                        new DorisTableConfig(tableProperties),
-                        tableComment);
-        Assert.assertEquals(
-                "TableSchema{database='doris', table='create_tab', 
tableComment='auto_tab_comment', fields={name=FieldSchema{name='name', 
typeString='VARVHAR(100)', defaultValue='null', comment='Name_test'}, 
id=FieldSchema{name='id', typeString='INT', defaultValue='100', 
comment='int_test'}, age=FieldSchema{name='age', typeString='INT', 
defaultValue='null', comment='null'}, email=FieldSchema{name='email', 
typeString='VARCHAR(100)', defaultValue='em...@doris.com', comment='e'}}, 
keys=emai [...]
-                tableSchema.toString());
+        return DorisSchemaFactory.createTableSchema(
+                dbTable[0],
+                dbTable[1],
+                columnFields,
+                pkKeys,
+                new DorisTableConfig(tableProperties),
+                tableComment);
     }
 
     @Test
     public void testCreateDuplicateTableSchema() {
+        TableSchema tableSchema = buildCreateDuplicateTableSchema();
+        Assert.assertEquals(
+                "TableSchema{database='doris', table='dup_tab', 
tableComment='auto_tab_comment', fields={name=FieldSchema{name='name', 
typeString='VARVHAR(100)', defaultValue='null', comment='Name_test'}, 
id=FieldSchema{name='id', typeString='INT', defaultValue='100', 
comment='int_test'}, age=FieldSchema{name='age', typeString='INT', 
defaultValue='null', comment='null'}, email=FieldSchema{name='email', 
typeString='VARCHAR(100)', defaultValue='em...@doris.com', comment='e'}}, 
keys=name, m [...]
+                tableSchema.toString());
+    }
+
+    private TableSchema buildCreateDuplicateTableSchema() {
         String dorisTable = "doris.dup_tab";
         String[] dbTable = dorisTable.split("\\.");
         Preconditions.checkArgument(dbTable.length == 2);
@@ -114,16 +127,50 @@ public class DorisSchemaFactoryTest {
         Map<String, String> tableProperties = new HashMap<>();
         tableProperties.put("replication_num", "1");
         String tableComment = "auto_tab_comment";
-        TableSchema tableSchema =
-                DorisSchemaFactory.createTableSchema(
-                        dbTable[0],
-                        dbTable[1],
-                        columnFields,
-                        new ArrayList<>(),
-                        new DorisTableConfig(tableProperties),
-                        tableComment);
+        return DorisSchemaFactory.createTableSchema(
+                dbTable[0],
+                dbTable[1],
+                columnFields,
+                new ArrayList<>(),
+                new DorisTableConfig(tableProperties),
+                tableComment);
+    }
+
+    @Test
+    public void testGenerateCreateTableDDL() {
+        TableSchema tableSchema = buildCreateTableSchema();
+        String ddl = DorisSchemaFactory.generateCreateTableDDL(tableSchema);
         Assert.assertEquals(
-                "TableSchema{database='doris', table='dup_tab', 
tableComment='auto_tab_comment', fields={name=FieldSchema{name='name', 
typeString='VARVHAR(100)', defaultValue='null', comment='Name_test'}, 
id=FieldSchema{name='id', typeString='INT', defaultValue='100', 
comment='int_test'}, age=FieldSchema{name='age', typeString='INT', 
defaultValue='null', comment='null'}, email=FieldSchema{name='email', 
typeString='VARCHAR(100)', defaultValue='em...@doris.com', comment='e'}}, 
keys=name, m [...]
-                tableSchema.toString());
+                "CREATE TABLE IF NOT EXISTS `doris`.`create_tab`(`email` 
VARCHAR(100) DEFAULT 'em...@doris.com' COMMENT 'e',`name` VARVHAR(100) COMMENT 
'Name_test',`id` INT DEFAULT '100' COMMENT 'int_test',`age` INT COMMENT '' ) 
UNIQUE KEY(`email`) COMMENT 'auto_tab_comment'  DISTRIBUTED BY HASH(`email`) 
BUCKETS AUTO  PROPERTIES ('light_schema_change'='true')",
+                ddl);
+    }
+
+    @Test
+    public void testGenerateCreateTableDDLBuckets() {
+        TableSchema tableSchema = buildCreateTableSchemaTableBuckets();
+        String ddl = DorisSchemaFactory.generateCreateTableDDL(tableSchema);
+        Assert.assertEquals(
+                "CREATE TABLE IF NOT EXISTS `doris`.`create_tab`(`email` 
VARCHAR(100) DEFAULT 'em...@doris.com' COMMENT 'e',`name` VARVHAR(100) COMMENT 
'Name_test',`id` INT DEFAULT '100' COMMENT 'int_test',`age` INT COMMENT '' ) 
UNIQUE KEY(`email`) COMMENT 'auto_tab_comment'  DISTRIBUTED BY HASH(`email`) 
BUCKETS 40 PROPERTIES ('replication_num'='2','light_schema_change'='true')",
+                ddl);
+    }
+
+    @Test
+    public void testGenerateCreateTableDDLDuplicate() {
+        TableSchema tableSchema = buildCreateDuplicateTableSchema();
+        String ddl = DorisSchemaFactory.generateCreateTableDDL(tableSchema);
+        Assert.assertEquals(
+                "CREATE TABLE IF NOT EXISTS `doris`.`dup_tab`(`name` 
VARVHAR(100) COMMENT 'Name_test',`id` INT DEFAULT '100' COMMENT 
'int_test',`age` INT COMMENT '',`email` VARCHAR(100) DEFAULT 'em...@doris.com' 
COMMENT 'e' )  COMMENT 'auto_tab_comment'  DISTRIBUTED BY HASH(`name`) BUCKETS 
AUTO  PROPERTIES ('replication_num'='1','light_schema_change'='true')",
+                ddl);
+    }
+
+    @Test
+    public void quoteTableIdentifier() {
+        String quoted = DorisSchemaFactory.quoteTableIdentifier("db.tbl");
+        Assert.assertEquals("`db`.`tbl`", quoted);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void quoteTableIdentifierException() {
+        DorisSchemaFactory.quoteTableIdentifier("db.tbl.sc");
     }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to