mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-12 09:22:05 +00:00
dbms: fixed error [#METR-12412].
This commit is contained in:
parent
d76bfae57b
commit
0019c0ef57
@ -386,6 +386,10 @@ private:
|
|||||||
throw Exception("Size of offsets doesn't match size of column.", ErrorCodes::SIZES_OF_COLUMNS_DOESNT_MATCH);
|
throw Exception("Size of offsets doesn't match size of column.", ErrorCodes::SIZES_OF_COLUMNS_DOESNT_MATCH);
|
||||||
|
|
||||||
ColumnPtr res = cloneEmpty();
|
ColumnPtr res = cloneEmpty();
|
||||||
|
|
||||||
|
if (0 == col_size)
|
||||||
|
return res;
|
||||||
|
|
||||||
ColumnArray & res_ = typeid_cast<ColumnArray &>(*res);
|
ColumnArray & res_ = typeid_cast<ColumnArray &>(*res);
|
||||||
|
|
||||||
const typename ColumnVector<T>::Container_t & cur_data = typeid_cast<const ColumnVector<T> &>(*data).getData();
|
const typename ColumnVector<T>::Container_t & cur_data = typeid_cast<const ColumnVector<T> &>(*data).getData();
|
||||||
@ -430,6 +434,10 @@ private:
|
|||||||
throw Exception("Size of offsets doesn't match size of column.", ErrorCodes::SIZES_OF_COLUMNS_DOESNT_MATCH);
|
throw Exception("Size of offsets doesn't match size of column.", ErrorCodes::SIZES_OF_COLUMNS_DOESNT_MATCH);
|
||||||
|
|
||||||
ColumnPtr res = cloneEmpty();
|
ColumnPtr res = cloneEmpty();
|
||||||
|
|
||||||
|
if (0 == col_size)
|
||||||
|
return res;
|
||||||
|
|
||||||
ColumnArray & res_ = typeid_cast<ColumnArray &>(*res);
|
ColumnArray & res_ = typeid_cast<ColumnArray &>(*res);
|
||||||
|
|
||||||
const ColumnString & cur_string = typeid_cast<const ColumnString &>(*data);
|
const ColumnString & cur_string = typeid_cast<const ColumnString &>(*data);
|
||||||
|
@ -87,7 +87,8 @@ public:
|
|||||||
if (s != offsets.size())
|
if (s != offsets.size())
|
||||||
throw Exception("Size of offsets doesn't match size of column.", ErrorCodes::SIZES_OF_COLUMNS_DOESNT_MATCH);
|
throw Exception("Size of offsets doesn't match size of column.", ErrorCodes::SIZES_OF_COLUMNS_DOESNT_MATCH);
|
||||||
|
|
||||||
return new ColumnConst<T>(offsets.back(), data, data_type);
|
size_t replicated_size = 0 == s ? 0 : offsets.back();
|
||||||
|
return new ColumnConst<T>(replicated_size, data, data_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t byteSize() const { return sizeof(data) + sizeof(s); }
|
size_t byteSize() const { return sizeof(data) + sizeof(s); }
|
||||||
|
@ -223,6 +223,9 @@ public:
|
|||||||
ColumnFixedString * res_ = new ColumnFixedString(n);
|
ColumnFixedString * res_ = new ColumnFixedString(n);
|
||||||
ColumnPtr res = res_;
|
ColumnPtr res = res_;
|
||||||
|
|
||||||
|
if (0 == col_size)
|
||||||
|
return res;
|
||||||
|
|
||||||
Chars_t & res_chars = res_->chars;
|
Chars_t & res_chars = res_->chars;
|
||||||
res_chars.reserve(n * offsets.back());
|
res_chars.reserve(n * offsets.back());
|
||||||
|
|
||||||
|
@ -354,6 +354,9 @@ public:
|
|||||||
ColumnString * res_ = new ColumnString;
|
ColumnString * res_ = new ColumnString;
|
||||||
ColumnPtr res = res_;
|
ColumnPtr res = res_;
|
||||||
|
|
||||||
|
if (0 == col_size)
|
||||||
|
return res;
|
||||||
|
|
||||||
Chars_t & res_chars = res_->chars;
|
Chars_t & res_chars = res_->chars;
|
||||||
Offsets_t & res_offsets = res_->offsets;
|
Offsets_t & res_offsets = res_->offsets;
|
||||||
res_chars.reserve(chars.size() / col_size * replicate_offsets.back());
|
res_chars.reserve(chars.size() / col_size * replicate_offsets.back());
|
||||||
|
@ -296,6 +296,9 @@ public:
|
|||||||
if (size != offsets.size())
|
if (size != offsets.size())
|
||||||
throw Exception("Size of offsets doesn't match size of column.", ErrorCodes::SIZES_OF_COLUMNS_DOESNT_MATCH);
|
throw Exception("Size of offsets doesn't match size of column.", ErrorCodes::SIZES_OF_COLUMNS_DOESNT_MATCH);
|
||||||
|
|
||||||
|
if (0 == size)
|
||||||
|
return new Self;
|
||||||
|
|
||||||
Self * res_ = new Self;
|
Self * res_ = new Self;
|
||||||
ColumnPtr res = res_;
|
ColumnPtr res = res_;
|
||||||
typename Self::Container_t & res_data = res_->getData();
|
typename Self::Container_t & res_data = res_->getData();
|
||||||
|
@ -70,7 +70,7 @@ public:
|
|||||||
if (s != offsets.size())
|
if (s != offsets.size())
|
||||||
throw Exception("Size of offsets doesn't match size of column.", ErrorCodes::SIZES_OF_COLUMNS_DOESNT_MATCH);
|
throw Exception("Size of offsets doesn't match size of column.", ErrorCodes::SIZES_OF_COLUMNS_DOESNT_MATCH);
|
||||||
|
|
||||||
return cloneDummy(offsets.back());
|
return cloneDummy(s == 0 ? 0 : offsets.back());
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -375,7 +375,7 @@ public:
|
|||||||
prev_offset = new_offset;
|
prev_offset = new_offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (out_offsets.back() != out_vec.size())
|
if (!out_offsets.empty() && out_offsets.back() != out_vec.size())
|
||||||
throw Exception("Column size mismatch (internal logical error)", ErrorCodes::LOGICAL_ERROR);
|
throw Exception("Column size mismatch (internal logical error)", ErrorCodes::LOGICAL_ERROR);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -436,7 +436,7 @@ public:
|
|||||||
prev_offset = new_offset;
|
prev_offset = new_offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (out_offsets.back() != out_vec.size())
|
if (!out_offsets.empty() && out_offsets.back() != out_vec.size())
|
||||||
throw Exception("Column size mismatch (internal logical error)", ErrorCodes::LOGICAL_ERROR);
|
throw Exception("Column size mismatch (internal logical error)", ErrorCodes::LOGICAL_ERROR);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -742,7 +742,7 @@ public:
|
|||||||
}
|
}
|
||||||
out_vec.resize(pos - begin);
|
out_vec.resize(pos - begin);
|
||||||
|
|
||||||
if (out_offsets.back() != out_vec.size())
|
if (!out_offsets.empty() && out_offsets.back() != out_vec.size())
|
||||||
throw Exception("Column size mismatch (internal logical error)", ErrorCodes::LOGICAL_ERROR);
|
throw Exception("Column size mismatch (internal logical error)", ErrorCodes::LOGICAL_ERROR);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -797,7 +797,7 @@ public:
|
|||||||
}
|
}
|
||||||
out_vec.resize(pos - begin);
|
out_vec.resize(pos - begin);
|
||||||
|
|
||||||
if (out_offsets.back() != out_vec.size())
|
if (!out_offsets.empty() && out_offsets.back() != out_vec.size())
|
||||||
throw Exception("Column size mismatch (internal logical error)", ErrorCodes::LOGICAL_ERROR);
|
throw Exception("Column size mismatch (internal logical error)", ErrorCodes::LOGICAL_ERROR);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -0,0 +1,2 @@
|
|||||||
|
[] 1
|
||||||
|
[] 1
|
@ -0,0 +1,2 @@
|
|||||||
|
SELECT arrayFilter(x -> materialize(0), materialize([0])) AS p, arrayAll(y -> arrayExists(x -> y != x, p), p) AS test;
|
||||||
|
SELECT arrayFilter(x -> materialize(0), materialize([''])) AS p, arrayAll(y -> arrayExists(x -> y != x, p), p) AS test;
|
Loading…
Reference in New Issue
Block a user