You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2022/12/14 06:47:38 UTC
[doris] 01/05: [Fix](Table Valued function) fix the problem that can not catchthe exception thrown by the TableValuedFunctionRef constructor (#14983)
This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch branch-1.2-lts
in repository https://gitbox.apache.org/repos/asf/doris.git
commit 16ba1c53f301dd25f0861f897f54742bd20d9cb6
Author: Tiewei Fang <43...@users.noreply.github.com>
AuthorDate: Tue Dec 13 11:26:04 2022 +0800
[Fix](Table Valued function) fix the problem that can not catchthe exception thrown by the TableValuedFunctionRef constructor (#14983)
Put the generation of TableValuedFunctionIf in the analyze function, instead of the generation in the
TableValuedFunctionRef constructor.
---
.../main/java/org/apache/doris/analysis/SelectStmt.java | 1 +
.../org/apache/doris/analysis/TableValuedFunctionRef.java | 15 +++++++++++----
.../tablefunction/ExternalFileTableValuedFunction.java | 12 ++++++++----
.../doris/tablefunction/HdfsTableValuedFunction.java | 3 +--
.../doris/tablefunction/NumbersTableValuedFunction.java | 11 +++++------
.../apache/doris/tablefunction/S3TableValuedFunction.java | 8 ++++++--
.../apache/doris/tablefunction/TableValuedFunctionIf.java | 5 ++---
7 files changed, 34 insertions(+), 21 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java
index 5e1cb19a73..b715014149 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java
@@ -304,6 +304,7 @@ public class SelectStmt extends QueryStmt {
inlineStmt.getTables(analyzer, expandView, tableMap, parentViewNameSet);
} else if (tblRef instanceof TableValuedFunctionRef) {
TableValuedFunctionRef tblFuncRef = (TableValuedFunctionRef) tblRef;
+ tblFuncRef.analyze(analyzer);
tableMap.put(tblFuncRef.getTableFunction().getTable().getId(),
tblFuncRef.getTableFunction().getTable());
} else {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/TableValuedFunctionRef.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/TableValuedFunctionRef.java
index 328b1819fa..2bbf5e00be 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/TableValuedFunctionRef.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/TableValuedFunctionRef.java
@@ -18,7 +18,7 @@
package org.apache.doris.analysis;
import org.apache.doris.catalog.Table;
-import org.apache.doris.common.UserException;
+import org.apache.doris.common.AnalysisException;
import org.apache.doris.planner.PlanNodeId;
import org.apache.doris.planner.ScanNode;
import org.apache.doris.tablefunction.TableValuedFunctionIf;
@@ -29,10 +29,13 @@ public class TableValuedFunctionRef extends TableRef {
private Table table;
private TableValuedFunctionIf tableFunction;
+ private String funcName;
+ private Map<String, String> params;
- public TableValuedFunctionRef(String funcName, String alias, Map<String, String> params) throws UserException {
+ public TableValuedFunctionRef(String funcName, String alias, Map<String, String> params) {
super(new TableName(null, null, "_table_valued_function_" + funcName), alias);
- this.tableFunction = TableValuedFunctionIf.getTableFunction(funcName, params);
+ this.funcName = funcName;
+ this.params = params;
if (hasExplicitAlias()) {
return;
}
@@ -41,7 +44,10 @@ public class TableValuedFunctionRef extends TableRef {
public TableValuedFunctionRef(TableValuedFunctionRef other) {
super(other);
+ this.funcName = other.funcName;
+ this.params = other.params;
this.tableFunction = other.tableFunction;
+ this.table = other.table;
}
@Override
@@ -60,12 +66,13 @@ public class TableValuedFunctionRef extends TableRef {
* Register this table ref and then analyze the Join clause.
*/
@Override
- public void analyze(Analyzer analyzer) throws UserException {
+ public void analyze(Analyzer analyzer) throws AnalysisException {
if (isAnalyzed) {
return;
}
// Table function could generate a table which will has columns
// Maybe will call be during this process
+ this.tableFunction = TableValuedFunctionIf.getTableFunction(funcName, params);
this.table = tableFunction.getTable();
desc = analyzer.registerTableRef(this);
isAnalyzed = true; // true that we have assigned desc
diff --git a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/ExternalFileTableValuedFunction.java b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/ExternalFileTableValuedFunction.java
index 17b3364294..b7d13f071a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/ExternalFileTableValuedFunction.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/ExternalFileTableValuedFunction.java
@@ -134,13 +134,17 @@ public abstract class ExternalFileTableValuedFunction extends TableValuedFunctio
return "";
}
- protected void parseFile() throws UserException {
+ protected void parseFile() throws AnalysisException {
String path = getFilePath();
BrokerDesc brokerDesc = getBrokerDesc();
- BrokerUtil.parseFile(path, brokerDesc, fileStatuses);
+ try {
+ BrokerUtil.parseFile(path, brokerDesc, fileStatuses);
+ } catch (UserException e) {
+ throw new AnalysisException("parse file failed, path = " + path);
+ }
}
- protected void parseProperties(Map<String, String> validParams) throws UserException {
+ protected void parseProperties(Map<String, String> validParams) throws AnalysisException {
String formatString = validParams.getOrDefault(FORMAT, "").toLowerCase();
switch (formatString) {
case "csv":
@@ -295,7 +299,7 @@ public abstract class ExternalFileTableValuedFunction extends TableValuedFunctio
break;
}
if (firstFile == null) {
- throw new AnalysisException("Can not get first file, please check s3 uri.");
+ throw new AnalysisException("Can not get first file, please check uri.");
}
// set TFileRangeDesc
diff --git a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/HdfsTableValuedFunction.java b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/HdfsTableValuedFunction.java
index 175c9e501a..b555a34e12 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/HdfsTableValuedFunction.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/HdfsTableValuedFunction.java
@@ -21,7 +21,6 @@ import org.apache.doris.analysis.BrokerDesc;
import org.apache.doris.analysis.ExportStmt;
import org.apache.doris.analysis.StorageBackend.StorageType;
import org.apache.doris.common.AnalysisException;
-import org.apache.doris.common.UserException;
import org.apache.doris.common.util.URI;
import org.apache.doris.thrift.TFileType;
@@ -65,7 +64,7 @@ public class HdfsTableValuedFunction extends ExternalFileTableValuedFunction {
private URI hdfsUri;
private String filePath;
- public HdfsTableValuedFunction(Map<String, String> params) throws UserException {
+ public HdfsTableValuedFunction(Map<String, String> params) throws AnalysisException {
Map<String, String> fileFormatParams = new CaseInsensitiveMap();
locationProperties = Maps.newHashMap();
for (String key : params.keySet()) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/NumbersTableValuedFunction.java b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/NumbersTableValuedFunction.java
index 9e1a6ed181..3e0e92b5b5 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/NumbersTableValuedFunction.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/NumbersTableValuedFunction.java
@@ -22,7 +22,6 @@ import org.apache.doris.catalog.Column;
import org.apache.doris.catalog.Env;
import org.apache.doris.catalog.PrimitiveType;
import org.apache.doris.common.AnalysisException;
-import org.apache.doris.common.UserException;
import org.apache.doris.planner.DataGenScanNode;
import org.apache.doris.planner.PlanNodeId;
import org.apache.doris.planner.ScanNode;
@@ -64,9 +63,9 @@ public class NumbersTableValuedFunction extends DataGenTableValuedFunction {
/**
* Constructor.
* @param params params from user
- * @throws UserException exception
+ * @throws AnalysisException exception
*/
- public NumbersTableValuedFunction(Map<String, String> params) throws UserException {
+ public NumbersTableValuedFunction(Map<String, String> params) throws AnalysisException {
Map<String, String> validParams = Maps.newHashMap();
for (String key : params.keySet()) {
if (!PROPERTIES_SET.contains(key.toLowerCase())) {
@@ -78,17 +77,17 @@ public class NumbersTableValuedFunction extends DataGenTableValuedFunction {
try {
tabletsNum = Integer.parseInt(validParams.getOrDefault(BACKEND_NUM, "1"));
} catch (NumberFormatException e) {
- throw new UserException("can not parse `backend_num` param to natural number");
+ throw new AnalysisException("can not parse `backend_num` param to natural number");
}
String numberStr = validParams.get(NUMBER);
if (!Strings.isNullOrEmpty(numberStr)) {
try {
totalNumbers = Long.parseLong(numberStr);
} catch (NumberFormatException e) {
- throw new UserException("can not parse `number` param to natural number");
+ throw new AnalysisException("can not parse `number` param to natural number");
}
} else {
- throw new UserException(
+ throw new AnalysisException(
"can not find `number` param, please specify `number`, like: numbers(\"number\" = \"10\")");
}
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/S3TableValuedFunction.java b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/S3TableValuedFunction.java
index 6af05f3374..e0b4e310f5 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/S3TableValuedFunction.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/S3TableValuedFunction.java
@@ -64,7 +64,7 @@ public class S3TableValuedFunction extends ExternalFileTableValuedFunction {
private String virtualBucket;
private boolean forceVirtualHosted;
- public S3TableValuedFunction(Map<String, String> params) throws UserException {
+ public S3TableValuedFunction(Map<String, String> params) throws AnalysisException {
Map<String, String> validParams = new CaseInsensitiveMap();
for (String key : params.keySet()) {
if (!PROPERTIES_SET.contains(key.toLowerCase()) && !FILE_FORMAT_PROPERTIES.contains(key.toLowerCase())) {
@@ -82,7 +82,11 @@ public class S3TableValuedFunction extends ExternalFileTableValuedFunction {
forceVirtualHosted = !Boolean.valueOf(validParams.get(USE_PATH_STYLE)).booleanValue();
}
- s3uri = S3URI.create(validParams.get(S3_URI), forceVirtualHosted);
+ try {
+ s3uri = S3URI.create(validParams.get(S3_URI), forceVirtualHosted);
+ } catch (UserException e) {
+ throw new AnalysisException("parse s3 uri failed, uri = " + validParams.get(S3_URI));
+ }
if (forceVirtualHosted) {
// s3uri.getVirtualBucket() is: virtualBucket.endpoint, Eg:
// uri: http://my_bucket.cos.ap-beijing.myqcloud.com/file.txt
diff --git a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/TableValuedFunctionIf.java b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/TableValuedFunctionIf.java
index 56167d1b87..862b986e97 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/TableValuedFunctionIf.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/TableValuedFunctionIf.java
@@ -22,7 +22,6 @@ import org.apache.doris.catalog.Column;
import org.apache.doris.catalog.FunctionGenTable;
import org.apache.doris.catalog.TableIf;
import org.apache.doris.common.AnalysisException;
-import org.apache.doris.common.UserException;
import org.apache.doris.planner.PlanNodeId;
import org.apache.doris.planner.ScanNode;
@@ -42,7 +41,7 @@ public abstract class TableValuedFunctionIf {
// All table functions should be registered here
public static TableValuedFunctionIf getTableFunction(String funcName, Map<String, String> params)
- throws UserException {
+ throws AnalysisException {
switch (funcName.toLowerCase()) {
case NumbersTableValuedFunction.NAME:
return new NumbersTableValuedFunction(params);
@@ -51,7 +50,7 @@ public abstract class TableValuedFunctionIf {
case HdfsTableValuedFunction.NAME:
return new HdfsTableValuedFunction(params);
default:
- throw new UserException("Could not find table function " + funcName);
+ throw new AnalysisException("Could not find table function " + funcName);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org