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