Skip to content

Commit

Permalink
Add join keys convertion for nested lowcardinality
Browse files Browse the repository at this point in the history
  • Loading branch information
vdimir committed Nov 7, 2023
1 parent e8e3d4d commit d5dd744
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/Interpreters/JoinUtils.cpp
Expand Up @@ -517,8 +517,8 @@ void addDefaultValues(IColumn & column, const DataTypePtr & type, size_t count)

bool typesEqualUpToNullability(DataTypePtr left_type, DataTypePtr right_type)
{
DataTypePtr left_type_strict = removeNullable(recursiveRemoveLowCardinality(left_type));
DataTypePtr right_type_strict = removeNullable(recursiveRemoveLowCardinality(right_type));
DataTypePtr left_type_strict = removeNullable(removeLowCardinality(left_type));
DataTypePtr right_type_strict = removeNullable(removeLowCardinality(right_type));
return left_type_strict->equals(*right_type_strict);
}

Expand Down
@@ -0,0 +1,4 @@
[0] [0]
[0] [0]
[0] [0]
[0] [0]
@@ -0,0 +1,37 @@


DROP TABLE IF EXISTS test1__fuzz_36;
DROP TABLE IF EXISTS test1__fuzz_38;
DROP TABLE IF EXISTS test1__fuzz_41;

CREATE TABLE test1__fuzz_36 (`pt` Array(Array(LowCardinality(Int256))), `exposure_uv` UInt32) ENGINE = Memory;
CREATE TABLE test1__fuzz_38 (`pt` Array(Array(Int256)), `exposure_uv` UInt32) ENGINE = Memory;
CREATE TABLE test1__fuzz_41 (`pt` Array(Array(Int8)), `exposure_uv` Decimal(76, 39)) ENGINE = Memory;

insert into test1__fuzz_36 select * from generateRandom() limit 10;
insert into test1__fuzz_38 select * from generateRandom() limit 10;
insert into test1__fuzz_41 select * from generateRandom() limit 10;

{% for join_algorithm in ['default','grace_hash','partial_merge','full_sorting_merge'] -%}

SET join_algorithm = '{{ join_algorithm }}';

SELECT *
FROM (SELECT materialize([0] :: Array(LowCardinality(Int64))) as pt) AS m0
LEFT JOIN (SELECT materialize([0] :: Array(Int64)) as pt) AS m2
ON m0.pt = m2.pt
;

SELECT * FROM (
SELECT m0.pt, m0.exposure_uv AS exposure_uv, round(m2.exposure_uv, 10) FROM (SELECT pt, exposure_uv FROM test1__fuzz_36) AS m0
LEFT JOIN (SELECT pt, exposure_uv FROM test1__fuzz_38) AS m1 ON m0.pt = m1.pt LEFT JOIN (SELECT pt, exposure_uv FROM test1__fuzz_41) AS m2
ON m0.pt = m2.pt
) AS c0
ORDER BY exposure_uv ASC NULLS LAST
FORMAT Null SETTINGS join_use_nulls = 1;

{% endfor -%}

DROP TABLE IF EXISTS test1__fuzz_36;
DROP TABLE IF EXISTS test1__fuzz_38;
DROP TABLE IF EXISTS test1__fuzz_41;

0 comments on commit d5dd744

Please sign in to comment.