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

dataroaring 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 4b49d05e97 [refactor](fe) remove type related class to fe-common to 
reduce java-udf jar size (#15808)
4b49d05e97 is described below

commit 4b49d05e976da5085f229cba872df365a647e4c9
Author: Mingyu Chen <morning...@163.com>
AuthorDate: Tue Jan 17 00:01:15 2023 +0800

    [refactor](fe) remove type related class to fe-common to reduce java-udf 
jar size (#15808)
---
 fe/fe-common/pom.xml                               | 25 ++++++-
 .../java/org/apache/doris/catalog/ArrayType.java   |  0
 .../java/org/apache/doris/catalog/MapType.java     |  0
 .../org/apache/doris/catalog/MultiRowType.java     |  0
 .../org/apache/doris/catalog}/MysqlColType.java    |  2 +-
 .../org/apache/doris/catalog/PrimitiveType.java    |  1 -
 .../java/org/apache/doris/catalog/ScalarType.java  | 25 +------
 .../java/org/apache/doris/catalog/StructField.java |  0
 .../java/org/apache/doris/catalog/StructType.java  |  0
 .../main/java/org/apache/doris/catalog/Type.java   | 80 ++++++++++------------
 .../org/apache/doris/catalog/TypeException.java    | 28 ++++++++
 .../main/java/org/apache/doris/common/Config.java  | 27 ++++----
 .../java/org/apache/doris/common/ConfigBase.java   |  8 +--
 .../org/apache/doris/common/ConfigException.java   | 28 ++++++++
 .../java/org/apache/doris/common/LdapConfig.java   |  0
 .../main/java/org/apache/doris/common/Pair.java    |  0
 .../org/apache/doris/common/PatternMatcher.java    | 10 +--
 .../doris/common/PatternMatcherException.java      | 28 ++++++++
 .../org/apache/doris/analysis/BinaryPredicate.java |  5 +-
 .../java/org/apache/doris/analysis/CastExpr.java   |  5 +-
 .../apache/doris/analysis/CreateFunctionStmt.java  | 36 +---------
 .../org/apache/doris/analysis/ShowBackupStmt.java  |  3 +-
 .../doris/analysis/ShowCatalogRecycleBinStmt.java  |  3 +-
 .../org/apache/doris/analysis/ShowRestoreStmt.java |  3 +-
 .../doris/analysis/ShowUserPropertyStmt.java       |  5 +-
 .../org/apache/doris/analysis/UserIdentity.java    |  4 +-
 .../main/java/org/apache/doris/catalog/Column.java | 15 ++--
 .../main/java/org/apache/doris/catalog/Env.java    |  7 +-
 .../java/org/apache/doris/catalog/TypeUtils.java   | 80 ++++++++++++++++++++++
 .../apache/doris/common/PatternMatcherWrapper.java | 29 ++++++++
 .../org/apache/doris/datasource/CatalogMgr.java    |  3 +-
 .../apache/doris/httpv2/rest/SetConfigAction.java  |  7 +-
 .../main/java/org/apache/doris/load/ExportMgr.java |  6 +-
 .../src/main/java/org/apache/doris/load/Load.java  |  4 +-
 .../org/apache/doris/load/loadv2/LoadManager.java  |  7 +-
 .../java/org/apache/doris/mysql/MysqlColDef.java   |  1 +
 .../doris/mysql/privilege/CatalogPrivEntry.java    |  4 +-
 .../apache/doris/mysql/privilege/DbPrivEntry.java  |  4 +-
 .../doris/mysql/privilege/GlobalPrivEntry.java     |  4 +-
 .../apache/doris/mysql/privilege/PrivEntry.java    |  6 +-
 .../doris/mysql/privilege/ResourcePrivEntry.java   | 12 ++--
 .../doris/mysql/privilege/TablePrivEntry.java      |  7 +-
 .../java/org/apache/doris/qe/ShowExecutor.java     | 15 ++--
 .../apache/doris/service/FrontendServiceImpl.java  |  7 +-
 .../org/apache/doris/catalog/CreateTableTest.java  |  5 +-
 .../apache/doris/common/PatternMatcherTest.java    |  6 +-
 .../load/routineload/RoutineLoadManagerTest.java   |  6 +-
 .../org/apache/doris/mysql/MysqlColTypeTest.java   |  2 +
 fe/java-udf/pom.xml                                |  4 +-
 .../java/org/apache/doris/udf/JdbcExecutor.java    |  1 -
 .../main/java/org/apache/doris/udf/JniUtil.java    |  1 -
 .../org/apache/doris/udf}/JvmPauseMonitor.java     |  2 +-
 .../main/java/org/apache/doris/udf/UdfUtils.java   |  5 +-
 fe/pom.xml                                         |  7 ++
 54 files changed, 393 insertions(+), 190 deletions(-)

diff --git a/fe/fe-common/pom.xml b/fe/fe-common/pom.xml
index c7b82bf968..8f480f441f 100644
--- a/fe/fe-common/pom.xml
+++ b/fe/fe-common/pom.xml
@@ -83,14 +83,12 @@ under the License.
         <dependency>
             <groupId>org.junit.jupiter</groupId>
             <artifactId>junit-jupiter-engine</artifactId>
-            <version>${junit.version}</version>
             <scope>test</scope>
         </dependency>
         <!-- 
https://mvnrepository.com/artifact/org.junit.vintage/junit-vintage-engine -->
         <dependency>
             <groupId>org.junit.vintage</groupId>
             <artifactId>junit-vintage-engine</artifactId>
