mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-19 16:20:50 +00:00
fix reviews, fix crash in fuzzer
This commit is contained in:
parent
384aedccae
commit
1cc8457268
@ -251,7 +251,7 @@ DataTypePtr findSmallestIntervalSuperType(const DataTypes &types, TypeIndexSet &
|
||||
}
|
||||
|
||||
if (is_higher_interval && min_interval <= IntervalKind::Kind::Week)
|
||||
throw Exception(ErrorCodes::NO_COMMON_TYPE, "Cannot compare intervals {} and {} because the amount of days in month is not determined", types[0]->getName(), types[1]->getName());
|
||||
throw Exception(ErrorCodes::NO_COMMON_TYPE, "Cannot compare intervals {} and {} because the number of days in a month is not fixed", types[0]->getName(), types[1]->getName());
|
||||
|
||||
if (smallest_type)
|
||||
{
|
||||
|
@ -51,6 +51,6 @@ DataTypePtr getLeastSupertypeOrString(const TypeIndexSet & types);
|
||||
DataTypePtr tryGetLeastSupertype(const TypeIndexSet & types);
|
||||
|
||||
/// A vector that shows the conversion rates to the next Interval type starting from NanoSecond
|
||||
static std::vector<int> interval_conversions = {1000, 1000, 1000, 60, 60, 24, 7, 4, 3, 4, 1};
|
||||
static std::vector<int> interval_conversions = {1, 1000, 1000, 1000, 60, 60, 24, 7, 4, 3, 4};
|
||||
|
||||
}
|
||||
|
@ -1586,17 +1586,17 @@ struct ConvertImpl
|
||||
Int64 result_value;
|
||||
|
||||
int from_position = static_cast<int>(from.kind);
|
||||
int to_position = static_cast<int>(to.kind); // Positions of each interval according to granurality map
|
||||
int to_position = static_cast<int>(to.kind); /// Positions of each interval according to granularity map
|
||||
|
||||
if (from_position < to_position)
|
||||
{
|
||||
for (int i = from_position - 1; i <= to_position; ++i)
|
||||
for (int i = from_position; i < to_position; ++i)
|
||||
conversion_factor *= interval_conversions[i];
|
||||
result_value = arguments[0].column->getInt(0) / conversion_factor;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = from_position - 1; i >= to_position; --i)
|
||||
for (int i = from_position; i > to_position; --i)
|
||||
conversion_factor *= interval_conversions[i];
|
||||
result_value = arguments[0].column->getInt(0) * conversion_factor;
|
||||
}
|
||||
@ -2366,9 +2366,8 @@ private:
|
||||
}
|
||||
|
||||
if constexpr (std::is_same_v<ToDataType, DataTypeInterval>)
|
||||
{
|
||||
done = callOnIndexAndDataType<ToDataType>(from_type->getTypeId(), call, BehaviourOnErrorFromString::ConvertDefaultBehaviorTag);
|
||||
}
|
||||
if (WhichDataType(from_type).isInterval())
|
||||
done = callOnIndexAndDataType<ToDataType>(from_type->getTypeId(), call, BehaviourOnErrorFromString::ConvertDefaultBehaviorTag);
|
||||
}
|
||||
|
||||
if (!done)
|
||||
|
@ -1,142 +1,142 @@
|
||||
SELECT('Comparing nanoseconds');
|
||||
SELECT toIntervalNanosecond(500) > toIntervalNanosecond(300);
|
||||
SELECT toIntervalNanosecond(1000) < toIntervalNanosecond(1500);
|
||||
SELECT toIntervalNanosecond(2000) = toIntervalNanosecond(2000);
|
||||
SELECT toIntervalNanosecond(1000) >= toIntervalMicrosecond(1);
|
||||
SELECT toIntervalNanosecond(1000001) > toIntervalMillisecond(1);
|
||||
SELECT toIntervalNanosecond(2000000001) > toIntervalSecond(2);
|
||||
SELECT toIntervalNanosecond(60000000000) = toIntervalMinute(1);
|
||||
SELECT toIntervalNanosecond(7199999999999) < toIntervalHour(2);
|
||||
SELECT toIntervalNanosecond(1) < toIntervalDay(2);
|
||||
SELECT toIntervalNanosecond(5) < toIntervalWeek(1);
|
||||
SELECT INTERVAL 500 NANOSECOND > INTERVAL 300 NANOSECOND;
|
||||
SELECT INTERVAL 1000 NANOSECOND < INTERVAL 1500 NANOSECOND;
|
||||
SELECT INTERVAL 2000 NANOSECOND = INTERVAL 2000 NANOSECOND;
|
||||
SELECT INTERVAL 1000 NANOSECOND >= INTERVAL 1 MICROSECOND;
|
||||
SELECT INTERVAL 1000001 NANOSECOND > INTERVAL 1 MILLISECOND;
|
||||
SELECT INTERVAL 2000000001 NANOSECOND > INTERVAL 2 SECOND;
|
||||
SELECT INTERVAL 60000000000 NANOSECOND = INTERVAL 1 MINUTE;
|
||||
SELECT INTERVAL 7199999999999 NANOSECOND < INTERVAL 2 HOUR;
|
||||
SELECT INTERVAL 1 NANOSECOND < INTERVAL 2 DAY;
|
||||
SELECT INTERVAL 5 NANOSECOND < INTERVAL 1 WEEK;
|
||||
|
||||
SELECT toIntervalNanosecond(500) < toIntervalNanosecond(300);
|
||||
SELECT toIntervalNanosecond(1000) > toIntervalNanosecond(1500);
|
||||
SELECT toIntervalNanosecond(2000) != toIntervalNanosecond(2000);
|
||||
SELECT toIntervalNanosecond(1000) < toIntervalMicrosecond(1);
|
||||
SELECT toIntervalNanosecond(1000001) < toIntervalMillisecond(1);
|
||||
SELECT toIntervalNanosecond(2000000001) < toIntervalSecond(2);
|
||||
SELECT toIntervalNanosecond(60000000000) != toIntervalMinute(1);
|
||||
SELECT toIntervalNanosecond(7199999999999) > toIntervalHour(2);
|
||||
SELECT toIntervalNanosecond(1) > toIntervalDay(2);
|
||||
SELECT toIntervalNanosecond(5) > toIntervalWeek(1);
|
||||
SELECT INTERVAL 500 NANOSECOND < INTERVAL 300 NANOSECOND;
|
||||
SELECT INTERVAL 1000 NANOSECOND > INTERVAL 1500 NANOSECOND;
|
||||
SELECT INTERVAL 2000 NANOSECOND != INTERVAL 2000 NANOSECOND;
|
||||
SELECT INTERVAL 1000 NANOSECOND < INTERVAL 1 MICROSECOND;
|
||||
SELECT INTERVAL 1000001 NANOSECOND < INTERVAL 1 MILLISECOND;
|
||||
SELECT INTERVAL 2000000001 NANOSECOND < INTERVAL 2 SECOND;
|
||||
SELECT INTERVAL 60000000000 NANOSECOND != INTERVAL 1 MINUTE;
|
||||
SELECT INTERVAL 7199999999999 NANOSECOND > INTERVAL 2 HOUR;
|
||||
SELECT INTERVAL 1 NANOSECOND > INTERVAL 2 DAY;
|
||||
SELECT INTERVAL 5 NANOSECOND > INTERVAL 1 WEEK;
|
||||
|
||||
SELECT toIntervalNanosecond(1) < toIntervalMonth(2); -- { serverError NO_COMMON_TYPE }
|
||||
SELECT INTERVAL 1 NANOSECOND < INTERVAL 2 MONTH; -- { serverError NO_COMMON_TYPE }
|
||||
|
||||
SELECT('Comparing microseconds');
|
||||
SELECT toIntervalMicrosecond(1) < toIntervalMicrosecond(999);
|
||||
SELECT toIntervalMicrosecond(1001) > toIntervalMillisecond(1);
|
||||
SELECT toIntervalMicrosecond(2000000) = toIntervalSecond(2);
|
||||
SELECT toIntervalMicrosecond(179999999) < toIntervalMinute(3);
|
||||
SELECT toIntervalMicrosecond(3600000000) = toIntervalHour(1);
|
||||
SELECT toIntervalMicrosecond(36000000000000) > toIntervalDay(2);
|
||||
SELECT toIntervalMicrosecond(1209600000000) = toIntervalWeek(2);
|
||||
SELECT INTERVAL 1 MICROSECOND < INTERVAL 999 MICROSECOND;
|
||||
SELECT INTERVAL 1001 MICROSECOND > INTERVAL 1 MILLISECOND;
|
||||
SELECT INTERVAL 2000000 MICROSECOND = INTERVAL 2 SECOND;
|
||||
SELECT INTERVAL 179999999 MICROSECOND < INTERVAL 3 MINUTE;
|
||||
SELECT INTERVAL 3600000000 MICROSECOND = INTERVAL 1 HOUR;
|
||||
SELECT INTERVAL 36000000000000 MICROSECOND > INTERVAL 2 DAY;
|
||||
SELECT INTERVAL 1209600000000 MICROSECOND = INTERVAL 2 WEEK;
|
||||
|
||||
SELECT toIntervalMicrosecond(1) > toIntervalMicrosecond(999);
|
||||
SELECT toIntervalMicrosecond(1001) < toIntervalMillisecond(1);
|
||||
SELECT toIntervalMicrosecond(2000000) != toIntervalSecond(2);
|
||||
SELECT toIntervalMicrosecond(179999999) > toIntervalMinute(3);
|
||||
SELECT toIntervalMicrosecond(3600000000) != toIntervalHour(1);
|
||||
SELECT toIntervalMicrosecond(36000000000000) < toIntervalDay(2);
|
||||
SELECT toIntervalMicrosecond(1209600000000) != toIntervalWeek(2);
|
||||
SELECT INTERVAL 1 MICROSECOND > INTERVAL 999 MICROSECOND;
|
||||
SELECT INTERVAL 1001 MICROSECOND < INTERVAL 1 MILLISECOND;
|
||||
SELECT INTERVAL 2000000 MICROSECOND != INTERVAL 2 SECOND;
|
||||
SELECT INTERVAL 179999999 MICROSECOND > INTERVAL 3 MINUTE;
|
||||
SELECT INTERVAL 3600000000 MICROSECOND != INTERVAL 1 HOUR;
|
||||
SELECT INTERVAL 36000000000000 MICROSECOND < INTERVAL 2 DAY;
|
||||
SELECT INTERVAL 1209600000000 MICROSECOND != INTERVAL 2 WEEK;
|
||||
|
||||
SELECT toIntervalMicrosecond(36000000000000) < toIntervalQuarter(1); -- { serverError NO_COMMON_TYPE }
|
||||
SELECT INTERVAL 36000000000000 MICROSECOND < INTERVAL 1 QUARTER; -- { serverError NO_COMMON_TYPE }
|
||||
|
||||
SELECT('Comparing milliseconds');
|
||||
SELECT toIntervalMillisecond(2000) > toIntervalMillisecond(2);
|
||||
SELECT toIntervalMillisecond(2000) = toIntervalSecond(2);
|
||||
SELECT toIntervalMillisecond(170000) < toIntervalMinute(3);
|
||||
SELECT toIntervalMillisecond(144000001) > toIntervalHour(40);
|
||||
SELECT toIntervalMillisecond(1728000000) = toIntervalDay(20);
|
||||
SELECT toIntervalMillisecond(1198599999) < toIntervalWeek(2);
|
||||
SELECT INTERVAL 2000 MILLISECOND > INTERVAL 2 MILLISECOND;
|
||||
SELECT INTERVAL 2000 MILLISECOND = INTERVAL 2 SECOND;
|
||||
SELECT INTERVAL 170000 MILLISECOND < INTERVAL 3 MINUTE;
|
||||
SELECT INTERVAL 144000001 MILLISECOND > INTERVAL 40 HOUR;
|
||||
SELECT INTERVAL 1728000000 MILLISECOND = INTERVAL 20 DAY;
|
||||
SELECT INTERVAL 1198599999 MILLISECOND < INTERVAL 2 WEEK;
|
||||
|
||||
SELECT toIntervalMillisecond(2000) < toIntervalMillisecond(2);
|
||||
SELECT toIntervalMillisecond(2000) != toIntervalSecond(2);
|
||||
SELECT toIntervalMillisecond(170000) > toIntervalMinute(3);
|
||||
SELECT toIntervalMillisecond(144000001) < toIntervalHour(40);
|
||||
SELECT toIntervalMillisecond(1728000000) != toIntervalDay(20);
|
||||
SELECT toIntervalMillisecond(1198599999) > toIntervalWeek(2);
|
||||
SELECT INTERVAL 2000 MILLISECOND < INTERVAL 2 MILLISECOND;
|
||||
SELECT INTERVAL 2000 MILLISECOND != INTERVAL 2 SECOND;
|
||||
SELECT INTERVAL 170000 MILLISECOND > INTERVAL 3 MINUTE;
|
||||
SELECT INTERVAL 144000001 MILLISECOND < INTERVAL 40 HOUR;
|
||||
SELECT INTERVAL 1728000000 MILLISECOND != INTERVAL 20 DAY;
|
||||
SELECT INTERVAL 1198599999 MILLISECOND > INTERVAL 2 WEEK;
|
||||
|
||||
SELECT toIntervalMillisecond(36000000000000) < toIntervalYear(1); -- { serverError NO_COMMON_TYPE }
|
||||
SELECT INTERVAL 36000000000000 MILLISECOND < INTERVAL 1 YEAR; -- { serverError NO_COMMON_TYPE }
|
||||
|
||||
SELECT('Comparing seconds');
|
||||
SELECT toIntervalSecond(120) > toIntervalSecond(2);
|
||||
SELECT toIntervalSecond(120) = toIntervalMinute(2);
|
||||
SELECT toIntervalSecond(1) < toIntervalHour(2);
|
||||
SELECT toIntervalSecond(86401) >= toIntervalDay(1);
|
||||
SELECT toIntervalSecond(1209600) = toIntervalWeek(2);
|
||||
SELECT INTERVAL 120 SECOND > INTERVAL 2 SECOND;
|
||||
SELECT INTERVAL 120 SECOND = INTERVAL 2 MINUTE;
|
||||
SELECT INTERVAL 1 SECOND < INTERVAL 2 HOUR;
|
||||
SELECT INTERVAL 86401 SECOND >= INTERVAL 1 DAY;
|
||||
SELECT INTERVAL 1209600 SECOND = INTERVAL 2 WEEK;
|
||||
|
||||
SELECT toIntervalSecond(120) < toIntervalSecond(2);
|
||||
SELECT toIntervalSecond(120) != toIntervalMinute(2);
|
||||
SELECT toIntervalSecond(1) > toIntervalHour(2);
|
||||
SELECT toIntervalSecond(86401) < toIntervalDay(1);
|
||||
SELECT toIntervalSecond(1209600) != toIntervalWeek(2);
|
||||
SELECT INTERVAL 120 SECOND < INTERVAL 2 SECOND;
|
||||
SELECT INTERVAL 120 SECOND != INTERVAL 2 MINUTE;
|
||||
SELECT INTERVAL 1 SECOND > INTERVAL 2 HOUR;
|
||||
SELECT INTERVAL 86401 SECOND < INTERVAL 1 DAY;
|
||||
SELECT INTERVAL 1209600 SECOND != INTERVAL 2 WEEK;
|
||||
|
||||
SELECT toIntervalSecond(36000000000000) < toIntervalMonth(1); -- { serverError NO_COMMON_TYPE }
|
||||
SELECT INTERVAL 36000000000000 SECOND < INTERVAL 1 MONTH; -- { serverError NO_COMMON_TYPE }
|
||||
|
||||
SELECT('Comparing minutes');
|
||||
SELECT toIntervalMinute(1) < toIntervalMinute(59);
|
||||
SELECT toIntervalMinute(1) < toIntervalHour(59);
|
||||
SELECT toIntervalMinute(1440) = toIntervalDay(1);
|
||||
SELECT toIntervalMinute(30241) > toIntervalWeek(3);
|
||||
SELECT INTERVAL 1 MINUTE < INTERVAL 59 MINUTE;
|
||||
SELECT INTERVAL 1 MINUTE < INTERVAL 59 HOUR;
|
||||
SELECT INTERVAL 1440 MINUTE = INTERVAL 1 DAY;
|
||||
SELECT INTERVAL 30241 MINUTE > INTERVAL 3 WEEK;
|
||||
|
||||
SELECT toIntervalMinute(1) > toIntervalMinute(59);
|
||||
SELECT toIntervalMinute(1) > toIntervalHour(59);
|
||||
SELECT toIntervalMinute(1440) != toIntervalDay(1);
|
||||
SELECT toIntervalMinute(30241) < toIntervalWeek(3);
|
||||
SELECT INTERVAL 1 MINUTE > INTERVAL 59 MINUTE;
|
||||
SELECT INTERVAL 1 MINUTE > INTERVAL 59 HOUR;
|
||||
SELECT INTERVAL 1440 MINUTE != INTERVAL 1 DAY;
|
||||
SELECT INTERVAL 30241 MINUTE < INTERVAL 3 WEEK;
|
||||
|
||||
SELECT toIntervalMinute(2) = toIntervalQuarter(120); -- { serverError NO_COMMON_TYPE }
|
||||
SELECT INTERVAL 2 MINUTE = INTERVAL 120 QUARTER; -- { serverError NO_COMMON_TYPE }
|
||||
|
||||
SELECT('Comparing hours');
|
||||
SELECT toIntervalHour(48) > toIntervalHour(2);
|
||||
SELECT toIntervalHour(48) >= toIntervalDay(2);
|
||||
SELECT toIntervalHour(672) = toIntervalWeek(4);
|
||||
SELECT INTERVAL 48 HOUR > INTERVAL 2 HOUR;
|
||||
SELECT INTERVAL 48 HOUR >= INTERVAL 2 DAY;
|
||||
SELECT INTERVAL 672 HOUR = INTERVAL 4 WEEK;
|
||||
|
||||
SELECT toIntervalHour(48) < toIntervalHour(2);
|
||||
SELECT toIntervalHour(48) < toIntervalDay(2);
|
||||
SELECT toIntervalHour(672) != toIntervalWeek(4);
|
||||
SELECT INTERVAL 48 HOUR < INTERVAL 2 HOUR;
|
||||
SELECT INTERVAL 48 HOUR < INTERVAL 2 DAY;
|
||||
SELECT INTERVAL 672 HOUR != INTERVAL 4 WEEK;
|
||||
|
||||
SELECT toIntervalHour(2) < toIntervalYear(1); -- { serverError NO_COMMON_TYPE }
|
||||
SELECT INTERVAL 2 HOUR < INTERVAL 1 YEAR; -- { serverError NO_COMMON_TYPE }
|
||||
|
||||
SELECT('Comparing days');
|
||||
SELECT toIntervalDay(1) < toIntervalDay(23);
|
||||
SELECT toIntervalDay(25) > toIntervalWeek(3);
|
||||
SELECT INTERVAL 1 DAY < INTERVAL 23 DAY;
|
||||
SELECT INTERVAL 25 DAY > INTERVAL 3 WEEK;
|
||||
|
||||
SELECT toIntervalDay(1) > toIntervalDay(23);
|
||||
SELECT toIntervalDay(25) < toIntervalWeek(3);
|
||||
SELECT INTERVAL 1 DAY > INTERVAL 23 DAY;
|
||||
SELECT INTERVAL 25 DAY < INTERVAL 3 WEEK;
|
||||
|
||||
SELECT toIntervalDay(2) = toIntervalMonth(48); -- { serverError NO_COMMON_TYPE }
|
||||
SELECT INTERVAL 2 DAY = INTERVAL 48 MONTH; -- { serverError NO_COMMON_TYPE }
|
||||
|
||||
SELECT('Comparing weeks');
|
||||
SELECT toIntervalWeek(1) < toIntervalWeek(6);
|
||||
SELECT INTERVAL 1 WEEK < INTERVAL 6 WEEK;
|
||||
|
||||
SELECT toIntervalWeek(1) > toIntervalWeek(6);
|
||||
SELECT INTERVAL 1 WEEK > INTERVAL 6 WEEK;
|
||||
|
||||
SELECT toIntervalWeek(124) > toIntervalQuarter(8); -- { serverError NO_COMMON_TYPE }
|
||||
SELECT INTERVAL 124 WEEK > INTERVAL 8 QUARTER; -- { serverError NO_COMMON_TYPE }
|
||||
|
||||
SELECT('Comparing months');
|
||||
SELECT toIntervalMonth(1) < toIntervalMonth(3);
|
||||
SELECT toIntervalMonth(124) > toIntervalQuarter(5);
|
||||
SELECT toIntervalMonth(36) = toIntervalYear(3);
|
||||
SELECT INTERVAL 1 MONTH < INTERVAL 3 MONTH;
|
||||
SELECT INTERVAL 124 MONTH > INTERVAL 5 QUARTER;
|
||||
SELECT INTERVAL 36 MONTH = INTERVAL 3 YEAR;
|
||||
|
||||
SELECT toIntervalMonth(1) > toIntervalMonth(3);
|
||||
SELECT toIntervalMonth(124) < toIntervalQuarter(5);
|
||||
SELECT toIntervalMonth(36) != toIntervalYear(3);
|
||||
SELECT INTERVAL 1 MONTH > INTERVAL 3 MONTH;
|
||||
SELECT INTERVAL 124 MONTH < INTERVAL 5 QUARTER;
|
||||
SELECT INTERVAL 36 MONTH != INTERVAL 3 YEAR;
|
||||
|
||||
SELECT toIntervalMonth(6) = toIntervalMicrosecond(26); -- { serverError NO_COMMON_TYPE }
|
||||
SELECT INTERVAL 6 MONTH = INTERVAL 26 MICROSECOND; -- { serverError NO_COMMON_TYPE }
|
||||
|
||||
SELECT('Comparing quarters');
|
||||
SELECT toIntervalQuarter(5) > toIntervalQuarter(4);
|
||||
SELECT toIntervalQuarter(20) = toIntervalYear(5);
|
||||
SELECT INTERVAL 5 QUARTER > INTERVAL 4 QUARTER;
|
||||
SELECT INTERVAL 20 QUARTER = INTERVAL 5 YEAR;
|
||||
|
||||
SELECT toIntervalQuarter(5) < toIntervalQuarter(4);
|
||||
SELECT toIntervalQuarter(20) != toIntervalYear(5);
|
||||
SELECT INTERVAL 5 QUARTER < INTERVAL 4 QUARTER;
|
||||
SELECT INTERVAL 20 QUARTER != INTERVAL 5 YEAR;
|
||||
|
||||
SELECT toIntervalQuarter(2) = toIntervalNanosecond(6); -- { serverError NO_COMMON_TYPE }
|
||||
SELECT INTERVAL 2 QUARTER = INTERVAL 6 NANOSECOND; -- { serverError NO_COMMON_TYPE }
|
||||
|
||||
SELECT('Comparing years');
|
||||
SELECT toIntervalYear(1) < toIntervalYear(3);
|
||||
SELECT INTERVAL 1 YEAR < INTERVAL 3 YEAR;
|
||||
|
||||
SELECT toIntervalYear(1) > toIntervalYear(3);
|
||||
SELECT INTERVAL 1 YEAR > INTERVAL 3 YEAR;
|
||||
|
||||
SELECT toIntervalYear(2) = toIntervalSecond(8); -- { serverError NO_COMMON_TYPE }
|
||||
SELECT INTERVAL 2 YEAR = INTERVAL 8 SECOND; -- { serverError NO_COMMON_TYPE }
|
Loading…
Reference in New Issue
Block a user