mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-17 13:13:36 +00:00
Correct cardinality in MergeJoin (same as in input)
This commit is contained in:
parent
d266050b23
commit
80466427ad
@ -464,6 +464,12 @@ MergeJoin::MergeJoin(std::shared_ptr<TableJoin> table_join_, const Block & right
|
|||||||
ErrorCodes::PARAMETER_OUT_OF_BOUND);
|
ErrorCodes::PARAMETER_OUT_OF_BOUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (const auto & right_key : table_join->keyNamesRight())
|
||||||
|
{
|
||||||
|
if (right_sample_block.getByName(right_key).type->lowCardinality())
|
||||||
|
lowcard_right_keys.push_back(right_key);
|
||||||
|
}
|
||||||
|
|
||||||
table_join->splitAdditionalColumns(right_sample_block, right_table_keys, right_columns_to_add);
|
table_join->splitAdditionalColumns(right_sample_block, right_table_keys, right_columns_to_add);
|
||||||
JoinCommon::removeLowCardinalityInplace(right_table_keys);
|
JoinCommon::removeLowCardinalityInplace(right_table_keys);
|
||||||
JoinCommon::removeLowCardinalityInplace(right_sample_block, table_join->keyNamesRight());
|
JoinCommon::removeLowCardinalityInplace(right_sample_block, table_join->keyNamesRight());
|
||||||
@ -607,10 +613,18 @@ bool MergeJoin::addJoinedBlock(const Block & src_block, bool)
|
|||||||
|
|
||||||
void MergeJoin::joinBlock(Block & block, ExtraBlockPtr & not_processed)
|
void MergeJoin::joinBlock(Block & block, ExtraBlockPtr & not_processed)
|
||||||
{
|
{
|
||||||
|
Names lowcard_keys = lowcard_right_keys;
|
||||||
if (block)
|
if (block)
|
||||||
{
|
{
|
||||||
JoinCommon::checkTypesOfKeys(block, table_join->keyNamesLeft(), right_table_keys, table_join->keyNamesRight());
|
JoinCommon::checkTypesOfKeys(block, table_join->keyNamesLeft(), right_table_keys, table_join->keyNamesRight());
|
||||||
materializeBlockInplace(block);
|
materializeBlockInplace(block);
|
||||||
|
|
||||||
|
for (const auto & column_name : table_join->keyNamesLeft())
|
||||||
|
{
|
||||||
|
if (block.getByName(column_name).type->lowCardinality())
|
||||||
|
lowcard_keys.push_back(column_name);
|
||||||
|
}
|
||||||
|
|
||||||
JoinCommon::removeLowCardinalityInplace(block, table_join->keyNamesLeft(), false);
|
JoinCommon::removeLowCardinalityInplace(block, table_join->keyNamesLeft(), false);
|
||||||
|
|
||||||
sortBlock(block, left_sort_description);
|
sortBlock(block, left_sort_description);
|
||||||
@ -646,14 +660,20 @@ void MergeJoin::joinBlock(Block & block, ExtraBlockPtr & not_processed)
|
|||||||
if (!not_processed && left_blocks_buffer)
|
if (!not_processed && left_blocks_buffer)
|
||||||
not_processed = std::make_shared<NotProcessed>(NotProcessed{{}, 0, 0, 0});
|
not_processed = std::make_shared<NotProcessed>(NotProcessed{{}, 0, 0, 0});
|
||||||
|
|
||||||
|
for (const auto & column_name : lowcard_keys)
|
||||||
|
{
|
||||||
|
if (!block.has(column_name))
|
||||||
|
continue;
|
||||||
|
if (auto & col = block.getByName(column_name); !col.type->lowCardinality())
|
||||||
|
JoinCommon::changeLowCardinalityInplace(col);
|
||||||
|
}
|
||||||
|
|
||||||
JoinCommon::restoreLowCardinalityInplace(block);
|
JoinCommon::restoreLowCardinalityInplace(block);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <bool in_memory, bool is_all>
|
template <bool in_memory, bool is_all>
|
||||||
void MergeJoin::joinSortedBlock(Block & block, ExtraBlockPtr & not_processed)
|
void MergeJoin::joinSortedBlock(Block & block, ExtraBlockPtr & not_processed)
|
||||||
{
|
{
|
||||||
//std::shared_lock lock(rwlock);
|
|
||||||
|
|
||||||
size_t rows_to_reserve = is_left ? block.rows() : 0;
|
size_t rows_to_reserve = is_left ? block.rows() : 0;
|
||||||
MutableColumns left_columns = makeMutableColumns(block, (is_all ? rows_to_reserve : 0));
|
MutableColumns left_columns = makeMutableColumns(block, (is_all ? rows_to_reserve : 0));
|
||||||
MutableColumns right_columns = makeMutableColumns(right_columns_to_add, rows_to_reserve);
|
MutableColumns right_columns = makeMutableColumns(right_columns_to_add, rows_to_reserve);
|
||||||
@ -702,7 +722,6 @@ void MergeJoin::joinSortedBlock(Block & block, ExtraBlockPtr & not_processed)
|
|||||||
|
|
||||||
left_cursor.nextN(left_key_tail);
|
left_cursor.nextN(left_key_tail);
|
||||||
joinInequalsLeft<is_all>(block, left_columns, right_columns_to_add, right_columns, left_cursor.position(), left_cursor.end());
|
joinInequalsLeft<is_all>(block, left_columns, right_columns_to_add, right_columns, left_cursor.position(), left_cursor.end());
|
||||||
//left_cursor.nextN(left_cursor.end() - left_cursor.position());
|
|
||||||
|
|
||||||
changeLeftColumns(block, std::move(left_columns));
|
changeLeftColumns(block, std::move(left_columns));
|
||||||
addRightColumns(block, std::move(right_columns));
|
addRightColumns(block, std::move(right_columns));
|
||||||
|
@ -103,6 +103,8 @@ private:
|
|||||||
const size_t max_rows_in_right_block;
|
const size_t max_rows_in_right_block;
|
||||||
const size_t max_files_to_merge;
|
const size_t max_files_to_merge;
|
||||||
|
|
||||||
|
Names lowcard_right_keys;
|
||||||
|
|
||||||
void changeLeftColumns(Block & block, MutableColumns && columns) const;
|
void changeLeftColumns(Block & block, MutableColumns && columns) const;
|
||||||
void addRightColumns(Block & block, MutableColumns && columns);
|
void addRightColumns(Block & block, MutableColumns && columns);
|
||||||
|
|
||||||
|
@ -199,3 +199,204 @@ LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N Nullable
|
|||||||
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str Nullable(String) Nullable(String) str str
|
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str Nullable(String) Nullable(String) str str
|
||||||
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N Nullable(String) Nullable(String) str_l str_l
|
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N Nullable(String) Nullable(String) str_l str_l
|
||||||
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_r str_r Nullable(String) Nullable(String) \N \N
|
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||||
|
str LowCardinality(String)
|
||||||
|
LowCardinality(String)
|
||||||
|
str_r LowCardinality(String)
|
||||||
|
str LowCardinality(String)
|
||||||
|
str LowCardinality(String)
|
||||||
|
LowCardinality(String)
|
||||||
|
str_l LowCardinality(String)
|
||||||
|
str_r LowCardinality(String)
|
||||||
|
str LowCardinality(String)
|
||||||
|
str_l LowCardinality(String)
|
||||||
|
LowCardinality(String) LowCardinality(String) str str LowCardinality(String) LowCardinality(String) str str
|
||||||
|
LowCardinality(String) LowCardinality(String) str_r str_r LowCardinality(String) LowCardinality(String)
|
||||||
|
LowCardinality(String) LowCardinality(String) str_r str_r LowCardinality(String) LowCardinality(String)
|
||||||
|
LowCardinality(String) LowCardinality(String) str str LowCardinality(String) LowCardinality(String) str str
|
||||||
|
LowCardinality(String) LowCardinality(String) str str LowCardinality(String) LowCardinality(String) str str
|
||||||
|
LowCardinality(String) LowCardinality(String) str_r str_r LowCardinality(String) LowCardinality(String)
|
||||||
|
LowCardinality(String) LowCardinality(String) LowCardinality(String) LowCardinality(String) str_l str_l
|
||||||
|
LowCardinality(String) LowCardinality(String) str_r str_r LowCardinality(String) LowCardinality(String)
|
||||||
|
LowCardinality(String) LowCardinality(String) str str LowCardinality(String) LowCardinality(String) str str
|
||||||
|
LowCardinality(String) LowCardinality(String) LowCardinality(String) LowCardinality(String) str_l str_l
|
||||||
|
str LowCardinality(String)
|
||||||
|
LowCardinality(String)
|
||||||
|
str_r LowCardinality(String)
|
||||||
|
str LowCardinality(String)
|
||||||
|
str LowCardinality(String)
|
||||||
|
LowCardinality(String)
|
||||||
|
str_l LowCardinality(String)
|
||||||
|
str_r LowCardinality(String)
|
||||||
|
str LowCardinality(String)
|
||||||
|
str_l LowCardinality(String)
|
||||||
|
String String str str LowCardinality(String) LowCardinality(String) str str
|
||||||
|
String String str_r str_r LowCardinality(String) LowCardinality(String)
|
||||||
|
String String str_r str_r LowCardinality(String) LowCardinality(String)
|
||||||
|
String String str str LowCardinality(String) LowCardinality(String) str str
|
||||||
|
String String str str LowCardinality(String) LowCardinality(String) str str
|
||||||
|
String String str_r str_r LowCardinality(String) LowCardinality(String)
|
||||||
|
String String LowCardinality(String) LowCardinality(String) str_l str_l
|
||||||
|
String String str_r str_r LowCardinality(String) LowCardinality(String)
|
||||||
|
String String str str LowCardinality(String) LowCardinality(String) str str
|
||||||
|
String String LowCardinality(String) LowCardinality(String) str_l str_l
|
||||||
|
str String
|
||||||
|
String
|
||||||
|
str_r String
|
||||||
|
str String
|
||||||
|
str String
|
||||||
|
String
|
||||||
|
str_l String
|
||||||
|
str_r String
|
||||||
|
str String
|
||||||
|
str_l String
|
||||||
|
LowCardinality(String) LowCardinality(String) str str String String str str
|
||||||
|
LowCardinality(String) LowCardinality(String) str_r str_r String String
|
||||||
|
LowCardinality(String) LowCardinality(String) str_r str_r String String
|
||||||
|
LowCardinality(String) LowCardinality(String) str str String String str str
|
||||||
|
LowCardinality(String) LowCardinality(String) str str String String str str
|
||||||
|
LowCardinality(String) LowCardinality(String) str_r str_r String String
|
||||||
|
LowCardinality(String) LowCardinality(String) String String str_l str_l
|
||||||
|
LowCardinality(String) LowCardinality(String) str_r str_r String String
|
||||||
|
LowCardinality(String) LowCardinality(String) str str String String str str
|
||||||
|
LowCardinality(String) LowCardinality(String) String String str_l str_l
|
||||||
|
str LowCardinality(String)
|
||||||
|
LowCardinality(String)
|
||||||
|
str_r LowCardinality(String)
|
||||||
|
str LowCardinality(String)
|
||||||
|
str LowCardinality(String)
|
||||||
|
LowCardinality(String)
|
||||||
|
str_l LowCardinality(String)
|
||||||
|
str_r LowCardinality(String)
|
||||||
|
str LowCardinality(String)
|
||||||
|
str_l LowCardinality(String)
|
||||||
|
Nullable(String) Nullable(String) str str LowCardinality(String) LowCardinality(String) str str
|
||||||
|
Nullable(String) Nullable(String) str_r str_r LowCardinality(String) LowCardinality(String)
|
||||||
|
Nullable(String) Nullable(String) str_r str_r LowCardinality(String) LowCardinality(String)
|
||||||
|
Nullable(String) Nullable(String) str str LowCardinality(String) LowCardinality(String) str str
|
||||||
|
Nullable(String) Nullable(String) str str LowCardinality(String) LowCardinality(String) str str
|
||||||
|
Nullable(String) Nullable(String) str_r str_r LowCardinality(String) LowCardinality(String)
|
||||||
|
Nullable(String) Nullable(String) \N \N LowCardinality(String) LowCardinality(String) str_l str_l
|
||||||
|
Nullable(String) Nullable(String) str_r str_r LowCardinality(String) LowCardinality(String)
|
||||||
|
Nullable(String) Nullable(String) str str LowCardinality(String) LowCardinality(String) str str
|
||||||
|
Nullable(String) Nullable(String) \N \N LowCardinality(String) LowCardinality(String) str_l str_l
|
||||||
|
str Nullable(String)
|
||||||
|
\N Nullable(String)
|
||||||
|
str Nullable(String)
|
||||||
|
str_r Nullable(String)
|
||||||
|
str Nullable(String)
|
||||||
|
\N Nullable(String)
|
||||||
|
str_l Nullable(String)
|
||||||
|
str Nullable(String)
|
||||||
|
str_l Nullable(String)
|
||||||
|
str_r Nullable(String)
|
||||||
|
LowCardinality(String) LowCardinality(String) str str Nullable(String) Nullable(String) str str
|
||||||
|
LowCardinality(String) LowCardinality(String) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||||
|
LowCardinality(String) LowCardinality(String) str str Nullable(String) Nullable(String) str str
|
||||||
|
LowCardinality(String) LowCardinality(String) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||||
|
LowCardinality(String) LowCardinality(String) str str Nullable(String) Nullable(String) str str
|
||||||
|
LowCardinality(String) LowCardinality(String) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||||
|
LowCardinality(String) LowCardinality(String) Nullable(String) Nullable(String) str_l str_l
|
||||||
|
LowCardinality(String) LowCardinality(String) str str Nullable(String) Nullable(String) str str
|
||||||
|
LowCardinality(String) LowCardinality(String) Nullable(String) Nullable(String) str_l str_l
|
||||||
|
LowCardinality(String) LowCardinality(String) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||||
|
-- join_use_nulls --
|
||||||
|
str LowCardinality(Nullable(String))
|
||||||
|
\N LowCardinality(Nullable(String))
|
||||||
|
str LowCardinality(Nullable(String))
|
||||||
|
str_r LowCardinality(Nullable(String))
|
||||||
|
str LowCardinality(Nullable(String))
|
||||||
|
\N LowCardinality(Nullable(String))
|
||||||
|
str_l LowCardinality(Nullable(String))
|
||||||
|
str LowCardinality(Nullable(String))
|
||||||
|
str_l LowCardinality(Nullable(String))
|
||||||
|
str_r LowCardinality(Nullable(String))
|
||||||
|
LowCardinality(String) LowCardinality(String) str str LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str
|
||||||
|
LowCardinality(String) LowCardinality(String) str_r str_r LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N
|
||||||
|
LowCardinality(String) LowCardinality(String) str str LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str
|
||||||
|
LowCardinality(String) LowCardinality(String) str_r str_r LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N
|
||||||
|
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str
|
||||||
|
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_r str_r LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N
|
||||||
|
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_l str_l
|
||||||
|
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str
|
||||||
|
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_l str_l
|
||||||
|
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_r str_r LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N
|
||||||
|
str LowCardinality(Nullable(String))
|
||||||
|
\N LowCardinality(Nullable(String))
|
||||||
|
str LowCardinality(Nullable(String))
|
||||||
|
str_r LowCardinality(Nullable(String))
|
||||||
|
str LowCardinality(Nullable(String))
|
||||||
|
\N LowCardinality(Nullable(String))
|
||||||
|
str_l LowCardinality(Nullable(String))
|
||||||
|
str LowCardinality(Nullable(String))
|
||||||
|
str_l LowCardinality(Nullable(String))
|
||||||
|
str_r LowCardinality(Nullable(String))
|
||||||
|
String String str str LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str
|
||||||
|
String String str_r str_r LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N
|
||||||
|
String String str str LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str
|
||||||
|
String String str_r str_r LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N
|
||||||
|
Nullable(String) Nullable(String) str str LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str
|
||||||
|
Nullable(String) Nullable(String) str_r str_r LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N
|
||||||
|
Nullable(String) Nullable(String) \N \N LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_l str_l
|
||||||
|
Nullable(String) Nullable(String) str str LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str
|
||||||
|
Nullable(String) Nullable(String) \N \N LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_l str_l
|
||||||
|
Nullable(String) Nullable(String) str_r str_r LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N
|
||||||
|
str Nullable(String)
|
||||||
|
\N Nullable(String)
|
||||||
|
str Nullable(String)
|
||||||
|
str_r Nullable(String)
|
||||||
|
str Nullable(String)
|
||||||
|
\N Nullable(String)
|
||||||
|
str_l Nullable(String)
|
||||||
|
str Nullable(String)
|
||||||
|
str_l Nullable(String)
|
||||||
|
str_r Nullable(String)
|
||||||
|
LowCardinality(String) LowCardinality(String) str str Nullable(String) Nullable(String) str str
|
||||||
|
LowCardinality(String) LowCardinality(String) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||||
|
LowCardinality(String) LowCardinality(String) str str Nullable(String) Nullable(String) str str
|
||||||
|
LowCardinality(String) LowCardinality(String) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||||
|
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str Nullable(String) Nullable(String) str str
|
||||||
|
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||||
|
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N Nullable(String) Nullable(String) str_l str_l
|
||||||
|
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str Nullable(String) Nullable(String) str str
|
||||||
|
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N Nullable(String) Nullable(String) str_l str_l
|
||||||
|
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||||
|
str LowCardinality(Nullable(String))
|
||||||
|
\N LowCardinality(Nullable(String))
|
||||||
|
str LowCardinality(Nullable(String))
|
||||||
|
str_r LowCardinality(Nullable(String))
|
||||||
|
str LowCardinality(Nullable(String))
|
||||||
|
\N LowCardinality(Nullable(String))
|
||||||
|
str_l LowCardinality(Nullable(String))
|
||||||
|
str LowCardinality(Nullable(String))
|
||||||
|
str_l LowCardinality(Nullable(String))
|
||||||
|
str_r LowCardinality(Nullable(String))
|
||||||
|
Nullable(String) Nullable(String) str str LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str
|
||||||
|
Nullable(String) Nullable(String) str_r str_r LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N
|
||||||
|
Nullable(String) Nullable(String) str str LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str
|
||||||
|
Nullable(String) Nullable(String) str_r str_r LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N
|
||||||
|
Nullable(String) Nullable(String) str str LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str
|
||||||
|
Nullable(String) Nullable(String) str_r str_r LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N
|
||||||
|
Nullable(String) Nullable(String) \N \N LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_l str_l
|
||||||
|
Nullable(String) Nullable(String) str str LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str
|
||||||
|
Nullable(String) Nullable(String) \N \N LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_l str_l
|
||||||
|
Nullable(String) Nullable(String) str_r str_r LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N
|
||||||
|
str Nullable(String)
|
||||||
|
\N Nullable(String)
|
||||||
|
str Nullable(String)
|
||||||
|
str_r Nullable(String)
|
||||||
|
str Nullable(String)
|
||||||
|
\N Nullable(String)
|
||||||
|
str_l Nullable(String)
|
||||||
|
str Nullable(String)
|
||||||
|
str_l Nullable(String)
|
||||||
|
str_r Nullable(String)
|
||||||
|
LowCardinality(String) LowCardinality(String) str str Nullable(String) Nullable(String) str str
|
||||||
|
LowCardinality(String) LowCardinality(String) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||||
|
LowCardinality(String) LowCardinality(String) str str Nullable(String) Nullable(String) str str
|
||||||
|
LowCardinality(String) LowCardinality(String) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||||
|
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str Nullable(String) Nullable(String) str str
|
||||||
|
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||||
|
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N Nullable(String) Nullable(String) str_l str_l
|
||||||
|
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str Nullable(String) Nullable(String) str str
|
||||||
|
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N Nullable(String) Nullable(String) str_l str_l
|
||||||
|
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||||
|
@ -20,6 +20,135 @@ INSERT INTO l VALUES (0, 'str'), (2, 'str_l');
|
|||||||
INSERT INTO nl VALUES (0, 'str'), (2, 'str_l');
|
INSERT INTO nl VALUES (0, 'str'), (2, 'str_l');
|
||||||
INSERT INTO l_lc VALUES (0, 'str'), (2, 'str_l');
|
INSERT INTO l_lc VALUES (0, 'str'), (2, 'str_l');
|
||||||
|
|
||||||
|
|
||||||
|
SET join_use_nulls = 0;
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
SELECT lc, toTypeName(lc) FROM l_lc AS l RIGHT JOIN r_lc AS r USING (x) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM l_lc AS l RIGHT JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM l_lc AS l FULL JOIN r_lc AS r USING (x) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM l_lc AS l FULL JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||||
|
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l RIGHT JOIN r_lc AS r USING (x) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l RIGHT JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l FULL JOIN r_lc AS r USING (x) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l FULL JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
SELECT lc, toTypeName(lc) FROM l_lc AS l RIGHT JOIN r USING (x) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM l_lc AS l RIGHT JOIN r USING (lc) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM l_lc AS l FULL JOIN r USING (x) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM l_lc AS l FULL JOIN r USING (lc) ORDER BY x;
|
||||||
|
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l RIGHT JOIN r USING (x) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l RIGHT JOIN r USING (lc) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l FULL JOIN r USING (x) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l FULL JOIN r USING (lc) ORDER BY x;
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
SELECT lc, toTypeName(lc) FROM l RIGHT JOIN r USING (x) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM l RIGHT JOIN r USING (lc) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM l FULL JOIN r USING (x) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM l FULL JOIN r USING (lc) ORDER BY x;
|
||||||
|
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l RIGHT JOIN r_lc AS r USING (x) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l RIGHT JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l FULL JOIN r_lc AS r USING (x) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l FULL JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
SELECT lc, toTypeName(lc) FROM l_lc RIGHT JOIN nr USING (x) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM l_lc RIGHT JOIN nr USING (lc) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM l_lc FULL JOIN nr USING (x) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM l_lc FULL JOIN nr USING (lc) ORDER BY x;
|
||||||
|
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l RIGHT JOIN nr AS r USING (x) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l RIGHT JOIN nr AS r USING (lc) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l FULL JOIN nr AS r USING (x) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l FULL JOIN nr AS r USING (lc) ORDER BY x;
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
SELECT lc, toTypeName(lc) FROM nl RIGHT JOIN r_lc USING (x) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM nl RIGHT JOIN r_lc USING (lc) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM nl FULL JOIN r_lc USING (x) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM nl FULL JOIN r_lc USING (lc) ORDER BY x;
|
||||||
|
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM nl AS l RIGHT JOIN r_lc AS r USING (x) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM nl AS l RIGHT JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM nl AS l FULL JOIN r_lc AS r USING (x) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM nl AS l FULL JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||||
|
|
||||||
|
SELECT '-- join_use_nulls --';
|
||||||
|
|
||||||
|
SET join_use_nulls = 1;
|
||||||
|
|
||||||
|
SELECT lc, toTypeName(lc) FROM l_lc AS l RIGHT JOIN r_lc AS r USING (x) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM l_lc AS l RIGHT JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM l_lc AS l FULL JOIN r_lc AS r USING (x) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM l_lc AS l FULL JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||||
|
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l RIGHT JOIN r_lc AS r USING (x) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l RIGHT JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l FULL JOIN r_lc AS r USING (x) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l FULL JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
SELECT lc, toTypeName(lc) FROM l_lc AS l RIGHT JOIN r USING (x) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM l_lc AS l RIGHT JOIN r USING (lc) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM l_lc AS l FULL JOIN r USING (x) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM l_lc AS l FULL JOIN r USING (lc) ORDER BY x;
|
||||||
|
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l RIGHT JOIN r USING (x) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l RIGHT JOIN r USING (lc) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l FULL JOIN r USING (x) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l FULL JOIN r USING (lc) ORDER BY x;
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
SELECT lc, toTypeName(lc) FROM l RIGHT JOIN r USING (x) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM l RIGHT JOIN r USING (lc) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM l FULL JOIN r USING (x) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM l FULL JOIN r USING (lc) ORDER BY x;
|
||||||
|
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l RIGHT JOIN r_lc AS r USING (x) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l RIGHT JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l FULL JOIN r_lc AS r USING (x) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l FULL JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
SELECT lc, toTypeName(lc) FROM l_lc RIGHT JOIN nr USING (x) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM l_lc RIGHT JOIN nr USING (lc) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM l_lc FULL JOIN nr USING (x) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM l_lc FULL JOIN nr USING (lc) ORDER BY x;
|
||||||
|
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l RIGHT JOIN nr AS r USING (x) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l RIGHT JOIN nr AS r USING (lc) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l FULL JOIN nr AS r USING (x) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l FULL JOIN nr AS r USING (lc) ORDER BY x;
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
SELECT lc, toTypeName(lc) FROM nl RIGHT JOIN r_lc USING (x) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM nl RIGHT JOIN r_lc USING (lc) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM nl FULL JOIN r_lc USING (x) ORDER BY x;
|
||||||
|
SELECT lc, toTypeName(lc) FROM nl FULL JOIN r_lc USING (lc) ORDER BY x;
|
||||||
|
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM nl AS l RIGHT JOIN r_lc AS r USING (x) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM nl AS l RIGHT JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM nl AS l FULL JOIN r_lc AS r USING (x) ORDER BY x;
|
||||||
|
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM nl AS l FULL JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||||
|
|
||||||
|
set join_algorithm = 'partial_merge';
|
||||||
|
|
||||||
|
SET join_use_nulls = 0;
|
||||||
|
|
||||||
--
|
--
|
||||||
|
|
||||||
SELECT lc, toTypeName(lc) FROM l_lc AS l RIGHT JOIN r_lc AS r USING (x) ORDER BY x;
|
SELECT lc, toTypeName(lc) FROM l_lc AS l RIGHT JOIN r_lc AS r USING (x) ORDER BY x;
|
||||||
|
Loading…
Reference in New Issue
Block a user