Skip to content

Commit

Permalink
fix create agg meterialized view make BE exit (#13184)
Browse files Browse the repository at this point in the history
check the order-by columns must be identical to the group-by columns when create agg meterialized view

(cherry picked from commit 3311cf3)
  • Loading branch information
mchades authored and wanpengfei-git committed Nov 19, 2022
1 parent d041248 commit 7d36d91
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -507,7 +507,7 @@ private static MVColumnItem buildMVColumnItem(FunctionCallExpr functionCallExpr,
private static void analyzeOrderByClause(CreateMaterializedViewStmt statement,
SelectRelation selectRelation,
int beginIndexOfAggregation) {
if (!selectRelation.hasOrderByClause()) {
if (!selectRelation.hasOrderByClause() || selectRelation.getGroupBy().size() != selectRelation.getOrderBy().size()) {
supplyOrderColumn(statement);
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import com.starrocks.catalog.FunctionSet;
import com.starrocks.common.FeConstants;
import com.starrocks.server.GlobalStateMgr;
import com.starrocks.sql.ast.CreateMaterializedViewStmt;
import com.starrocks.sql.optimizer.statistics.EmptyStatisticStorage;
import com.starrocks.utframe.StarRocksAssert;
import com.starrocks.utframe.UtFrameUtils;
Expand Down Expand Up @@ -1162,6 +1163,23 @@ public void testCaseWhenAggregate() throws Exception {
starRocksAssert.query(query).explainContains(QUERY_USE_EMPS_MV);
}

@Test
public void testCaseWhenAggWithPartialOrderBy() throws Exception {
String query = "select k6, k7 from all_type_table where k6 = 1 group by k6, k7";

String createMVSQL = "CREATE MATERIALIZED VIEW partial_order_by_mv AS " +
"SELECT k6, k7 FROM all_type_table GROUP BY k6, k7 ORDER BY k6";
CreateMaterializedViewStmt createMaterializedViewStmt =
(CreateMaterializedViewStmt) UtFrameUtils.parseStmtWithNewParser(createMVSQL, starRocksAssert.getCtx());
createMaterializedViewStmt.getMVColumnItemList().forEach(k -> Assert.assertTrue(k.isKey()));

starRocksAssert.withMaterializedView(createMVSQL).query(query).explainContains("rollup: partial_order_by_mv");

String createMVSQL2 = "CREATE MATERIALIZED VIEW order_by_mv AS " +
"SELECT k6, k7 FROM all_type_table GROUP BY k6, k7 ORDER BY k6, k7";
starRocksAssert.withMaterializedView(createMVSQL2).query(query).explainContains("rollup: order_by_mv");
}

@Test
public void testCast() throws Exception {
String createEmpsMVSQL = "create materialized view " + EMPS_MV_NAME + " as select empid, deptno, sum(salary) "
Expand Down

0 comments on commit 7d36d91

Please sign in to comment.