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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]