Skip to content

Commit 1c3b725

Browse files
committed
fix(planner): fix nullable column validity not equal
1 parent 288c3bb commit 1c3b725

File tree

3 files changed

+84
-0
lines changed

3 files changed

+84
-0
lines changed

src/query/service/src/pipelines/processors/transforms/hash_join/common.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,10 @@ impl JoinHashTable {
154154
Ok(ConstColumn::new(inner, col.len()).arc())
155155
} else if column.is_nullable() {
156156
let col: &NullableColumn = Series::check_get(column)?;
157+
if col.is_empty() {
158+
let ty = col.data_type();
159+
return ty.create_constant_column(&DataValue::Null, validity.len());
160+
}
157161
// It's possible validity is longer than col.
158162
let diff_len = validity.len() - col.ensure_validity().len();
159163
let mut new_validity = MutableBitmap::with_capacity(validity.len());

tests/logictest/suites/mode/cluster/broadcast_join.test

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,5 +469,45 @@ drop table z0;
469469
statement ok
470470
drop table z1;
471471

472+
statement ok
473+
CREATE TABLE t0(c0BOOLEAN BOOLEAN NULL DEFAULT(false));
474+
475+
statement ok
476+
CREATE TABLE t1(c0BOOLEAN BOOL NULL, c1FLOAT FLOAT NOT NULL DEFAULT(0.4661566913127899));
477+
478+
statement ok
479+
CREATE TABLE t2(c0VARCHAR VARCHAR NULL, c1FLOAT DOUBLE NULL DEFAULT(0.954969048500061), c2VARCHAR VARCHAR NULL);
480+
481+
statement ok
482+
INSERT INTO t0(c0boolean) VALUES (false), (true);
483+
484+
statement ok
485+
INSERT INTO t0(c0boolean) VALUES (false), (false), (true);
486+
487+
statement ok
488+
INSERT INTO t1(c1float) VALUES (0.43919482827186584);
489+
490+
statement ok
491+
INSERT INTO t1(c1float) VALUES (0.2492278516292572);
492+
493+
statement ok
494+
INSERT INTO t2(c1float) VALUES (0.9702655076980591);
495+
496+
statement ok
497+
INSERT INTO t2(c1float, c2varchar) VALUES (0.5340723991394043, '02'), (0.4661566913127899, '1261837');
498+
499+
statement ok
500+
SELECT t0.c0boolean, t1.c0boolean, t1.c1float FROM t0, t1 RIGHT JOIN t2 ON t1.c0boolean;
501+
502+
503+
statement ok
504+
drop table t0;
505+
506+
statement ok
507+
drop table t1;
508+
509+
statement ok
510+
drop table t2;
511+
472512
statement ok
473513
set prefer_broadcast_join = 0;

tests/logictest/suites/query/join.test

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -476,3 +476,43 @@ drop table z0;
476476
statement ok
477477
drop table z1;
478478

479+
statement ok
480+
CREATE TABLE t0(c0BOOLEAN BOOLEAN NULL DEFAULT(false));
481+
482+
statement ok
483+
CREATE TABLE t1(c0BOOLEAN BOOL NULL, c1FLOAT FLOAT NOT NULL DEFAULT(0.4661566913127899));
484+
485+
statement ok
486+
CREATE TABLE t2(c0VARCHAR VARCHAR NULL, c1FLOAT DOUBLE NULL DEFAULT(0.954969048500061), c2VARCHAR VARCHAR NULL);
487+
488+
statement ok
489+
INSERT INTO t0(c0boolean) VALUES (false), (true);
490+
491+
statement ok
492+
INSERT INTO t0(c0boolean) VALUES (false), (false), (true);
493+
494+
statement ok
495+
INSERT INTO t1(c1float) VALUES (0.43919482827186584);
496+
497+
statement ok
498+
INSERT INTO t1(c1float) VALUES (0.2492278516292572);
499+
500+
statement ok
501+
INSERT INTO t2(c1float) VALUES (0.9702655076980591);
502+
503+
statement ok
504+
INSERT INTO t2(c1float, c2varchar) VALUES (0.5340723991394043, '02'), (0.4661566913127899, '1261837');
505+
506+
statement ok
507+
SELECT t0.c0boolean, t1.c0boolean, t1.c1float FROM t0, t1 RIGHT JOIN t2 ON t1.c0boolean;
508+
509+
510+
statement ok
511+
drop table t0;
512+
513+
statement ok
514+
drop table t1;
515+
516+
statement ok
517+
drop table t2;
518+

0 commit comments

Comments
 (0)