mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-22 23:52:03 +00:00
Fix parallel replicas in presense of a scalar subquery with a big integer value
This commit is contained in:
parent
20c0347eef
commit
eff69940d0
@ -18,16 +18,37 @@ template <typename T>
|
||||
static inline String formatQuoted(T x)
|
||||
{
|
||||
WriteBufferFromOwnString wb;
|
||||
writeQuoted(x, wb);
|
||||
return wb.str();
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
static inline void writeQuoted(const DecimalField<T> & x, WriteBuffer & buf)
|
||||
{
|
||||
writeChar('\'', buf);
|
||||
writeText(x.getValue(), x.getScale(), buf, {});
|
||||
writeChar('\'', buf);
|
||||
if constexpr (is_decimal_field<T>)
|
||||
{
|
||||
writeChar('\'', wb);
|
||||
writeText(x.getValue(), x.getScale(), wb, {});
|
||||
writeChar('\'', wb);
|
||||
}
|
||||
else if constexpr (is_big_int_v<T>)
|
||||
{
|
||||
writeChar('\'', wb);
|
||||
writeText(x, wb);
|
||||
writeChar('\'', wb);
|
||||
}
|
||||
else
|
||||
{
|
||||
/// While `writeQuoted` sounds like it will always write the value in quotes,
|
||||
/// in fact it means: write according to the rules of the quoted format, like VALUES,
|
||||
/// where strings, dates, date-times, UUID are in quotes, and numbers are not.
|
||||
|
||||
/// That's why we take extra care to put Decimal and big integers inside quotes
|
||||
/// when formatting literals in SQL language,
|
||||
/// because it is different from the quoted formats like VALUES.
|
||||
|
||||
/// In fact, there are no Decimal and big integer literals in SQL,
|
||||
/// but they can appear if we format the query from a modified AST.
|
||||
|
||||
/// We can fix this idiosyncrasy later.
|
||||
|
||||
writeQuoted(x, wb);
|
||||
}
|
||||
return wb.str();
|
||||
}
|
||||
|
||||
/** In contrast to writeFloatText (and writeQuoted),
|
||||
|
@ -0,0 +1 @@
|
||||
6 111111111111111111111111111111111111111
|
@ -0,0 +1,9 @@
|
||||
DROP TABLE IF EXISTS test;
|
||||
CREATE TABLE test (x UInt8) ENGINE = MergeTree ORDER BY x;
|
||||
INSERT INTO test VALUES (1), (2), (3);
|
||||
|
||||
SET allow_experimental_parallel_reading_from_replicas = 1, max_parallel_replicas = 2, cluster_for_parallel_replicas = 'test_cluster_one_shard_three_replicas_localhost', prefer_localhost_replica = 0, parallel_replicas_for_non_replicated_merge_tree = 1;
|
||||
|
||||
WITH (SELECT '111111111111111111111111111111111111111'::UInt128) AS v SELECT sum(x), max(v) FROM test;
|
||||
|
||||
DROP TABLE test;
|
Loading…
Reference in New Issue
Block a user