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