This commit is contained in:
Alexander Kuzmenkov 2020-11-16 19:09:58 +03:00
parent b1c0089b78
commit b0e660651a
3 changed files with 39 additions and 40 deletions

View File

@ -46,6 +46,7 @@ parser.add_argument('--profile-seconds', type=int, default=0, help='For how many
parser.add_argument('--long', action='store_true', help='Do not skip the tests tagged as long.')
parser.add_argument('--print-queries', action='store_true', help='Print test queries and exit.')
parser.add_argument('--print-settings', action='store_true', help='Print test settings and exit.')
parser.add_argument('--keep-tables', action='store_true', help="Don't drop the created tables after the test.")
args = parser.parse_args()
reportStageEnd('start')
@ -403,10 +404,11 @@ print(f'profile-total\t{profile_total_seconds}')
reportStageEnd('run')
# Run drop queries
drop_queries = substitute_parameters(drop_query_templates)
for conn_index, c in enumerate(all_connections):
for q in drop_queries:
c.execute(q)
print(f'drop\t{conn_index}\t{c.last_query.elapsed}\t{tsv_escape(q)}')
if not args.keep_tables:
drop_queries = substitute_parameters(drop_query_templates)
for conn_index, c in enumerate(all_connections):
for q in drop_queries:
c.execute(q)
print(f'drop\t{conn_index}\t{c.last_query.elapsed}\t{tsv_escape(q)}')
reportStageEnd('drop-2')
reportStageEnd('drop-2')

View File

@ -47,29 +47,23 @@ struct AvgFraction
}
/// Numerator is always casted to Float64 to divide correctly if the denominator is not Float64.
const Float64 num_converted = [scale](Numerator n)
{
(void) scale;
const Float64 num_converted;
if constexpr (IsDecimalNumber<Numerator>)
return DecimalUtils::convertTo<Float64>(n, scale);
else
return static_cast<Float64>(n); /// all other types, including extended integral.
} (numerator);
if constexpr (IsDecimalNumber<Numerator>)
num_converted = DecimalUtils::convertTo<Float64>(numerator, scale);
else
num_converted = static_cast<Float64>(numerator); /// all other types, including extended integral.
const auto denom_converted = [scale](Denominator d) ->
std::conditional_t<DecimalOrExtendedInt<Denominator>, Float64, Denominator>
{
(void) scale;
const std::conditional_t<DecimalOrExtendedInt<Denominator>,
Float64, Denominator>> denom_converted;
if constexpr (IsDecimalNumber<Denominator>)
return DecimalUtils::convertTo<Float64>(d, scale);
else if constexpr (DecimalOrExtendedInt<Denominator>)
/// no way to divide Float64 and extended integral type without an explicit cast.
return static_cast<Float64>(d);
else
return d; /// can divide on float, no cast required.
} (denominator);
if constexpr (IsDecimalNumber<Denominator>)
denom_converted = DecimalUtils::convertTo<Float64>(denominator, scale);
else if constexpr (DecimalOrExtendedInt<Denominator>)
/// no way to divide Float64 and extended integral type without an explicit cast.
denom_converted = static_cast<Float64>(denominator);
else
denom_converted = denominator; /// can divide on float, no cast required.
return num_converted / denom_converted;
}

View File

@ -1,16 +1,19 @@
<test>
<settings>
<allow_experimental_bigint_types>1</allow_experimental_bigint_types>
<max_threads>1</max_threads>
<max_insert_threads>8</max_insert_threads>
</settings>
<preconditions>
<table_exists>hits_100m_single</table_exists>
</preconditions>
<create_query>DROP TABLE IF EXISTS perf_avg</create_query>
<create_query>SET allow_experimental_bigint_types=1</create_query>
<create_query>CREATE TABLE perf_avg(
num UInt64,
num_u Decimal256(75) DEFAULT toDecimal256(num / 400000, 75),
num_f Float64 DEFAULT num / 100
) ENGINE = MergeTree() ORDER BY tuple()
) ENGINE Memory
</create_query>
<fill_query>
@ -19,16 +22,16 @@
FROM hits_100m_single
</fill_query>
<query>SELECT avg(num) FROM perf_avg</query>
<query>SELECT avg(2 * num) FROM perf_avg</query>
<query>SELECT avg(num_u) FROM perf_avg</query>
<query>SELECT avg(num_f) FROM perf_avg</query>
<query>SELECT avgWeighted(num_f, num) FROM perf_avg</query>
<query>SELECT avgWeighted(num_f, num_f) FROM perf_avg</query>
<query>SELECT avgWeighted(num_f, num_u) FROM perf_avg</query>
<query>SELECT avgWeighted(num_u, num_f) FROM perf_avg</query>
<query>SELECT avgWeighted(num_u, num) FROM perf_avg</query>
<query>SELECT avgWeighted(num_u, num_u) FROM perf_avg</query>
<query>SELECT avg(num) FROM perf_avg FORMAT Null</query>
<query>SELECT avg(2 * num) FROM perf_avg FORMAT Null</query>
<query>SELECT avg(num_u) FROM perf_avg FORMAT Null</query>
<query>SELECT avg(num_f) FROM perf_avg FORMAT Null</query>
<query>SELECT avgWeighted(num_f, num) FROM perf_avg FORMAT Null</query>
<query>SELECT avgWeighted(num_f, num_f) FROM perf_avg FORMAT Null</query>
<query>SELECT avgWeighted(num_f, num_u) FROM perf_avg FORMAT Null</query>
<query>SELECT avgWeighted(num_u, num_f) FROM perf_avg FORMAT Null</query>
<query>SELECT avgWeighted(num_u, num) FROM perf_avg FORMAT Null</query>
<query>SELECT avgWeighted(num_u, num_u) FROM perf_avg FORMAT Null</query>
<drop_query>DROP TABLE IF EXISTS perf_avg</drop_query>
</test>