Skip to content

Commit

Permalink
[BugFix] fix cte output column duplicate (#34904)
Browse files Browse the repository at this point in the history
Signed-off-by: Seaven <seaven_7@qq.com>
  • Loading branch information
Seaven authored Nov 15, 2023
1 parent 1bbb88f commit a2015c1
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -739,7 +739,8 @@ public PlanFragment visitPhysicalOlapScan(OptExpression optExpr, ExecPlan contex

for (PhysicalPartition physicalPartition : partition.getSubPartitions()) {
Map<Long, Integer> tabletId2BucketSeq = Maps.newHashMap();
List<Long> selectTabletIds = scanNode.getPartitionToScanTabletMap().get(physicalPartition.getId());
List<Long> selectTabletIds = scanNode.getPartitionToScanTabletMap()
.get(physicalPartition.getId());
Preconditions.checkState(selectTabletIds != null && !selectTabletIds.isEmpty());
final MaterializedIndex selectedTable = physicalPartition.getIndex(selectedIndexId);
List<Long> allTabletIds = selectedTable.getTabletIdsInOrder();
Expand Down Expand Up @@ -2796,7 +2797,7 @@ public PlanFragment visitPhysicalCTEConsume(OptExpression optExpression, ExecPla
cteFragment.getPlanRoot(), DistributionSpec.DistributionType.SHUFFLE);

exchangeNode.setReceiveColumns(consume.getCteOutputColumnRefMap().values().stream()
.map(ColumnRefOperator::getId).collect(Collectors.toList()));
.map(ColumnRefOperator::getId).distinct().collect(Collectors.toList()));
exchangeNode.setDataPartition(cteFragment.getDataPartition());

exchangeNode.setNumInstances(cteFragment.getPlanRoot().getNumInstances());
Expand Down
29 changes: 29 additions & 0 deletions test/sql/test_subquery/R/test_complex_in
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
-- name: test_same_correlation_col_in
CREATE TABLE `t0` (
`v1` bigint(20) NULL COMMENT "",
`v2` bigint(20) NULL COMMENT "",
`v3` bigint(20) NULL COMMENT "",
`v4` largeint NULL COMMENT "",
`v5` tinyint NULL COMMENT ""
) ENGINE=OLAP
DUPLICATE KEY(`v1`)
COMMENT "OLAP"
DISTRIBUTED BY HASH(`v1`) BUCKETS 3
PROPERTIES (
"replication_num" = "1",
"in_memory" = "false",
"enable_persistent_index" = "false",
"replicated_storage" = "false",
"compression" = "LZ4"
);
-- result:
-- !result
insert into t0 values (1, 1, 1, null, null), (2, 2, 2, null, null);
-- result:
-- !result
select * from t0
where (t0.v2 = 2) or t0.v3 in (select x0.v3 from t0 x0 where t0.v2 = x0.v3);
-- result:
2 2 2 None None
1 1 1 None None
-- !result
24 changes: 24 additions & 0 deletions test/sql/test_subquery/T/test_complex_in
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
-- name: test_same_correlation_col_in
CREATE TABLE `t0` (
`v1` bigint(20) NULL COMMENT "",
`v2` bigint(20) NULL COMMENT "",
`v3` bigint(20) NULL COMMENT "",
`v4` largeint NULL COMMENT "",
`v5` tinyint NULL COMMENT ""
) ENGINE=OLAP
DUPLICATE KEY(`v1`)
COMMENT "OLAP"
DISTRIBUTED BY HASH(`v1`) BUCKETS 3
PROPERTIES (
"replication_num" = "1",
"in_memory" = "false",
"enable_persistent_index" = "false",
"replicated_storage" = "false",
"compression" = "LZ4"
);

insert into t0 values (1, 1, 1, null, null), (2, 2, 2, null, null);


select * from t0
where (t0.v2 = 2) or t0.v3 in (select x0.v3 from t0 x0 where t0.v2 = x0.v3);

0 comments on commit a2015c1

Please sign in to comment.