This is an automated email from the ASF dual-hosted git repository.
yangzhg pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new b3c6af0059 [Bugfix](MV) Fixed load negative values into bitmap type
materialized views successfully under non-vectorization (#13719)
b3c6af0059 is described below
commit b3c6af00593eaa1323e455f572d0ba4895e899a1
Author: Zhengguo Yang <[email protected]>
AuthorDate: Thu Nov 3 09:21:38 2022 +0800
[Bugfix](MV) Fixed load negative values into bitmap type materialized views
successfully under non-vectorization (#13719)
* [Bugfix](MV) Fixed load negative values into bitmap type materialized
views successfully under non-vectorization
---
be/src/exprs/bitmap_function.cpp | 2 +-
.../doris/analysis/CreateMaterializedViewStmt.java | 40 ++++++++++++----------
2 files changed, 22 insertions(+), 20 deletions(-)
diff --git a/be/src/exprs/bitmap_function.cpp b/be/src/exprs/bitmap_function.cpp
index 7254dc3a45..1d4fc4df47 100644
--- a/be/src/exprs/bitmap_function.cpp
+++ b/be/src/exprs/bitmap_function.cpp
@@ -190,7 +190,7 @@ StringVal
BitmapFunctions::to_bitmap_with_check(doris_udf::FunctionContext* ctx,
"18446744073709551615 currently, cannot load negative values
to column with"
" to_bitmap MV on it.";
ctx->set_error(ss.str().c_str());
- return serialize(ctx, nullptr);
+ return StringVal::null();
}
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java
index 8651a2eee8..515e18aab1 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java
@@ -137,6 +137,7 @@ public class CreateMaterializedViewStmt extends DdlStmt {
public void analyze(Analyzer analyzer) throws UserException {
super.analyze(analyzer);
FeNameFormat.checkTableName(mvName);
+ rewriteToBitmapWithCheck();
// TODO(ml): The mv name in from clause should pass the analyze
without error.
selectStmt.forbiddenMVRewrite();
selectStmt.analyze(analyzer);
@@ -211,25 +212,6 @@ public class CreateMaterializedViewStmt extends DdlStmt {
throw new AnalysisException(
"The function " + functionName + " must match
pattern:" + mvColumnPattern.toString());
}
-
- // for bitmap_union(to_bitmap(column)) function, we should
check value is not negative
- // in vectorized schema_change mode, so we should rewrite
the function to
- // bitmap_union(to_bitmap_with_check(column))
- if (functionName.equalsIgnoreCase("bitmap_union")) {
- if (functionCallExpr.getChildren().size() == 1
- && functionCallExpr.getChild(0) instanceof
FunctionCallExpr) {
- Expr child = functionCallExpr.getChild(0);
- FunctionCallExpr childFunctionCallExpr =
(FunctionCallExpr) child;
- if
(childFunctionCallExpr.getFnName().getFunction().equalsIgnoreCase("to_bitmap"))
{
- childFunctionCallExpr.setFnName(
- new
FunctionName(childFunctionCallExpr.getFnName().getDb(),
- "to_bitmap_with_check"));
- childFunctionCallExpr.getFn().setName(
- new
FunctionName(childFunctionCallExpr.getFn().getFunctionName().getDb(),
- "to_bitmap_with_check"));
- }
- }
- }
}
// check duplicate column
List<SlotRef> slots = new ArrayList<>();
@@ -504,6 +486,26 @@ public class CreateMaterializedViewStmt extends DdlStmt {
return result;
}
+ // for bitmap_union(to_bitmap(column)) function, we should check value is
not negative
+ // in vectorized schema_change mode, so we should rewrite the function to
+ // bitmap_union(to_bitmap_with_check(column))
+ private void rewriteToBitmapWithCheck() {
+ for (SelectListItem item : selectStmt.getSelectList().getItems()) {
+ if (item.getExpr() instanceof FunctionCallExpr) {
+ String functionName = ((FunctionCallExpr)
item.getExpr()).getFnName().getFunction();
+ if (functionName.equalsIgnoreCase("bitmap_union")) {
+ if (item.getExpr().getChildren().size() == 1
+ && item.getExpr().getChild(0) instanceof
FunctionCallExpr) {
+ FunctionCallExpr childFunctionCallExpr =
(FunctionCallExpr) item.getExpr().getChild(0);
+ if
(childFunctionCallExpr.getFnName().getFunction().equalsIgnoreCase("to_bitmap"))
{
+
childFunctionCallExpr.setFnName(FunctionName.createBuiltinName("to_bitmap_with_check"));
+ }
+ }
+ }
+ }
+ }
+ }
+
public static String mvColumnBuilder(String functionName, String
sourceColumnName) {
return new
StringBuilder().append(MATERIALIZED_VIEW_NAME_PREFIX).append(functionName).append("_")
.append(sourceColumnName).toString();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]