You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by ka...@apache.org on 2020/03/14 14:45:51 UTC
[incubator-doris] branch master updated: [Bug] Fix mapping columns
not exist in the table schema (#3113)
This is an automated email from the ASF dual-hosted git repository.
kangkaisen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
The following commit(s) were added to refs/heads/master by this push:
new 01a4ab0 [Bug] Fix mapping columns not exist in the table schema (#3113)
01a4ab0 is described below
commit 01a4ab01c4d6006cc29d29b02a2bff8feddd363d
Author: wyb <wy...@gmail.com>
AuthorDate: Sat Mar 14 22:45:39 2020 +0800
[Bug] Fix mapping columns not exist in the table schema (#3113)
---
fe/src/main/java/org/apache/doris/load/Load.java | 17 +++++++++++++----
.../apache/doris/planner/StreamLoadScanNodeTest.java | 17 +++++++++++++++++
2 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/fe/src/main/java/org/apache/doris/load/Load.java b/fe/src/main/java/org/apache/doris/load/Load.java
index 5e2bc6f..6cc8a1e 100644
--- a/fe/src/main/java/org/apache/doris/load/Load.java
+++ b/fe/src/main/java/org/apache/doris/load/Load.java
@@ -875,6 +875,19 @@ public class Load {
Map<String, Pair<String, List<String>>> columnToHadoopFunction,
Map<String, Expr> exprsByName, Analyzer analyzer, TupleDescriptor srcTupleDesc,
Map<String, SlotDescriptor> slotDescByName, TBrokerScanRangeParams params) throws UserException {
+ // check mapping column exist in schema
+ // !! all column mappings are in columnExprs !!
+ for (ImportColumnDesc importColumnDesc : columnExprs) {
+ if (importColumnDesc.isColumn()) {
+ continue;
+ }
+
+ String mappingColumnName = importColumnDesc.getColumnName();
+ if (tbl.getColumn(mappingColumnName) == null) {
+ throw new DdlException("Mapping column is not in table. column: " + mappingColumnName);
+ }
+ }
+
// If user does not specify the file field names, generate it by using base schema of table.
// So that the following process can be unified
boolean specifyFileFieldNames = columnExprs.stream().anyMatch(p -> p.isColumn());
@@ -960,10 +973,6 @@ public class Load {
for (Entry<String, Pair<String, List<String>>> entry : columnToHadoopFunction.entrySet()) {
String mappingColumnName = entry.getKey();
Column mappingColumn = tbl.getColumn(mappingColumnName);
- if (mappingColumn == null) {
- throw new DdlException("Mapping column is not in table. column: " + mappingColumnName);
- }
-
Pair<String, List<String>> function = entry.getValue();
try {
DataDescription.validateMappingFunction(function.first, function.second, columnNameMap,
diff --git a/fe/src/test/java/org/apache/doris/planner/StreamLoadScanNodeTest.java b/fe/src/test/java/org/apache/doris/planner/StreamLoadScanNodeTest.java
index 24cbe98..73f0564 100644
--- a/fe/src/test/java/org/apache/doris/planner/StreamLoadScanNodeTest.java
+++ b/fe/src/test/java/org/apache/doris/planner/StreamLoadScanNodeTest.java
@@ -20,7 +20,9 @@ package org.apache.doris.planner;
import org.apache.doris.analysis.Analyzer;
import org.apache.doris.analysis.CastExpr;
import org.apache.doris.analysis.DescriptorTable;
+import org.apache.doris.analysis.FunctionCallExpr;
import org.apache.doris.analysis.FunctionName;
+import org.apache.doris.analysis.ImportColumnDesc;
import org.apache.doris.analysis.SlotDescriptor;
import org.apache.doris.analysis.TupleDescriptor;
import org.apache.doris.catalog.AggregateType;
@@ -31,9 +33,13 @@ import org.apache.doris.catalog.OlapTable;
import org.apache.doris.catalog.PrimitiveType;
import org.apache.doris.catalog.ScalarFunction;
import org.apache.doris.catalog.ScalarType;
+import org.apache.doris.catalog.Table;
+import org.apache.doris.catalog.Table.TableType;
import org.apache.doris.catalog.Type;
import org.apache.doris.common.AnalysisException;
+import org.apache.doris.common.DdlException;
import org.apache.doris.common.UserException;
+import org.apache.doris.load.Load;
import org.apache.doris.qe.ConnectContext;
import org.apache.doris.task.StreamLoadTask;
import org.apache.doris.thrift.TExplainLevel;
@@ -624,4 +630,15 @@ public class StreamLoadScanNodeTest {
TPlanNode planNode = new TPlanNode();
scanNode.toThrift(planNode);
}
+
+ @Test(expected = DdlException.class)
+ public void testLoadInitColumnsMappingColumnNotExist() throws UserException {
+ List<Column> columns = Lists.newArrayList();
+ columns.add(new Column("c1", Type.INT, true, null, false, null, ""));
+ columns.add(new Column("c2", ScalarType.createVarchar(10), true, null, false, null, ""));
+ Table table = new Table(1L, "table0", TableType.OLAP, columns);
+ List<ImportColumnDesc> columnExprs = Lists.newArrayList();
+ columnExprs.add(new ImportColumnDesc("c3", new FunctionCallExpr("func", Lists.newArrayList())));
+ Load.initColumns(table, columnExprs, null, null, null, null, null, null);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org