From d6a2156fcb9551f7df279b56e2a613dc3c1a1ae7 Mon Sep 17 00:00:00 2001 From: chenhao7253886 Date: Wed, 28 Nov 2018 12:25:38 +0800 Subject: [PATCH] Fix stream load failure when target table contains HLL and insert failure when it contains subquery --- .../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 d41e0232c89a5a..c92d95a0887bfa 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 static void rewrite(Analyzer analyzer, StatementBase parsedStmt) 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 e17a3fc0b52ae9..d7469964eb4883 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 @@ private void finalizeParams() throws UserException { } 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