From 5694bcbd7862b6dc74bbea7f108e5cd26ef40215 Mon Sep 17 00:00:00 2001 From: chenhao <510341142@qq.com> Date: Thu, 29 Nov 2018 15:40:04 +0800 Subject: [PATCH] Fix stream load failure when target table contains HLL and insert failure when it contains subquery (#359) --- .../apache/doris/analysis/StmtRewriter.java | 5 +++++ .../doris/planner/StreamLoadScanNode.java | 19 ++++--------------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/fe/src/main/java/org/apache/doris/analysis/StmtRewriter.java b/fe/src/main/java/org/apache/doris/analysis/StmtRewriter.java index d41e0232c8..c92d95a088 100644 --- a/fe/src/main/java/org/apache/doris/analysis/StmtRewriter.java +++ b/fe/src/main/java/org/apache/doris/analysis/StmtRewriter.java @@ -48,6 +48,11 @@ public class StmtRewriter { QueryStmt analyzedStmt = (QueryStmt) parsedStmt; Preconditions.checkNotNull(analyzedStmt.analyzer); rewriteQueryStatement(analyzedStmt, analyzer); + } else if (parsedStmt instanceof InsertStmt) { + final InsertStmt insertStmt = (InsertStmt)parsedStmt; + final QueryStmt analyzedStmt = (QueryStmt)insertStmt.getQueryStmt(); + Preconditions.checkNotNull(analyzedStmt.analyzer); + rewriteQueryStatement(analyzedStmt, analyzer); } else { throw new AnalysisException("Unsupported statement containing subqueries: " + parsedStmt.toSql()); diff --git a/fe/src/main/java/org/apache/doris/planner/StreamLoadScanNode.java b/fe/src/main/java/org/apache/doris/planner/StreamLoadScanNode.java index e17a3fc0b5..d7469964eb 100644 --- a/fe/src/main/java/org/apache/doris/planner/StreamLoadScanNode.java +++ b/fe/src/main/java/org/apache/doris/planner/StreamLoadScanNode.java @@ -329,24 +329,13 @@ public class StreamLoadScanNode extends ScanNode { } private Expr castToSlot(SlotDescriptor slotDesc, Expr expr) throws UserException { - if (slotDesc.getType().isNull()) { - return expr; - } PrimitiveType dstType = slotDesc.getType().getPrimitiveType(); PrimitiveType srcType = expr.getType().getPrimitiveType(); - if (dstType.isStringType()) { - if (srcType.isStringType()) { - return expr; - } else { - CastExpr castExpr = (CastExpr)expr.castTo(Type.VARCHAR); - return castExpr; - } - } else if (dstType != srcType) { - CastExpr castExpr = (CastExpr)expr.castTo(slotDesc.getType()); - return castExpr; + if (dstType != srcType) { + return expr.castTo(slotDesc.getType()); + } else { + return expr; } - - return expr; } @Override