mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-25 19:20:52 +00:00
Fix generateUUIDv4
This commit is contained in:
parent
617a58b857
commit
a9a885bc43
@ -32,21 +32,22 @@ public:
|
|||||||
|
|
||||||
ColumnPtr executeImpl(const ColumnsWithTypeAndName &, const DataTypePtr &, size_t input_rows_count) const override
|
ColumnPtr executeImpl(const ColumnsWithTypeAndName &, const DataTypePtr &, size_t input_rows_count) const override
|
||||||
{
|
{
|
||||||
auto col_res = ColumnVector<UInt128>::create();
|
auto col_res = ColumnVector<UUID>::create();
|
||||||
typename ColumnVector<UInt128>::Container & vec_to = col_res->getData();
|
typename ColumnVector<UUID>::Container & vec_to = col_res->getData();
|
||||||
|
|
||||||
size_t size = input_rows_count;
|
size_t size = input_rows_count;
|
||||||
vec_to.resize(size);
|
vec_to.resize(size);
|
||||||
|
|
||||||
/// RandImpl is target-dependent and is not the same in different TargetSpecific namespaces.
|
/// RandImpl is target-dependent and is not the same in different TargetSpecific namespaces.
|
||||||
RandImpl::execute(reinterpret_cast<char *>(vec_to.data()), vec_to.size() * sizeof(UInt128));
|
RandImpl::execute(reinterpret_cast<char *>(vec_to.data()), vec_to.size() * sizeof(UUID));
|
||||||
|
|
||||||
for (UInt128 & uuid: vec_to)
|
for (UUID & uuid : vec_to)
|
||||||
{
|
{
|
||||||
/** https://tools.ietf.org/html/rfc4122#section-4.4
|
/// https://tools.ietf.org/html/rfc4122#section-4.4
|
||||||
*/
|
|
||||||
uuid.items[0] = (uuid.items[0] & 0xffffffffffff0fffull) | 0x0000000000004000ull;
|
UInt128 & impl = uuid.toUnderType();
|
||||||
uuid.items[1] = (uuid.items[1] & 0x3fffffffffffffffull) | 0x8000000000000000ull;
|
impl.items[0] = (impl.items[0] & 0xffffffffffff0fffull) | 0x0000000000004000ull;
|
||||||
|
impl.items[1] = (impl.items[1] & 0x3fffffffffffffffull) | 0x8000000000000000ull;
|
||||||
}
|
}
|
||||||
|
|
||||||
return col_res;
|
return col_res;
|
||||||
|
Loading…
Reference in New Issue
Block a user