-            <version>${junit.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -102,6 +100,29 @@ under the License.
             <artifactId>hamcrest</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+        </dependency>
+        <!-- 
https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-api</artifactId>
+        </dependency>
+        <!-- 
https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-core</artifactId>
+        </dependency>
+        <!-- 
https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl -->
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-slf4j-impl</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>joda-time</groupId>
+            <artifactId>joda-time</artifactId>
+        </dependency>
     </dependencies>
     <build>
         <finalName>doris-fe-common</finalName>
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/ArrayType.java 
b/fe/fe-common/src/main/java/org/apache/doris/catalog/ArrayType.java
similarity index 100%
rename from fe/fe-core/src/main/java/org/apache/doris/catalog/ArrayType.java
rename to fe/fe-common/src/main/java/org/apache/doris/catalog/ArrayType.java
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/MapType.java 
b/fe/fe-common/src/main/java/org/apache/doris/catalog/MapType.java
similarity index 100%
rename from fe/fe-core/src/main/java/org/apache/doris/catalog/MapType.java
rename to fe/fe-common/src/main/java/org/apache/doris/catalog/MapType.java
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/catalog/MultiRowType.java 
b/fe/fe-common/src/main/java/org/apache/doris/catalog/MultiRowType.java
similarity index 100%
rename from fe/fe-core/src/main/java/org/apache/doris/catalog/MultiRowType.java
rename to fe/fe-common/src/main/java/org/apache/doris/catalog/MultiRowType.java
diff --git a/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlColType.java 
b/fe/fe-common/src/main/java/org/apache/doris/catalog/MysqlColType.java
similarity index 98%
rename from fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlColType.java
rename to fe/fe-common/src/main/java/org/apache/doris/catalog/MysqlColType.java
index d451b5ee38..ff6d81d022 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlColType.java
+++ b/fe/fe-common/src/main/java/org/apache/doris/catalog/MysqlColType.java
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.mysql;
+package org.apache.doris.catalog;
 
 // MySQL column type
 // TYPE codes are defined in the file 'mysql/include/mysql_com.h' enum 
enum_field_types
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/catalog/PrimitiveType.java 
b/fe/fe-common/src/main/java/org/apache/doris/catalog/PrimitiveType.java
similarity index 99%
rename from fe/fe-core/src/main/java/org/apache/doris/catalog/PrimitiveType.java
rename to fe/fe-common/src/main/java/org/apache/doris/catalog/PrimitiveType.java
index e91face521..d9e27d63c8 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/PrimitiveType.java
+++ b/fe/fe-common/src/main/java/org/apache/doris/catalog/PrimitiveType.java
@@ -18,7 +18,6 @@
 package org.apache.doris.catalog;
 
 import org.apache.doris.common.Config;
-import org.apache.doris.mysql.MysqlColType;
 import org.apache.doris.thrift.TPrimitiveType;
 
 import com.google.common.base.Preconditions;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/ScalarType.java 
b/fe/fe-common/src/main/java/org/apache/doris/catalog/ScalarType.java
similarity index 97%
rename from fe/fe-core/src/main/java/org/apache/doris/catalog/ScalarType.java
rename to fe/fe-common/src/main/java/org/apache/doris/catalog/ScalarType.java
index 466f94c63f..9015099f8c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/ScalarType.java
+++ b/fe/fe-common/src/main/java/org/apache/doris/catalog/ScalarType.java
@@ -18,10 +18,6 @@
 package org.apache.doris.catalog;
 
 import org.apache.doris.common.Config;
-import org.apache.doris.common.io.Text;
-import org.apache.doris.common.util.VectorizedUtil;
-import org.apache.doris.persist.gson.GsonUtils;
-import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.thrift.TColumnType;
 import org.apache.doris.thrift.TScalarType;
 import org.apache.doris.thrift.TTypeDesc;
@@ -34,9 +30,6 @@ import com.google.gson.annotations.SerializedName;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
 import java.util.Objects;
 
 /**
@@ -115,7 +108,7 @@ public class ScalarType extends Type {
     @SerializedName(value = "lenStr")
     private String lenStr;
 
-    protected ScalarType(PrimitiveType type) {
+    public ScalarType(PrimitiveType type) {
         this.type = type;
     }
 
@@ -639,12 +632,6 @@ public class ScalarType extends Type {
 
     @Override
     public void toThrift(TTypeDesc container) {
-        if (type.isDecimalV3Type() || type.isDateV2Type()) {
-            Preconditions.checkArgument((Config.enable_vectorized_load && 
ConnectContext.get() == null)
-                            || (VectorizedUtil.isVectorized() && 
ConnectContext.get() != null),
-                    "Please make sure vectorized load and vectorized query 
engine are enabled to use data type: "
-                            + type);
-        }
         TTypeNode node = new TTypeNode();
         container.types.add(node);
         node.setType(TTypeNodeType.SCALAR);
@@ -1177,14 +1164,4 @@ public class ScalarType extends Type {
         result = 31 * result + scale;
         return result;
     }
-
-    public void write(DataOutput out) throws IOException {
-        String json = GsonUtils.GSON.toJson(this);
-        Text.writeString(out, json);
-    }
-
-    public static ScalarType read(DataInput input) throws IOException {
-        String json = Text.readString(input);
-        return GsonUtils.GSON.fromJson(json, ScalarType.class);
-    }
 }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/StructField.java 
b/fe/fe-common/src/main/java/org/apache/doris/catalog/StructField.java
similarity index 100%
rename from fe/fe-core/src/main/java/org/apache/doris/catalog/StructField.java
rename to fe/fe-common/src/main/java/org/apache/doris/catalog/StructField.java
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/StructType.java 
b/fe/fe-common/src/main/java/org/apache/doris/catalog/StructType.java
similarity index 100%
rename from fe/fe-core/src/main/java/org/apache/doris/catalog/StructType.java
rename to fe/fe-common/src/main/java/org/apache/doris/catalog/StructType.java
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Type.java 
b/fe/fe-common/src/main/java/org/apache/doris/catalog/Type.java
similarity index 97%
rename from fe/fe-core/src/main/java/org/apache/doris/catalog/Type.java
rename to fe/fe-common/src/main/java/org/apache/doris/catalog/Type.java
index a07023a28f..c94552d1f2 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Type.java
+++ b/fe/fe-common/src/main/java/org/apache/doris/catalog/Type.java
@@ -17,11 +17,6 @@
 
 package org.apache.doris.catalog;
 
-import org.apache.doris.analysis.Expr;
-import org.apache.doris.analysis.LargeIntLiteral;
-import org.apache.doris.analysis.StringLiteral;
-import org.apache.doris.common.AnalysisException;
-import org.apache.doris.common.DdlException;
 import org.apache.doris.common.Pair;
 import org.apache.doris.thrift.TColumnType;
 import org.apache.doris.thrift.TPrimitiveType;
@@ -32,13 +27,19 @@ import org.apache.doris.thrift.TTypeNode;
 import org.apache.doris.thrift.TTypeNodeType;
 
 import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
-import com.google.common.primitives.Longs;
+import com.google.common.collect.Sets;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
 /**
  * Abstract class describing an Impala data type (scalar/complex type).
@@ -175,6 +176,33 @@ public abstract class Type {
         arraySubTypes.add(STRING);
     }
 
+    public static final Set<Class> DATE_SUPPORTED_JAVA_TYPE = 
Sets.newHashSet(LocalDate.class, java.util.Date.class,
+            org.joda.time.LocalDate.class);
+    public static final Set<Class> DATETIME_SUPPORTED_JAVA_TYPE = 
Sets.newHashSet(LocalDateTime.class,
+            org.joda.time.DateTime.class, org.joda.time.LocalDateTime.class);
+    public static final ImmutableMap<PrimitiveType, Set<Class>> 
PrimitiveTypeToJavaClassType =
+            new ImmutableMap.Builder<PrimitiveType, Set<Class>>()
+                    .put(PrimitiveType.BOOLEAN, Sets.newHashSet(Boolean.class, 
boolean.class))
+                    .put(PrimitiveType.TINYINT, Sets.newHashSet(Byte.class, 
byte.class))
+                    .put(PrimitiveType.SMALLINT, Sets.newHashSet(Short.class, 
short.class))
+                    .put(PrimitiveType.INT, Sets.newHashSet(Integer.class, 
int.class))
+                    .put(PrimitiveType.FLOAT, Sets.newHashSet(Float.class, 
float.class))
+                    .put(PrimitiveType.DOUBLE, Sets.newHashSet(Double.class, 
double.class))
+                    .put(PrimitiveType.BIGINT, Sets.newHashSet(Long.class, 
long.class))
+                    .put(PrimitiveType.CHAR, Sets.newHashSet(String.class))
+                    .put(PrimitiveType.VARCHAR, Sets.newHashSet(String.class))
+                    .put(PrimitiveType.STRING, Sets.newHashSet(String.class))
+                    .put(PrimitiveType.DATE, DATE_SUPPORTED_JAVA_TYPE)
+                    .put(PrimitiveType.DATEV2, DATE_SUPPORTED_JAVA_TYPE)
+                    .put(PrimitiveType.DATETIME, DATETIME_SUPPORTED_JAVA_TYPE)
+                    .put(PrimitiveType.DATETIMEV2, 
DATETIME_SUPPORTED_JAVA_TYPE)
+                    .put(PrimitiveType.LARGEINT, 
Sets.newHashSet(BigInteger.class))
+                    .put(PrimitiveType.DECIMALV2, 
Sets.newHashSet(BigDecimal.class))
+                    .put(PrimitiveType.DECIMAL32, 
Sets.newHashSet(BigDecimal.class))
+                    .put(PrimitiveType.DECIMAL64, 
Sets.newHashSet(BigDecimal.class))
+                    .put(PrimitiveType.DECIMAL128, 
Sets.newHashSet(BigDecimal.class))
+                    .build();
+
     public static ArrayList<ScalarType> getIntegerTypes() {
         return integerTypes;
     }
@@ -577,42 +605,6 @@ public abstract class Type {
         }
     }
 
-    /**
-     * Returns true if expr is StringLiteral and can parse to valid type, false
-     * otherwise.
-     * This function only support LargeInt and BigInt now.
-     */
-    public static boolean canParseTo(Expr expr, PrimitiveType type) {
-        if (expr instanceof StringLiteral) {
-            if (type == PrimitiveType.BIGINT) {
-                return canParseToBigInt((StringLiteral) expr);
-            } else if (type == PrimitiveType.LARGEINT) {
-                return canParseToLargeInt((StringLiteral) expr);
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Returns true if expr can parse to valid BigInt, false otherwise.
-     */
-    private static boolean canParseToBigInt(StringLiteral expr) {
-        String value = ((StringLiteral) expr).getValue();
-        return Longs.tryParse(value) != null;
-    }
-
-    /**
-     * Returns true if expr can parse to valid LargeInt, false otherwise.
-     */
-    private static boolean canParseToLargeInt(Expr expr) {
-        try {
-            new LargeIntLiteral(((StringLiteral) expr).getValue());
-        } catch (AnalysisException e) {
-            return false;
-        }
-        return true;
-    }
-
     /**
      * Returns true if this type exceeds the MAX_NESTING_DEPTH, false 
otherwise.
      */
@@ -884,7 +876,7 @@ public abstract class Type {
      * For schema change, convert data type to string,
      * get the size of string representation
      */
-    public int getColumnStringRepSize() throws DdlException {
+    public int getColumnStringRepSize() throws TypeException {
         if (isScalarType(PrimitiveType.FLOAT)) {
             return 24; // see be/src/gutil/strings/numbers.h kFloatToBufferSize
         }
@@ -906,7 +898,7 @@ public abstract class Type {
             case STRING:
                 return 2147483647; // defined by be/src/olap/olap_define.h, 
OLAP_STRING_MAX_LENGTH
             default:
-                throw new DdlException("Can not change " + 
t.getPrimitiveType() + " to char/varchar/string");
+                throw new TypeException("Can not change " + 
t.getPrimitiveType() + " to char/varchar/string");
         }
     }
 
diff --git 
a/fe/fe-common/src/main/java/org/apache/doris/catalog/TypeException.java 
b/fe/fe-common/src/main/java/org/apache/doris/catalog/TypeException.java
new file mode 100644
index 0000000000..b4ff3838b3
--- /dev/null
+++ b/fe/fe-common/src/main/java/org/apache/doris/catalog/TypeException.java
@@ -0,0 +1,28 @@
+// 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.doris.catalog;
+
+public class TypeException extends Exception {
+    public TypeException(String msg) {
+        super(msg);
+    }
+
+    public TypeException(String msg, Throwable e) {
+        super(msg, e);
+    }
+}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/Config.java 
b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
similarity index 98%
rename from fe/fe-core/src/main/java/org/apache/doris/common/Config.java
rename to fe/fe-common/src/main/java/org/apache/doris/common/Config.java
index 6aa43d1a86..fa6d78c8ed 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/Config.java
+++ b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
@@ -17,15 +17,13 @@
 
 package org.apache.doris.common;
 
-import org.apache.doris.PaloFe;
-
 public class Config extends ConfigBase {
 
     /**
      * Dir of custom config file
      */
     @ConfField
-    public static String custom_config_dir = PaloFe.DORIS_HOME_DIR + "/conf";
+    public static String custom_config_dir = System.getenv("DORIS_HOME") + 
"/conf";
 
     /**
      * The max size of one sys log and audit log
@@ -64,8 +62,9 @@ public class Config extends ConfigBase {
      *          120s    120 seconds
      */
     @ConfField
-    public static String sys_log_dir = PaloFe.DORIS_HOME_DIR + "/log";
-    @ConfField public static String sys_log_level = "INFO";
+    public static String sys_log_dir = System.getenv("DORIS_HOME") + "/log";
+    @ConfField
+    public static String sys_log_level = "INFO";
     @ConfField public static int sys_log_roll_num = 10;
     @ConfField
     public static String[] sys_log_verbose_modules = {};
@@ -101,7 +100,7 @@ public class Config extends ConfigBase {
      *          120s    120 seconds
      */
     @ConfField
-    public static String audit_log_dir = PaloFe.DORIS_HOME_DIR + "/log";
+    public static String audit_log_dir = System.getenv("DORIS_HOME") + "/log";
     @ConfField
     public static int audit_log_roll_num = 90;
     @ConfField
@@ -185,13 +184,14 @@ public class Config extends ConfigBase {
      * 2. Safe (RAID)
      */
     @ConfField
-    public static String meta_dir = PaloFe.DORIS_HOME_DIR + "/doris-meta";
+    public static String meta_dir = System.getenv("DORIS_HOME") + 
"/doris-meta";
 
     /**
      * temp dir is used to save intermediate results of some process, such as 
backup and restore process.
      * file in this dir will be cleaned after these process is finished.
      */
-    @ConfField public static String tmp_dir = PaloFe.DORIS_HOME_DIR + 
"/temp_dir";
+    @ConfField
+    public static String tmp_dir = System.getenv("DORIS_HOME") + "/temp_dir";
 
     /**
      * Edit log type.
@@ -619,7 +619,7 @@ public class Config extends ConfigBase {
      * Default spark home dir
      */
     @ConfField(mutable = true, masterOnly = true)
-    public static String spark_home_default_dir = PaloFe.DORIS_HOME_DIR + 
"/lib/spark2x";
+    public static String spark_home_default_dir = System.getenv("DORIS_HOME") 
+ "/lib/spark2x";
 
     /**
      * Default spark dependencies path
@@ -637,7 +637,7 @@ public class Config extends ConfigBase {
      * Default yarn client path
      */
     @ConfField
-    public static String yarn_client_path = PaloFe.DORIS_HOME_DIR + 
"/lib/yarn-client/hadoop/bin/yarn";
+    public static String yarn_client_path = System.getenv("DORIS_HOME") + 
"/lib/yarn-client/hadoop/bin/yarn";
 
     /**
      * Default yarn config file directory
@@ -645,7 +645,7 @@ public class Config extends ConfigBase {
      * config file exists under this path, and if not, create them.
      */
     @ConfField
-    public static String yarn_config_dir = PaloFe.DORIS_HOME_DIR + 
"/lib/yarn-config";
+    public static String yarn_config_dir = System.getenv("DORIS_HOME") + 
"/lib/yarn-config";
 
     /**
      * Maximal intervals between two syncJob's commits.
@@ -1232,7 +1232,8 @@ public class Config extends ConfigBase {
     /**
      * Save small files
      */
-    @ConfField public static String small_file_dir = PaloFe.DORIS_HOME_DIR + 
"/small_files";
+    @ConfField
+    public static String small_file_dir = System.getenv("DORIS_HOME") + 
"/small_files";
 
     /**
      * If set to true, the insert stmt with processing error will still return 
a label to user.
@@ -1333,7 +1334,7 @@ public class Config extends ConfigBase {
      * Define thrift server's server model, default is TThreadPoolServer model
      */
     @ConfField
-    public static String thrift_server_type = ThriftServer.THREAD_POOL;
+    public static String thrift_server_type = "THREAD_POOL";
 
     /**
      * This config will decide whether to resend agent task when create_time 
for agent_task is set,
diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/ConfigBase.java 
b/fe/fe-common/src/main/java/org/apache/doris/common/ConfigBase.java
similarity index 97%
rename from fe/fe-core/src/main/java/org/apache/doris/common/ConfigBase.java
rename to fe/fe-common/src/main/java/org/apache/doris/common/ConfigBase.java
index 0c8adc572e..7b1ed7e0d5 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/ConfigBase.java
+++ b/fe/fe-common/src/main/java/org/apache/doris/common/ConfigBase.java
@@ -296,25 +296,25 @@ public class ConfigBase {
         throw new IllegalArgumentException("type mismatch");
     }
 
-    public static synchronized void setMutableConfig(String key, String value) 
throws DdlException {
+    public static synchronized void setMutableConfig(String key, String value) 
throws ConfigException {
         Field field = confFields.get(key);
         if (field == null) {
             if (ldapConfFields.containsKey(key)) {
                 field = ldapConfFields.get(key);
             } else {
-                throw new DdlException("Config '" + key + "' does not exist");
+                throw new ConfigException("Config '" + key + "' does not 
exist");
             }
         }
 
         ConfField anno = field.getAnnotation(ConfField.class);
         if (!anno.mutable()) {
-            throw new DdlException("Config '" + key + "' is not mutable");
+            throw new ConfigException("Config '" + key + "' is not mutable");
         }
 
         try {
             anno.callback().newInstance().handle(field, value);
         } catch (Exception e) {
-            throw new DdlException("Failed to set config '" + key + "'. err: " 
+ e.getMessage());
+            throw new ConfigException("Failed to set config '" + key + "'. 
err: " + e.getMessage());
         }
 
         LOG.info("set config {} to {}", key, value);
diff --git 
a/fe/fe-common/src/main/java/org/apache/doris/common/ConfigException.java 
b/fe/fe-common/src/main/java/org/apache/doris/common/ConfigException.java
new file mode 100644
index 0000000000..1488b52180
--- /dev/null
+++ b/fe/fe-common/src/main/java/org/apache/doris/common/ConfigException.java
@@ -0,0 +1,28 @@
+// 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.doris.common;
+
+public class ConfigException extends Exception {
+    public ConfigException(String msg) {
+        super(msg);
+    }
+
+    public ConfigException(String msg, Throwable e) {
+        super(msg, e);
+    }
+}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/LdapConfig.java 
b/fe/fe-common/src/main/java/org/apache/doris/common/LdapConfig.java
similarity index 100%
rename from fe/fe-core/src/main/java/org/apache/doris/common/LdapConfig.java
rename to fe/fe-common/src/main/java/org/apache/doris/common/LdapConfig.java
diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/Pair.java 
b/fe/fe-common/src/main/java/org/apache/doris/common/Pair.java
similarity index 100%
rename from fe/fe-core/src/main/java/org/apache/doris/common/Pair.java
rename to fe/fe-common/src/main/java/org/apache/doris/common/Pair.java
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/common/PatternMatcher.java 
b/fe/fe-common/src/main/java/org/apache/doris/common/PatternMatcher.java
similarity index 95%
rename from fe/fe-core/src/main/java/org/apache/doris/common/PatternMatcher.java
rename to fe/fe-common/src/main/java/org/apache/doris/common/PatternMatcher.java
index 5b5f3f0903..9f09813402 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/PatternMatcher.java
+++ b/fe/fe-common/src/main/java/org/apache/doris/common/PatternMatcher.java
@@ -108,7 +108,7 @@ public class PatternMatcher {
      * The following characters are not permitted:
      *   <([{^=$!|]})?*+>
      */
-    private static String convertMysqlPattern(String mysqlPattern) throws 
AnalysisException {
+    private static String convertMysqlPattern(String mysqlPattern) throws 
PatternMatcherException {
         String newMysqlPattern = mysqlPattern;
         StringBuilder sb = new StringBuilder();
         for (int i = 0; i < newMysqlPattern.length(); ++i) {
@@ -184,14 +184,14 @@ public class PatternMatcher {
         return sb.toString();
     }
 
-    private static void checkPermittedCharactor(char c) throws 
AnalysisException {
+    private static void checkPermittedCharactor(char c) throws 
PatternMatcherException {
         if (FORBIDDEN_CHARS.contains(c)) {
-            throw new AnalysisException("Forbidden charactor: '" + c + "'");
+            throw new PatternMatcherException("Forbidden charactor: '" + c + 
"'");
         }
     }
 
     public static PatternMatcher createMysqlPattern(String mysqlPattern, 
boolean caseSensitive)
-            throws AnalysisException {
+            throws PatternMatcherException {
         PatternMatcher matcher;
 
         // Match nothing
@@ -205,7 +205,7 @@ public class PatternMatcher {
                 matcher = new PatternMatcher(Pattern.compile(javaPattern, 
Pattern.CASE_INSENSITIVE));
             }
         } catch (Exception e) {
-            throw new AnalysisException("Bad pattern in SQL: " + 
e.getMessage());
+            throw new PatternMatcherException("Bad pattern in SQL: " + 
e.getMessage());
         }
         return matcher;
     }
diff --git 
a/fe/fe-common/src/main/java/org/apache/doris/common/PatternMatcherException.java
 
b/fe/fe-common/src/main/java/org/apache/doris/common/PatternMatcherException.java
new file mode 100644
index 0000000000..d310a331bf
--- /dev/null
+++ 
b/fe/fe-common/src/main/java/org/apache/doris/common/PatternMatcherException.java
@@ -0,0 +1,28 @@
+// 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.doris.common;
+
+public class PatternMatcherException extends Exception {
+    public PatternMatcherException(String msg) {
+        super(msg);
+    }
+
+    public PatternMatcherException(String msg, Throwable e) {
+        super(msg, e);
+    }
+}
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/BinaryPredicate.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/BinaryPredicate.java
index 932bc7f2bb..2d7fe4b313 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/BinaryPredicate.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/BinaryPredicate.java
@@ -26,6 +26,7 @@ import org.apache.doris.catalog.PrimitiveType;
 import org.apache.doris.catalog.ScalarFunction;
 import org.apache.doris.catalog.ScalarType;
 import org.apache.doris.catalog.Type;
+import org.apache.doris.catalog.TypeUtils;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.Pair;
 import org.apache.doris.common.Reference;
@@ -381,10 +382,10 @@ public class BinaryPredicate extends Predicate implements 
Writable {
         // So it is also compatible with Mysql.
 
         if (t1.isStringType() || t2.isStringType()) {
-            if ((t1 == PrimitiveType.BIGINT || t1 == PrimitiveType.LARGEINT) 
&& Type.canParseTo(getChild(1), t1)) {
+            if ((t1 == PrimitiveType.BIGINT || t1 == PrimitiveType.LARGEINT) 
&& TypeUtils.canParseTo(getChild(1), t1)) {
                 return Type.fromPrimitiveType(t1);
             }
-            if ((t2 == PrimitiveType.BIGINT || t2 == PrimitiveType.LARGEINT) 
&& Type.canParseTo(getChild(0), t2)) {
+            if ((t2 == PrimitiveType.BIGINT || t2 == PrimitiveType.LARGEINT) 
&& TypeUtils.canParseTo(getChild(0), t2)) {
                 return Type.fromPrimitiveType(t2);
             }
         }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java
index ab5bc992f8..491f6e836c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java
@@ -27,6 +27,7 @@ import org.apache.doris.catalog.PrimitiveType;
 import org.apache.doris.catalog.ScalarFunction;
 import org.apache.doris.catalog.ScalarType;
 import org.apache.doris.catalog.Type;
+import org.apache.doris.catalog.TypeUtils;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.Pair;
 import org.apache.doris.qe.ConnectContext;
@@ -445,7 +446,7 @@ public class CastExpr extends Expr {
         out.writeBoolean(isImplicit);
         if (targetTypeDef.getType() instanceof ScalarType) {
             ScalarType scalarType = (ScalarType) targetTypeDef.getType();
-            scalarType.write(out);
+            TypeUtils.writeScalaType(scalarType, out);
         } else {
             throw new IOException("Can not write type " + 
targetTypeDef.getType());
         }
@@ -464,7 +465,7 @@ public class CastExpr extends Expr {
     @Override
     public void readFields(DataInput in) throws IOException {
         isImplicit = in.readBoolean();
-        ScalarType scalarType = ScalarType.read(in);
+        ScalarType scalarType = TypeUtils.readScalaType(in);
         targetTypeDef = new TypeDef(scalarType);
         int counter = in.readInt();
         for (int i = 0; i < counter; i++) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFunctionStmt.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFunctionStmt.java
index 16c66053b7..4efa764713 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFunctionStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFunctionStmt.java
@@ -22,7 +22,6 @@ import org.apache.doris.catalog.AliasFunction;
 import org.apache.doris.catalog.Env;
 import org.apache.doris.catalog.Function;
 import org.apache.doris.catalog.Function.NullableMode;
-import org.apache.doris.catalog.PrimitiveType;
 import org.apache.doris.catalog.ScalarFunction;
 import org.apache.doris.catalog.ScalarType;
 import org.apache.doris.catalog.Type;
@@ -43,9 +42,7 @@ import org.apache.doris.thrift.TFunctionBinaryType;
 
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSortedMap;
-import com.google.common.collect.Sets;
 import io.grpc.ManagedChannel;
 import io.grpc.netty.shaded.io.grpc.netty.NettyChannelBuilder;
 import org.apache.commons.codec.binary.Hex;
@@ -58,15 +55,11 @@ import java.io.InputStream;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.lang.reflect.Parameter;
-import java.math.BigDecimal;
-import java.math.BigInteger;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -546,33 +539,6 @@ public class CreateFunctionStmt extends DdlStmt {
         }
     }
 
-    public static final Set<Class> DATE_SUPPORTED_JAVA_TYPE = 
Sets.newHashSet(LocalDate.class, java.util.Date.class,
-            org.joda.time.LocalDate.class);
-    public static final Set<Class> DATETIME_SUPPORTED_JAVA_TYPE = 
Sets.newHashSet(LocalDateTime.class,
-            org.joda.time.DateTime.class, org.joda.time.LocalDateTime.class);
-    private static final ImmutableMap<PrimitiveType, Set<Class>> 
PrimitiveTypeToJavaClassType =
-            new ImmutableMap.Builder<PrimitiveType, Set<Class>>()
-                    .put(PrimitiveType.BOOLEAN, Sets.newHashSet(Boolean.class, 
boolean.class))
-                    .put(PrimitiveType.TINYINT, Sets.newHashSet(Byte.class, 
byte.class))
-                    .put(PrimitiveType.SMALLINT, Sets.newHashSet(Short.class, 
short.class))
-                    .put(PrimitiveType.INT, Sets.newHashSet(Integer.class, 
int.class))
-                    .put(PrimitiveType.FLOAT, Sets.newHashSet(Float.class, 
float.class))
-                    .put(PrimitiveType.DOUBLE, Sets.newHashSet(Double.class, 
double.class))
-                    .put(PrimitiveType.BIGINT, Sets.newHashSet(Long.class, 
long.class))
-                    .put(PrimitiveType.CHAR, Sets.newHashSet(String.class))
-                    .put(PrimitiveType.VARCHAR, Sets.newHashSet(String.class))
-                    .put(PrimitiveType.STRING, Sets.newHashSet(String.class))
-                    .put(PrimitiveType.DATE, DATE_SUPPORTED_JAVA_TYPE)
-                    .put(PrimitiveType.DATEV2, DATE_SUPPORTED_JAVA_TYPE)
-                    .put(PrimitiveType.DATETIME, DATETIME_SUPPORTED_JAVA_TYPE)
-                    .put(PrimitiveType.DATETIMEV2, 
DATETIME_SUPPORTED_JAVA_TYPE)
-                    .put(PrimitiveType.LARGEINT, 
Sets.newHashSet(BigInteger.class))
-                    .put(PrimitiveType.DECIMALV2, 
Sets.newHashSet(BigDecimal.class))
-                    .put(PrimitiveType.DECIMAL32, 
Sets.newHashSet(BigDecimal.class))
-                    .put(PrimitiveType.DECIMAL64, 
Sets.newHashSet(BigDecimal.class))
-                    .put(PrimitiveType.DECIMAL128, 
Sets.newHashSet(BigDecimal.class))
-                    .build();
-
     private void checkUdfType(Class clazz, Method method, Type expType, Class 
pType, String pname)
             throws AnalysisException {
         if (!(expType instanceof ScalarType)) {
@@ -581,7 +547,7 @@ public class CreateFunctionStmt extends DdlStmt {
                             method.getName(), clazz.getCanonicalName(), 
expType));
         }
         ScalarType scalarType = (ScalarType) expType;
-        Set<Class> javaTypes = 
PrimitiveTypeToJavaClassType.get(scalarType.getPrimitiveType());
+        Set<Class> javaTypes = 
Type.PrimitiveTypeToJavaClassType.get(scalarType.getPrimitiveType());
         if (javaTypes == null) {
             throw new AnalysisException(
                     String.format("Method '%s' in class '%s' does not support 
type '%s'",
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowBackupStmt.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowBackupStmt.java
index af4543731d..c5adcf45c8 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowBackupStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowBackupStmt.java
@@ -26,6 +26,7 @@ import org.apache.doris.common.CaseSensibility;
 import org.apache.doris.common.ErrorCode;
 import org.apache.doris.common.ErrorReport;
 import org.apache.doris.common.PatternMatcher;
+import org.apache.doris.common.PatternMatcherWrapper;
 import org.apache.doris.common.UserException;
 import org.apache.doris.mysql.privilege.PrivPredicate;
 import org.apache.doris.qe.ConnectContext;
@@ -180,7 +181,7 @@ public class ShowBackupStmt extends ShowStmt {
             return CaseSensibility.LABEL.getCaseSensibility()
                     ? label -> label.equals(labelValue) : label -> 
label.equalsIgnoreCase(labelValue);
         } else {
-            PatternMatcher patternMatcher = PatternMatcher.createMysqlPattern(
+            PatternMatcher patternMatcher = 
PatternMatcherWrapper.createMysqlPattern(
                     labelValue, CaseSensibility.LABEL.getCaseSensibility());
             return patternMatcher::match;
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowCatalogRecycleBinStmt.java
 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowCatalogRecycleBinStmt.java
index 04d6c8fba3..a2ee6360a8 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowCatalogRecycleBinStmt.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowCatalogRecycleBinStmt.java
@@ -22,6 +22,7 @@ import org.apache.doris.catalog.ScalarType;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.CaseSensibility;
 import org.apache.doris.common.PatternMatcher;
+import org.apache.doris.common.PatternMatcherWrapper;
 import org.apache.doris.common.UserException;
 import org.apache.doris.qe.ShowResultSetMetaData;
 
@@ -146,7 +147,7 @@ public class ShowCatalogRecycleBinStmt extends ShowStmt {
             return CaseSensibility.PARTITION.getCaseSensibility()
                     ? name -> name.equals(nameValue) : name -> 
name.equalsIgnoreCase(nameValue);
         } else {
-            PatternMatcher patternMatcher = PatternMatcher.createMysqlPattern(
+            PatternMatcher patternMatcher = 
PatternMatcherWrapper.createMysqlPattern(
                     nameValue, CaseSensibility.PARTITION.getCaseSensibility());
             return patternMatcher::match;
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowRestoreStmt.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowRestoreStmt.java
index d8f7c86713..a1231da214 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowRestoreStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowRestoreStmt.java
@@ -26,6 +26,7 @@ import org.apache.doris.common.CaseSensibility;
 import org.apache.doris.common.ErrorCode;
 import org.apache.doris.common.ErrorReport;
 import org.apache.doris.common.PatternMatcher;
+import org.apache.doris.common.PatternMatcherWrapper;
 import org.apache.doris.common.UserException;
 import org.apache.doris.mysql.privilege.PrivPredicate;
 import org.apache.doris.qe.ConnectContext;
@@ -179,7 +180,7 @@ public class ShowRestoreStmt extends ShowStmt {
             return CaseSensibility.LABEL.getCaseSensibility()
                     ? label -> label.equals(labelValue) : label -> 
label.equalsIgnoreCase(labelValue);
         } else {
-            PatternMatcher patternMatcher = PatternMatcher.createMysqlPattern(
+            PatternMatcher patternMatcher = 
PatternMatcherWrapper.createMysqlPattern(
                     labelValue, CaseSensibility.LABEL.getCaseSensibility());
             return patternMatcher::match;
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowUserPropertyStmt.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowUserPropertyStmt.java
index 9640e19029..824684b050 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowUserPropertyStmt.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowUserPropertyStmt.java
@@ -26,6 +26,7 @@ import org.apache.doris.common.CaseSensibility;
 import org.apache.doris.common.ErrorCode;
 import org.apache.doris.common.ErrorReport;
 import org.apache.doris.common.PatternMatcher;
+import org.apache.doris.common.PatternMatcherWrapper;
 import org.apache.doris.common.UserException;
 import org.apache.doris.common.proc.UserPropertyProcNode;
 import org.apache.doris.mysql.privilege.PrivPredicate;
@@ -78,8 +79,8 @@ public class ShowUserPropertyStmt extends ShowStmt {
         }
 
         List<List<String>> result = Lists.newArrayList();
-        PatternMatcher matcher = PatternMatcher.createMysqlPattern(pattern,
-                                                                   
CaseSensibility.USER.getCaseSensibility());
+        PatternMatcher matcher = 
PatternMatcherWrapper.createMysqlPattern(pattern,
+                CaseSensibility.USER.getCaseSensibility());
         for (List<String> row : rows) {
             String key = row.get(0).split("\\" + 
SetUserPropertyVar.DOT_SEPARATOR)[0];
             if (matcher.match(key)) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/UserIdentity.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/UserIdentity.java
index 4a734460a5..88b116cef1 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/UserIdentity.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/UserIdentity.java
@@ -23,7 +23,7 @@ import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.CaseSensibility;
 import org.apache.doris.common.FeMetaVersion;
 import org.apache.doris.common.FeNameFormat;
-import org.apache.doris.common.PatternMatcher;
+import org.apache.doris.common.PatternMatcherWrapper;
 import org.apache.doris.common.io.Text;
 import org.apache.doris.common.io.Writable;
 import org.apache.doris.mysql.privilege.PaloAuth;
@@ -147,7 +147,7 @@ public class UserIdentity implements Writable, 
GsonPostProcessable {
         }
 
         // reuse createMysqlPattern to validate host pattern
-        PatternMatcher.createMysqlPattern(host, 
CaseSensibility.HOST.getCaseSensibility());
+        PatternMatcherWrapper.createMysqlPattern(host, 
CaseSensibility.HOST.getCaseSensibility());
         isAnalyzed = true;
     }
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java
index ae96365332..adae901430 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java
@@ -442,11 +442,16 @@ public class Column implements Writable, 
GsonPostProcessable {
         }
 
         if (type.isNumericType() && other.type.isStringType()) {
-            Integer lSize = type.getColumnStringRepSize();
-            Integer rSize = other.type.getColumnStringRepSize();
-            if (rSize < lSize) {
-                throw new DdlException(
-                        "Can not change from wider type " + type.toSql() + " 
to narrower type " + other.type.toSql());
+            try {
+                Integer lSize = type.getColumnStringRepSize();
+                Integer rSize = other.type.getColumnStringRepSize();
+                if (rSize < lSize) {
+                    throw new DdlException(
+                            "Can not change from wider type " + type.toSql() + 
" to narrower type "
+                                    + other.type.toSql());
+                }
+            } catch (TypeException e) {
+                throw new DdlException(e.getMessage());
             }
         }
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
index 112360a3b3..a27ee4d707 100755
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
@@ -99,6 +99,7 @@ import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.ClientPool;
 import org.apache.doris.common.Config;
 import org.apache.doris.common.ConfigBase;
+import org.apache.doris.common.ConfigException;
 import org.apache.doris.common.DdlException;
 import org.apache.doris.common.ErrorCode;
 import org.apache.doris.common.ErrorReport;
@@ -4806,7 +4807,11 @@ public class Env {
         Preconditions.checkState(configs.size() == 1);
 
         for (Map.Entry<String, String> entry : configs.entrySet()) {
-            ConfigBase.setMutableConfig(entry.getKey(), entry.getValue());
+            try {
+                ConfigBase.setMutableConfig(entry.getKey(), entry.getValue());
+            } catch (ConfigException e) {
+                throw new DdlException(e.getMessage());
+            }
         }
     }
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/TypeUtils.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/TypeUtils.java
new file mode 100644
index 0000000000..10a914c4b5
--- /dev/null
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/TypeUtils.java
@@ -0,0 +1,80 @@
+// 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.doris.catalog;
+
+import org.apache.doris.analysis.Expr;
+import org.apache.doris.analysis.LargeIntLiteral;
+import org.apache.doris.analysis.StringLiteral;
+import org.apache.doris.common.AnalysisException;
+import org.apache.doris.common.io.Text;
+import org.apache.doris.persist.gson.GsonUtils;
+
+import com.google.common.primitives.Longs;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+public class TypeUtils {
+
+    /**
+     * Returns true if expr is StringLiteral and can parse to valid type, false
+     * otherwise.
+     * This function only support LargeInt and BigInt now.
+     */
+    public static boolean canParseTo(Expr expr, PrimitiveType type) {
+        if (expr instanceof StringLiteral) {
+            if (type == PrimitiveType.BIGINT) {
+                return canParseToBigInt((StringLiteral) expr);
+            } else if (type == PrimitiveType.LARGEINT) {
+                return canParseToLargeInt((StringLiteral) expr);
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Returns true if expr can parse to valid BigInt, false otherwise.
+     */
+    private static boolean canParseToBigInt(StringLiteral expr) {
+        String value = ((StringLiteral) expr).getValue();
+        return Longs.tryParse(value) != null;
+    }
+
+    /**
+     * Returns true if expr can parse to valid LargeInt, false otherwise.
+     */
+    private static boolean canParseToLargeInt(Expr expr) {
+        try {
+            new LargeIntLiteral(((StringLiteral) expr).getValue());
+        } catch (AnalysisException e) {
+            return false;
+        }
+        return true;
+    }
+
+    public static void writeScalaType(ScalarType type, DataOutput out) throws 
IOException {
+        String json = GsonUtils.GSON.toJson(type);
+        Text.writeString(out, json);
+    }
+
+    public static ScalarType readScalaType(DataInput input) throws IOException 
{
+        String json = Text.readString(input);
+        return GsonUtils.GSON.fromJson(json, ScalarType.class);
+    }
+}
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/common/PatternMatcherWrapper.java 
b/fe/fe-core/src/main/java/org/apache/doris/common/PatternMatcherWrapper.java
new file mode 100644
index 0000000000..186a3c11cc
--- /dev/null
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/common/PatternMatcherWrapper.java
@@ -0,0 +1,29 @@
+// 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.doris.common;
+
+public class PatternMatcherWrapper {
+    public static PatternMatcher createMysqlPattern(String mysqlPattern, 
boolean caseSensitive)
+            throws AnalysisException {
+        try {
+            return PatternMatcher.createMysqlPattern(mysqlPattern, 
caseSensitive);
+        } catch (PatternMatcherException e) {
+            throw new AnalysisException(e.getMessage());
+        }
+    }
+}
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogMgr.java 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogMgr.java
index b3c822c21c..9a480706e9 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogMgr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogMgr.java
@@ -38,6 +38,7 @@ import org.apache.doris.common.DdlException;
 import org.apache.doris.common.ErrorCode;
 import org.apache.doris.common.ErrorReport;
 import org.apache.doris.common.PatternMatcher;
+import org.apache.doris.common.PatternMatcherWrapper;
 import org.apache.doris.common.UserException;
 import org.apache.doris.common.io.Text;
 import org.apache.doris.common.io.Writable;
@@ -346,7 +347,7 @@ public class CatalogMgr implements Writable, 
GsonPostProcessable {
             if (showStmt.getCatalogName() == null) {
                 PatternMatcher matcher = null;
                 if (showStmt.getPattern() != null) {
-                    matcher = 
PatternMatcher.createMysqlPattern(showStmt.getPattern(),
+                    matcher = 
PatternMatcherWrapper.createMysqlPattern(showStmt.getPattern(),
                             CaseSensibility.CATALOG.getCaseSensibility());
                 }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/SetConfigAction.java 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/SetConfigAction.java
index 8c3ffecc48..d9aa39ebff 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/SetConfigAction.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/SetConfigAction.java
@@ -18,6 +18,7 @@
 package org.apache.doris.httpv2.rest;
 
 import org.apache.doris.common.ConfigBase;
+import org.apache.doris.common.ConfigException;
 import org.apache.doris.common.DdlException;
 import org.apache.doris.httpv2.entity.ResponseEntityBuilder;
 import org.apache.doris.mysql.privilege.PrivPredicate;
@@ -89,7 +90,11 @@ public class SetConfigAction extends RestBaseController {
             String[] confValue = config.getValue();
             try {
                 if (confValue != null && confValue.length == 1) {
-                    ConfigBase.setMutableConfig(confKey, confValue[0]);
+                    try {
+                        ConfigBase.setMutableConfig(confKey, confValue[0]);
+                    } catch (ConfigException e) {
+                        throw new DdlException(e.getMessage());
+                    }
                     setConfigs.put(confKey, confValue[0]);
                 } else {
                     throw new DdlException("conf value size != 1");
diff --git a/fe/fe-core/src/main/java/org/apache/doris/load/ExportMgr.java 
b/fe/fe-core/src/main/java/org/apache/doris/load/ExportMgr.java
index cdee254f8a..70b4ebf5e5 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/load/ExportMgr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/load/ExportMgr.java
@@ -30,6 +30,7 @@ import org.apache.doris.common.DdlException;
 import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.LabelAlreadyUsedException;
 import org.apache.doris.common.PatternMatcher;
+import org.apache.doris.common.PatternMatcherWrapper;
 import org.apache.doris.common.util.ListComparator;
 import org.apache.doris.common.util.OrderByPair;
 import org.apache.doris.common.util.TimeUtils;
@@ -140,7 +141,8 @@ public class ExportMgr {
     public static Predicate<ExportJob> buildCancelJobFilter(CancelExportStmt 
stmt) throws AnalysisException {
         String label = stmt.getLabel();
         String state = stmt.getState();
-        PatternMatcher matcher = PatternMatcher.createMysqlPattern(label, 
CaseSensibility.LABEL.getCaseSensibility());
+        PatternMatcher matcher = 
PatternMatcherWrapper.createMysqlPattern(label,
+                CaseSensibility.LABEL.getCaseSensibility());
 
         return job -> {
             boolean labelFilter = true;
@@ -192,7 +194,7 @@ public class ExportMgr {
         LinkedList<List<Comparable>> exportJobInfos = new 
LinkedList<List<Comparable>>();
         PatternMatcher matcher = null;
         if (isLabelUseLike) {
-            matcher = PatternMatcher.createMysqlPattern(label, 
CaseSensibility.LABEL.getCaseSensibility());
+            matcher = PatternMatcherWrapper.createMysqlPattern(label, 
CaseSensibility.LABEL.getCaseSensibility());
         }
 
         readLock();
diff --git a/fe/fe-core/src/main/java/org/apache/doris/load/Load.java 
b/fe/fe-core/src/main/java/org/apache/doris/load/Load.java
index 5cc878301e..0225d641d0 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/load/Load.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/load/Load.java
@@ -73,6 +73,7 @@ import org.apache.doris.common.LoadException;
 import org.apache.doris.common.MetaNotFoundException;
 import org.apache.doris.common.Pair;
 import org.apache.doris.common.PatternMatcher;
+import org.apache.doris.common.PatternMatcherWrapper;
 import org.apache.doris.common.UserException;
 import org.apache.doris.common.util.ListComparator;
 import org.apache.doris.common.util.MetaLockUtils;
@@ -1763,7 +1764,8 @@ public class Load {
             LOG.debug("begin to get load job info, size: {}", loadJobs.size());
             PatternMatcher matcher = null;
             if (labelValue != null && !accurateMatch) {
-                matcher = PatternMatcher.createMysqlPattern(labelValue, 
CaseSensibility.LABEL.getCaseSensibility());
+                matcher = PatternMatcherWrapper.createMysqlPattern(labelValue,
+                        CaseSensibility.LABEL.getCaseSensibility());
             }
 
             for (LoadJob loadJob : loadJobs) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/LoadManager.java 
b/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/LoadManager.java
index a6ad094d55..e5bef1b35a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/LoadManager.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/LoadManager.java
@@ -32,6 +32,7 @@ import org.apache.doris.common.DdlException;
 import org.apache.doris.common.LabelAlreadyUsedException;
 import org.apache.doris.common.MetaNotFoundException;
 import org.apache.doris.common.PatternMatcher;
+import org.apache.doris.common.PatternMatcherWrapper;
 import org.apache.doris.common.UserException;
 import org.apache.doris.common.io.Writable;
 import org.apache.doris.common.util.LogBuilder;
@@ -239,7 +240,8 @@ public class LoadManager implements Writable {
             throws AnalysisException {
         String label = stmt.getLabel();
         String state = stmt.getState();
-        PatternMatcher matcher = PatternMatcher.createMysqlPattern(label, 
CaseSensibility.LABEL.getCaseSensibility());
+        PatternMatcher matcher = 
PatternMatcherWrapper.createMysqlPattern(label,
+                CaseSensibility.LABEL.getCaseSensibility());
         matchLoadJobs.addAll(loadJobs.stream().filter(job -> {
             if (stmt.getOperator() != null) {
                 // compound
@@ -482,7 +484,8 @@ public class LoadManager implements Writable {
                 } else {
                     // non-accurate match
                     PatternMatcher matcher =
-                            PatternMatcher.createMysqlPattern(labelValue, 
CaseSensibility.LABEL.getCaseSensibility());
+                            
PatternMatcherWrapper.createMysqlPattern(labelValue,
+                                    
CaseSensibility.LABEL.getCaseSensibility());
                     for (Map.Entry<String, List<LoadJob>> entry : 
labelToLoadJobs.entrySet()) {
                         if (matcher.match(entry.getKey())) {
                             loadJobList.addAll(entry.getValue());
diff --git a/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlColDef.java 
b/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlColDef.java
index 8c2b3614ef..045892830d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlColDef.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlColDef.java
@@ -18,6 +18,7 @@
 package org.apache.doris.mysql;
 
 import org.apache.doris.analysis.Expr;
+import org.apache.doris.catalog.MysqlColType;
 
 // MySQL protocol field used to describe result field info
 public class MysqlColDef {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/CatalogPrivEntry.java
 
b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/CatalogPrivEntry.java
index ca0d47bdae..95ba647c89 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/CatalogPrivEntry.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/CatalogPrivEntry.java
@@ -22,6 +22,7 @@ import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.CaseSensibility;
 import org.apache.doris.common.FeMetaVersion;
 import org.apache.doris.common.PatternMatcher;
+import org.apache.doris.common.PatternMatcherWrapper;
 import org.apache.doris.common.io.Text;
 import org.apache.doris.datasource.InternalCatalog;
 
@@ -53,7 +54,8 @@ public class CatalogPrivEntry extends PrivEntry {
 
     public static CatalogPrivEntry create(String user, String host, String 
ctl, boolean isDomain, PrivBitSet privs)
             throws AnalysisException {
-        PatternMatcher hostPattern = PatternMatcher.createMysqlPattern(host, 
CaseSensibility.HOST.getCaseSensibility());
+        PatternMatcher hostPattern = 
PatternMatcherWrapper.createMysqlPattern(host,
+                CaseSensibility.HOST.getCaseSensibility());
 
         PatternMatcher ctlPattern = createCtlPatternMatcher(ctl);
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/DbPrivEntry.java 
b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/DbPrivEntry.java
index 826bbe2a98..b66792a739 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/DbPrivEntry.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/DbPrivEntry.java
@@ -22,6 +22,7 @@ import org.apache.doris.cluster.ClusterNamespace;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.CaseSensibility;
 import org.apache.doris.common.PatternMatcher;
+import org.apache.doris.common.PatternMatcherWrapper;
 import org.apache.doris.common.io.Text;
 
 import java.io.DataInput;
@@ -55,7 +56,8 @@ public class DbPrivEntry extends CatalogPrivEntry {
             String user, String host,
             String ctl, String db,
             boolean isDomain, PrivBitSet privs) throws AnalysisException {
-        PatternMatcher hostPattern = PatternMatcher.createMysqlPattern(host, 
CaseSensibility.HOST.getCaseSensibility());
+        PatternMatcher hostPattern = 
PatternMatcherWrapper.createMysqlPattern(host,
+                CaseSensibility.HOST.getCaseSensibility());
 
         PatternMatcher ctlPattern = PatternMatcher.createFlatPattern(
                 ctl, CaseSensibility.CATALOG.getCaseSensibility(), 
ctl.equals(ANY_CTL));
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/GlobalPrivEntry.java
 
b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/GlobalPrivEntry.java
index 6444d6b8e2..163cc5a7a6 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/GlobalPrivEntry.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/GlobalPrivEntry.java
@@ -21,6 +21,7 @@ import org.apache.doris.analysis.UserIdentity;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.CaseSensibility;
 import org.apache.doris.common.PatternMatcher;
+import org.apache.doris.common.PatternMatcherWrapper;
 import org.apache.doris.common.io.Text;
 
 import org.apache.logging.log4j.LogManager;
@@ -52,7 +53,8 @@ public class GlobalPrivEntry extends PrivEntry {
 
     public static GlobalPrivEntry create(String host, String user, boolean 
isDomain, byte[] password, PrivBitSet privs)
             throws AnalysisException {
-        PatternMatcher hostPattern = PatternMatcher.createMysqlPattern(host, 
CaseSensibility.HOST.getCaseSensibility());
+        PatternMatcher hostPattern = 
PatternMatcherWrapper.createMysqlPattern(host,
+                CaseSensibility.HOST.getCaseSensibility());
         PatternMatcher userPattern = PatternMatcher.createFlatPattern(user, 
CaseSensibility.USER.getCaseSensibility());
         return new GlobalPrivEntry(hostPattern, host, userPattern, user, 
isDomain, password, privs);
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/PrivEntry.java 
b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/PrivEntry.java
index 8f59a59777..022180d37c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/PrivEntry.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/PrivEntry.java
@@ -18,9 +18,9 @@
 package org.apache.doris.mysql.privilege;
 
 import org.apache.doris.analysis.UserIdentity;
-import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.CaseSensibility;
 import org.apache.doris.common.PatternMatcher;
+import org.apache.doris.common.PatternMatcherException;
 import org.apache.doris.common.io.Text;
 import org.apache.doris.common.io.Writable;
 
@@ -227,7 +227,7 @@ public abstract class PrivEntry implements 
Comparable<PrivEntry>, Writable {
         origHost = Text.readString(in);
         try {
             hostPattern = PatternMatcher.createMysqlPattern(origHost, 
CaseSensibility.HOST.getCaseSensibility());
-        } catch (AnalysisException e) {
+        } catch (PatternMatcherException e) {
             throw new IOException(e);
         }
         isAnyHost = origHost.equals(ANY_HOST);
@@ -235,7 +235,7 @@ public abstract class PrivEntry implements 
Comparable<PrivEntry>, Writable {
         origUser = Text.readString(in);
         try {
             userPattern = PatternMatcher.createMysqlPattern(origUser, 
CaseSensibility.USER.getCaseSensibility());
-        } catch (AnalysisException e) {
+        } catch (PatternMatcherException e) {
             throw new IOException(e);
         }
         isAnyUser = origUser.equals(ANY_USER);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/ResourcePrivEntry.java
 
b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/ResourcePrivEntry.java
index 3e62b8ef91..f7c393ed78 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/ResourcePrivEntry.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/ResourcePrivEntry.java
@@ -20,6 +20,8 @@ package org.apache.doris.mysql.privilege;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.CaseSensibility;
 import org.apache.doris.common.PatternMatcher;
+import org.apache.doris.common.PatternMatcherException;
+import org.apache.doris.common.PatternMatcherWrapper;
 import org.apache.doris.common.io.Text;
 
 import java.io.DataInput;
@@ -49,11 +51,13 @@ public class ResourcePrivEntry extends PrivEntry {
     public static ResourcePrivEntry create(String host, String resourceName,
             String user, boolean isDomain, PrivBitSet privs)
             throws AnalysisException {
-        PatternMatcher hostPattern = PatternMatcher.createMysqlPattern(host, 
CaseSensibility.HOST.getCaseSensibility());
-        PatternMatcher resourcePattern = PatternMatcher.createMysqlPattern(
+        PatternMatcher hostPattern = 
PatternMatcherWrapper.createMysqlPattern(host,
+                CaseSensibility.HOST.getCaseSensibility());
+        PatternMatcher resourcePattern = 
PatternMatcherWrapper.createMysqlPattern(
                 resourceName.equals(ANY_RESOURCE) ? "%" : resourceName,
                 CaseSensibility.RESOURCE.getCaseSensibility());
-        PatternMatcher userPattern = PatternMatcher.createMysqlPattern(user, 
CaseSensibility.USER.getCaseSensibility());
+        PatternMatcher userPattern = 
PatternMatcherWrapper.createMysqlPattern(user,
+                CaseSensibility.USER.getCaseSensibility());
         if (privs.containsNodePriv() || privs.containsDbTablePriv()) {
             throw new AnalysisException("Resource privilege can not contains 
node or db table privileges: " + privs);
         }
@@ -130,7 +134,7 @@ public class ResourcePrivEntry extends PrivEntry {
         try {
             resourcePattern = PatternMatcher.createMysqlPattern(origResource,
                     CaseSensibility.RESOURCE.getCaseSensibility());
-        } catch (AnalysisException e) {
+        } catch (PatternMatcherException e) {
             throw new IOException(e);
         }
         isAnyResource = origResource.equals(ANY_RESOURCE);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/TablePrivEntry.java 
b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/TablePrivEntry.java
index 7304d31922..165e531185 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/TablePrivEntry.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/TablePrivEntry.java
@@ -20,6 +20,8 @@ package org.apache.doris.mysql.privilege;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.CaseSensibility;
 import org.apache.doris.common.PatternMatcher;
+import org.apache.doris.common.PatternMatcherException;
+import org.apache.doris.common.PatternMatcherWrapper;
 import org.apache.doris.common.io.Text;
 
 import java.io.DataInput;
@@ -53,7 +55,8 @@ public class TablePrivEntry extends DbPrivEntry {
     public static TablePrivEntry create(String user, String host,
             String ctl, String db, String tbl,
             boolean isDomain, PrivBitSet privs) throws AnalysisException {
-        PatternMatcher hostPattern = PatternMatcher.createMysqlPattern(host, 
CaseSensibility.HOST.getCaseSensibility());
+        PatternMatcher hostPattern = 
PatternMatcherWrapper.createMysqlPattern(host,
+                CaseSensibility.HOST.getCaseSensibility());
         PatternMatcher dbPattern = PatternMatcher.createFlatPattern(
                 db, CaseSensibility.DATABASE.getCaseSensibility(), 
db.equals(ANY_DB));
         PatternMatcher userPattern = PatternMatcher.createFlatPattern(user, 
CaseSensibility.USER.getCaseSensibility());
@@ -136,7 +139,7 @@ public class TablePrivEntry extends DbPrivEntry {
         origTbl = Text.readString(in);
         try {
             tblPattern = PatternMatcher.createMysqlPattern(origTbl, 
CaseSensibility.TABLE.getCaseSensibility());
-        } catch (AnalysisException e) {
+        } catch (PatternMatcherException e) {
             throw new IOException(e);
         }
         isAnyTbl = origTbl.equals(ANY_TBL);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
index a56dd95174..a3230949b4 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
@@ -144,6 +144,7 @@ import org.apache.doris.common.MarkedCountDownLatch;
 import org.apache.doris.common.MetaNotFoundException;
 import org.apache.doris.common.Pair;
 import org.apache.doris.common.PatternMatcher;
+import org.apache.doris.common.PatternMatcherWrapper;
 import org.apache.doris.common.proc.BackendsProcDir;
 import org.apache.doris.common.proc.FrontendsProcNode;
 import org.apache.doris.common.proc.LoadProcDir;
@@ -697,7 +698,7 @@ public class ShowExecutor {
         List<String> dbNames = catalogIf.getDbNames();
         PatternMatcher matcher = null;
         if (showDbStmt.getPattern() != null) {
-            matcher = 
PatternMatcher.createMysqlPattern(showDbStmt.getPattern(),
+            matcher = 
PatternMatcherWrapper.createMysqlPattern(showDbStmt.getPattern(),
                     CaseSensibility.DATABASE.getCaseSensibility());
         }
         Set<String> dbNameSet = Sets.newTreeSet();
@@ -732,7 +733,7 @@ public class ShowExecutor {
                 .getDbOrAnalysisException(showTableStmt.getDb());
         PatternMatcher matcher = null;
         if (showTableStmt.getPattern() != null) {
-            matcher = 
PatternMatcher.createMysqlPattern(showTableStmt.getPattern(),
+            matcher = 
PatternMatcherWrapper.createMysqlPattern(showTableStmt.getPattern(),
                     CaseSensibility.TABLE.getCaseSensibility());
         }
         for (TableIf tbl : db.getTables()) {
@@ -776,7 +777,7 @@ public class ShowExecutor {
         if (db != null) {
             PatternMatcher matcher = null;
             if (showStmt.getPattern() != null) {
-                matcher = 
PatternMatcher.createMysqlPattern(showStmt.getPattern(),
+                matcher = 
PatternMatcherWrapper.createMysqlPattern(showStmt.getPattern(),
                         CaseSensibility.TABLE.getCaseSensibility());
             }
             for (TableIf table : db.getTables()) {
@@ -849,7 +850,7 @@ public class ShowExecutor {
         ShowVariablesStmt showStmt = (ShowVariablesStmt) stmt;
         PatternMatcher matcher = null;
         if (showStmt.getPattern() != null) {
-            matcher = PatternMatcher.createMysqlPattern(showStmt.getPattern(),
+            matcher = 
PatternMatcherWrapper.createMysqlPattern(showStmt.getPattern(),
                     CaseSensibility.VARIABLES.getCaseSensibility());
         }
         List<List<String>> rows = VariableMgr.dump(showStmt.getType(), 
ctx.getSessionVariable(), matcher);
@@ -930,7 +931,7 @@ public class ShowExecutor {
         TableIf table = db.getTableOrAnalysisException(showStmt.getTable());
         PatternMatcher matcher = null;
         if (showStmt.getPattern() != null) {
-            matcher = PatternMatcher.createMysqlPattern(showStmt.getPattern(),
+            matcher = 
PatternMatcherWrapper.createMysqlPattern(showStmt.getPattern(),
                     CaseSensibility.COLUMN.getCaseSensibility());
         }
         table.readLock();
@@ -1312,7 +1313,7 @@ public class ShowExecutor {
         try {
             PatternMatcher matcher = null;
             if (showRoutineLoadStmt.getPattern() != null) {
-                matcher = 
PatternMatcher.createMysqlPattern(showRoutineLoadStmt.getPattern(),
+                matcher = 
PatternMatcherWrapper.createMysqlPattern(showRoutineLoadStmt.getPattern(),
                         CaseSensibility.ROUTINE_LOAD.getCaseSensibility());
             }
             routineLoadJobList = Env.getCurrentEnv().getRoutineLoadManager()
@@ -1868,7 +1869,7 @@ public class ShowExecutor {
 
         PatternMatcher matcher = null;
         if (showStmt.getPattern() != null) {
-            matcher = PatternMatcher.createMysqlPattern(showStmt.getPattern(),
+            matcher = 
PatternMatcherWrapper.createMysqlPattern(showStmt.getPattern(),
                     CaseSensibility.CONFIG.getCaseSensibility());
         }
         results = ConfigBase.getConfigInfo(matcher);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java 
b/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
index 40b0dc9b8e..0d90cc9825 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
@@ -41,6 +41,7 @@ import org.apache.doris.common.DuplicatedRequestException;
 import org.apache.doris.common.LabelAlreadyUsedException;
 import org.apache.doris.common.MetaNotFoundException;
 import org.apache.doris.common.PatternMatcher;
+import org.apache.doris.common.PatternMatcherException;
 import org.apache.doris.common.ThriftServerContext;
 import org.apache.doris.common.ThriftServerEventProcessor;
 import org.apache.doris.common.UserException;
@@ -179,7 +180,7 @@ public class FrontendServiceImpl implements 
FrontendService.Iface {
             try {
                 matcher = 
PatternMatcher.createMysqlPattern(params.getPattern(),
                         CaseSensibility.DATABASE.getCaseSensibility());
-            } catch (AnalysisException e) {
+            } catch (PatternMatcherException e) {
                 throw new TException("Pattern is in bad format: " + 
params.getPattern());
             }
         }
@@ -233,7 +234,7 @@ public class FrontendServiceImpl implements 
FrontendService.Iface {
             try {
                 matcher = 
PatternMatcher.createMysqlPattern(params.getPattern(),
                         CaseSensibility.TABLE.getCaseSensibility());
-            } catch (AnalysisException e) {
+            } catch (PatternMatcherException e) {
                 throw new TException("Pattern is in bad format: " + 
params.getPattern());
             }
         }
@@ -281,7 +282,7 @@ public class FrontendServiceImpl implements 
FrontendService.Iface {
             try {
                 matcher = 
PatternMatcher.createMysqlPattern(params.getPattern(),
                         CaseSensibility.TABLE.getCaseSensibility());
-            } catch (AnalysisException e) {
+            } catch (PatternMatcherException e) {
                 throw new TException("Pattern is in bad format " + 
params.getPattern());
             }
         }
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/catalog/CreateTableTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/catalog/CreateTableTest.java
index e300d27d64..6b5cfec623 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/catalog/CreateTableTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/catalog/CreateTableTest.java
@@ -22,6 +22,7 @@ import org.apache.doris.analysis.CreateTableStmt;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.Config;
 import org.apache.doris.common.ConfigBase;
+import org.apache.doris.common.ConfigException;
 import org.apache.doris.common.DdlException;
 import org.apache.doris.common.ExceptionChecker;
 import org.apache.doris.qe.ConnectContext;
@@ -99,7 +100,7 @@ public class CreateTableTest {
     }
 
     @Test
-    public void testNormal() throws DdlException {
+    public void testNormal() throws DdlException, ConfigException {
         ExceptionChecker.expectThrowsNoException(
                 () -> createTable("create table test.tbl1\n" + "(k1 int, k2 
int)\n" + "duplicate key(k1)\n"
                         + "distributed by hash(k2) buckets 1\n" + 
"properties('replication_num' = '1'); "));
@@ -241,7 +242,7 @@ public class CreateTableTest {
     }
 
     @Test
-    public void testAbnormal() throws DdlException {
+    public void testAbnormal() throws DdlException, ConfigException {
         ExceptionChecker.expectThrowsWithMsg(DdlException.class,
                 "Floating point type should not be used in distribution 
column",
                 () -> createTable("create table test.atbl1\n" + "(k1 int, k2 
float)\n" + "duplicate key(k1)\n"
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/common/PatternMatcherTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/common/PatternMatcherTest.java
index dd4708cc7d..c7eebf224e 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/common/PatternMatcherTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/common/PatternMatcherTest.java
@@ -108,21 +108,21 @@ public class PatternMatcherTest {
         try {
             PatternMatcher.createMysqlPattern("^abc", false);
             Assert.fail();
-        } catch (AnalysisException e) {
+        } catch (PatternMatcherException e) {
             System.out.println(e.getMessage());
         }
 
         try {
             PatternMatcher.createMysqlPattern("\\\\(abc", false);
             Assert.fail();
-        } catch (AnalysisException e) {
+        } catch (PatternMatcherException e) {
             System.out.println(e.getMessage());
         }
 
         try {
             PatternMatcher.createMysqlPattern("\\*abc", false);
             Assert.fail();
-        } catch (AnalysisException e) {
+        } catch (PatternMatcherException e) {
             System.out.println(e.getMessage());
         }
     }
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/load/routineload/RoutineLoadManagerTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/load/routineload/RoutineLoadManagerTest.java
index 3b5c5d796c..b2b0f5c2d2 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/load/routineload/RoutineLoadManagerTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/load/routineload/RoutineLoadManagerTest.java
@@ -35,6 +35,7 @@ import org.apache.doris.common.InternalErrorCode;
 import org.apache.doris.common.LoadException;
 import org.apache.doris.common.MetaNotFoundException;
 import org.apache.doris.common.PatternMatcher;
+import org.apache.doris.common.PatternMatcherException;
 import org.apache.doris.common.UserException;
 import org.apache.doris.common.jmockit.Deencapsulation;
 import org.apache.doris.datasource.InternalCatalog;
@@ -494,8 +495,9 @@ public class RoutineLoadManagerTest {
 
     @Test
     public void testGetJob(@Injectable RoutineLoadJob routineLoadJob1,
-                           @Injectable RoutineLoadJob routineLoadJob2,
-                           @Injectable RoutineLoadJob routineLoadJob3) throws 
MetaNotFoundException, AnalysisException {
+            @Injectable RoutineLoadJob routineLoadJob2,
+            @Injectable RoutineLoadJob routineLoadJob3) throws 
MetaNotFoundException,
+            PatternMatcherException {
 
         new Expectations() {
             {
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/mysql/MysqlColTypeTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/mysql/MysqlColTypeTest.java
index 114907df95..3a0b70305d 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/mysql/MysqlColTypeTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/mysql/MysqlColTypeTest.java
@@ -17,6 +17,8 @@
 
 package org.apache.doris.mysql;
 
+import org.apache.doris.catalog.MysqlColType;
+
 import org.junit.Assert;
 import org.junit.Test;
 
diff --git a/fe/java-udf/pom.xml b/fe/java-udf/pom.xml
index f65234957f..46e63ec96b 100644
--- a/fe/java-udf/pom.xml
+++ b/fe/java-udf/pom.xml
@@ -40,7 +40,7 @@ under the License.
             <artifactId>fe-common</artifactId>
             <version>${project.version}</version>
         </dependency>
-        <dependency>
+        <!--dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>fe-core</artifactId>
             <version>${project.version}</version>
@@ -54,7 +54,7 @@ under the License.
                     <groupId>commons-httpclient</groupId>
                 </exclusion>
             </exclusions>
-        </dependency>
+        </dependency-->
         <dependency>
             <groupId>org.apache.hive</groupId>
             <artifactId>hive-exec</artifactId>
diff --git a/fe/java-udf/src/main/java/org/apache/doris/udf/JdbcExecutor.java 
b/fe/java-udf/src/main/java/org/apache/doris/udf/JdbcExecutor.java
index b5bbd9cacb..f7273e3718 100644
--- a/fe/java-udf/src/main/java/org/apache/doris/udf/JdbcExecutor.java
+++ b/fe/java-udf/src/main/java/org/apache/doris/udf/JdbcExecutor.java
@@ -17,7 +17,6 @@
 
 package org.apache.doris.udf;
 
-
 import org.apache.doris.thrift.TJdbcExecutorCtorParams;
 import org.apache.doris.thrift.TJdbcOperation;
 
diff --git a/fe/java-udf/src/main/java/org/apache/doris/udf/JniUtil.java 
b/fe/java-udf/src/main/java/org/apache/doris/udf/JniUtil.java
index 6510e9b80f..d949b85586 100644
--- a/fe/java-udf/src/main/java/org/apache/doris/udf/JniUtil.java
+++ b/fe/java-udf/src/main/java/org/apache/doris/udf/JniUtil.java
@@ -17,7 +17,6 @@
 
 package org.apache.doris.udf;
 
-import org.apache.doris.monitor.jvm.JvmPauseMonitor;
 import org.apache.doris.thrift.TGetJMXJsonResponse;
 import org.apache.doris.thrift.TGetJvmMemoryMetricsResponse;
 import org.apache.doris.thrift.TGetJvmThreadsInfoRequest;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/monitor/jvm/JvmPauseMonitor.java 
b/fe/java-udf/src/main/java/org/apache/doris/udf/JvmPauseMonitor.java
similarity index 99%
rename from 
fe/fe-core/src/main/java/org/apache/doris/monitor/jvm/JvmPauseMonitor.java
rename to fe/java-udf/src/main/java/org/apache/doris/udf/JvmPauseMonitor.java
index 9158ece8a8..1129c7ac49 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/monitor/jvm/JvmPauseMonitor.java
+++ b/fe/java-udf/src/main/java/org/apache/doris/udf/JvmPauseMonitor.java
@@ -18,7 +18,7 @@
 // 
https://github.com/apache/impala/blob/branch-4.0.0/fe/src/main/java/org/apache/impala/util/JvmPauseMonitor.java
 // and modified by Doris
 
-package org.apache.doris.monitor.jvm;
+package org.apache.doris.udf;
 
 import com.google.common.base.Joiner;
 import com.google.common.base.Stopwatch;
diff --git a/fe/java-udf/src/main/java/org/apache/doris/udf/UdfUtils.java 
b/fe/java-udf/src/main/java/org/apache/doris/udf/UdfUtils.java
index ce6cad8214..d9fa55bb2f 100644
--- a/fe/java-udf/src/main/java/org/apache/doris/udf/UdfUtils.java
+++ b/fe/java-udf/src/main/java/org/apache/doris/udf/UdfUtils.java
@@ -17,7 +17,6 @@
 
 package org.apache.doris.udf;
 
-import org.apache.doris.analysis.CreateFunctionStmt;
 import org.apache.doris.catalog.PrimitiveType;
 import org.apache.doris.catalog.ScalarType;
 import org.apache.doris.catalog.Type;
@@ -134,9 +133,9 @@ public class UdfUtils {
                 return Sets.newHashSet(JavaUdfDataType.CHAR);
             } else if (c == String.class) {
                 return Sets.newHashSet(JavaUdfDataType.STRING);
-            } else if 
(CreateFunctionStmt.DATE_SUPPORTED_JAVA_TYPE.contains(c)) {
+            } else if (Type.DATE_SUPPORTED_JAVA_TYPE.contains(c)) {
                 return Sets.newHashSet(JavaUdfDataType.DATE, 
JavaUdfDataType.DATEV2);
-            } else if 
(CreateFunctionStmt.DATETIME_SUPPORTED_JAVA_TYPE.contains(c)) {
+            } else if (Type.DATETIME_SUPPORTED_JAVA_TYPE.contains(c)) {
                 return Sets.newHashSet(JavaUdfDataType.DATETIME, 
JavaUdfDataType.DATETIMEV2);
             } else if (c == BigInteger.class) {
                 return Sets.newHashSet(JavaUdfDataType.LARGEINT);
diff --git a/fe/pom.xml b/fe/pom.xml
index 204b0a0f78..819d885944 100644
--- a/fe/pom.xml
+++ b/fe/pom.xml
@@ -243,6 +243,7 @@ under the License.
         <mariadb-java-client.version>3.0.4</mariadb-java-client.version>
         
<dlf-metastore-client-hive2.version>0.2.14</dlf-metastore-client-hive2.version>
         <hadoop.version>2.10.2</hadoop.version>
+        <joda.version>2.8.1</joda.version>
         <revision>1.2-SNAPSHOT</revision>
         <project.scm.id>github</project.scm.id>
     </properties>
@@ -943,6 +944,12 @@ under the License.
                 <artifactId>HikariCP</artifactId>
                 <version>${hikaricp.version}</version>
             </dependency>
+            <!-- https://mvnrepository.com/artifact/joda-time/joda-time -->
+            <dependency>
+                <groupId>joda-time</groupId>
+                <artifactId>joda-time</artifactId>
+                <version>${joda.version}</version>
+            </dependency>
         </dependencies>
     </dependencyManagement>
     <reporting>


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

Reply via email to