From 22503dff7201860fd3e7382aaac5f8f25cf5330c Mon Sep 17 00:00:00 2001 From: emmymiao87 <522274284@qq.com> Date: Fri, 30 Aug 2019 17:23:32 +0800 Subject: [PATCH] Error check about column which has no default value This commit check the all of parsed column include hadoop function and other function. Otherwise, the load will thrown the "Column has no default value" exception while the column also has been defined by a non-hadoop function. --- .../main/java/org/apache/doris/load/Load.java | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 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 186d8324ca5560..6daeaf87b09e72 100644 --- a/fe/src/main/java/org/apache/doris/load/Load.java +++ b/fe/src/main/java/org/apache/doris/load/Load.java @@ -22,6 +22,8 @@ import org.apache.doris.analysis.ColumnSeparator; import org.apache.doris.analysis.DataDescription; import org.apache.doris.analysis.DeleteStmt; +import org.apache.doris.analysis.Expr; +import org.apache.doris.analysis.ImportColumnDesc; import org.apache.doris.analysis.IsNullPredicate; import org.apache.doris.analysis.LabelName; import org.apache.doris.analysis.LiteralExpr; @@ -677,14 +679,19 @@ public static void checkAndCreateSource(Database db, DataDescription dataDescrip source.setColumnNames(columnNames); // check default value - Map>> assignColumnToFunction = dataDescription.getColumnToHadoopFunction(); + Map>> columnToHadoopFunction = dataDescription.getColumnToHadoopFunction(); + List parsedColumnExprList = dataDescription.getParsedColumnExprList(); + Map parsedColumnExprMap = Maps.newTreeMap(String.CASE_INSENSITIVE_ORDER); + for (ImportColumnDesc importColumnDesc : parsedColumnExprList) { + parsedColumnExprMap.put(importColumnDesc.getColumnName(), importColumnDesc.getExpr()); + } for (Column column : tableSchema) { String columnName = column.getName(); if (columnNames.contains(columnName)) { continue; } - if (assignColumnToFunction != null && assignColumnToFunction.containsKey(columnName)) { + if (parsedColumnExprMap.containsKey(columnName)) { continue; } @@ -692,18 +699,10 @@ public static void checkAndCreateSource(Database db, DataDescription dataDescrip continue; } - if (deleteFlag && !column.isKey()) { - List args = Lists.newArrayList(); - args.add("0"); - Pair> functionPair = new Pair>("default_value", args); - assignColumnToFunction.put(columnName, functionPair); - continue; - } - throw new DdlException("Column has no default value. column: " + columnName); } - // check negative for sum aggreate type + // check negative for sum aggregate type if (dataDescription.isNegative()) { for (Column column : tableSchema) { if (!column.isKey() && column.getAggregationType() != AggregateType.SUM) { @@ -715,7 +714,7 @@ public static void checkAndCreateSource(Database db, DataDescription dataDescrip // check hll for (Column column : tableSchema) { if (column.getDataType() == PrimitiveType.HLL) { - if (assignColumnToFunction != null && !assignColumnToFunction.containsKey(column.getName())) { + if (columnToHadoopFunction != null && !columnToHadoopFunction.containsKey(column.getName())) { throw new DdlException("Hll column is not assigned. column:" + column.getName()); } } @@ -727,9 +726,9 @@ public static void checkAndCreateSource(Database db, DataDescription dataDescrip for (String columnName : columnNames) { columnNameMap.put(columnName, columnName); } - if (assignColumnToFunction != null) { + if (columnToHadoopFunction != null) { columnToFunction = Maps.newHashMap(); - for (Entry>> entry : assignColumnToFunction.entrySet()) { + for (Entry>> entry : columnToHadoopFunction.entrySet()) { String mappingColumnName = entry.getKey(); if (!nameToTableColumn.containsKey(mappingColumnName)) { throw new DdlException("Mapping column is not in table. column: " + mappingColumnName);