Skip to content

Commit f54bad7

Browse files
Merge pull request ClickHouse#80327 from ClickHouse/yarik/time-time64-comparison
Time/Time64 comparison
2 parents b611eb9 + 4753c7c commit f54bad7

File tree

3 files changed

+92
-56
lines changed

3 files changed

+92
-56
lines changed

src/Functions/FunctionsComparison.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1328,8 +1328,8 @@ class FunctionComparison : public IFunction
13281328
assert_cast<const DataTypeFixedString &>(*left_type).getN() :
13291329
(right_is_fixed_string ? assert_cast<const DataTypeFixedString &>(*right_type).getN() : 0);
13301330

1331-
bool date_and_datetime = (which_left.idx != which_right.idx) && (which_left.isDate() || which_left.isDate32() || which_left.isDateTime() || which_left.isDateTime64())
1332-
&& (which_right.isDate() || which_right.isDate32() || which_right.isDateTime() || which_right.isDateTime64());
1331+
bool date_and_time_datetime = (which_left.idx != which_right.idx) && (which_left.isDate() || which_left.isDate32() || which_left.isTime() || which_left.isTime64() || which_left.isDateTime() || which_left.isDateTime64())
1332+
&& (which_right.isDate() || which_right.isDate32() || which_right.isTime() || which_right.isTime64() || which_right.isDateTime() || which_right.isDateTime64());
13331333

13341334
/// Interval data types can be compared only when having equal units.
13351335
bool left_is_interval = which_left.isInterval();
@@ -1338,7 +1338,7 @@ class FunctionComparison : public IFunction
13381338
bool types_equal = left_type->equals(*right_type);
13391339

13401340
ColumnPtr res;
1341-
if (left_is_num && right_is_num && !date_and_datetime
1341+
if (left_is_num && right_is_num && !date_and_time_datetime
13421342
&& (!left_is_interval || !right_is_interval || types_equal))
13431343
{
13441344
if (!((res = executeNumLeftType<UInt8>(col_left_untyped, col_right_untyped))
@@ -1388,7 +1388,7 @@ class FunctionComparison : public IFunction
13881388
if ((isColumnedAsDecimal(left_type) || isColumnedAsDecimal(right_type)))
13891389
{
13901390
// Comparing Date/Date32 and DateTime64 requires implicit conversion,
1391-
if (date_and_datetime && (isDateOrDate32(left_type) || isDateOrDate32(right_type)))
1391+
if (date_and_time_datetime && (isDateOrDate32(left_type) || isDateOrDate32(right_type)))
13921392
{
13931393
DataTypePtr common_type = getLeastSupertype(DataTypes{left_type, right_type});
13941394
ColumnPtr c0_converted = castColumn(col_with_type_and_name_left, common_type);
@@ -1398,7 +1398,7 @@ class FunctionComparison : public IFunction
13981398
}
13991399

14001400
/// Check does another data type is comparable to Decimal, includes Int and Float.
1401-
if (!allowDecimalComparison(left_type, right_type) && !date_and_datetime)
1401+
if (!allowDecimalComparison(left_type, right_type) && !date_and_time_datetime)
14021402
throw Exception(
14031403
ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT,
14041404
"No operation {} between {} and {}",
@@ -1419,7 +1419,7 @@ class FunctionComparison : public IFunction
14191419
}
14201420
return executeDecimal<Op, Name>(col_with_type_and_name_left, col_with_type_and_name_right, params.check_decimal_overflow);
14211421
}
1422-
if (date_and_datetime)
1422+
if (date_and_time_datetime)
14231423
{
14241424
DataTypePtr common_type = getLeastSupertype(DataTypes{left_type, right_type});
14251425
ColumnPtr c0_converted = castColumn(col_with_type_and_name_left, common_type);

tests/queries/0_stateless/03365_time_time64_comparison.reference

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,3 +79,39 @@
7979
0
8080
0
8181
1
82+
0
83+
1
84+
0
85+
1
86+
0
87+
0
88+
0
89+
0
90+
1
91+
1
92+
0
93+
0
94+
0
95+
1
96+
0
97+
0
98+
0
99+
1
100+
0
101+
0
102+
0
103+
1
104+
1
105+
1
106+
0
107+
0
108+
0
109+
1
110+
1
111+
1
112+
0
113+
0
114+
0
115+
0
116+
0
117+
0

tests/queries/0_stateless/03365_time_time64_comparison.sql

Lines changed: 50 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -120,53 +120,53 @@ SELECT toTime64(12, 2) == toTime64(12, 3);
120120

121121
-- TIME AND TIME64
122122
-- Both positive
123-
-- SELECT toTime(12) > toTime64(13, 2);
124-
-- SELECT toTime(13) > toTime64(12, 2);
125-
-- SELECT toTime(12) > toTime64(12, 2);
126-
127-
-- SELECT toTime(12) < toTime64(13, 2);
128-
-- SELECT toTime(13) < toTime64(12, 2);
129-
-- SELECT toTime(12) < toTime64(12, 2);
130-
131-
-- SELECT toTime(12) == toTime64(13, 2);
132-
-- SELECT toTime(13) == toTime64(12, 2);
133-
-- SELECT toTime(12) == toTime64(12, 2);
134-
135-
-- -- Both negative
136-
-- SELECT toTime(-12) > toTime64(13, 2);
137-
-- SELECT toTime(-13) > toTime64(-12, 2);
138-
-- SELECT toTime(-12) > toTime64(-12, 2);
139-
140-
-- SELECT toTime(-12) < toTime64(13, 2);
141-
-- SELECT toTime(-13) < toTime64(-12, 2);
142-
-- SELECT toTime(-12) < toTime64(-12, 2);
143-
144-
-- SELECT toTime(-12) == toTime64(13, 2);
145-
-- SELECT toTime(-13) == toTime64(-12, 2);
146-
-- SELECT toTime(-12) == toTime64(-12, 2);
147-
148-
-- -- Left negative
149-
-- SELECT toTime(-12) > toTime64(13, 2);
150-
-- SELECT toTime(-13) > toTime64(12, 2);
151-
-- SELECT toTime(-12) > toTime64(12, 2);
152-
153-
-- SELECT toTime(-12) < toTime64(13, 2);
154-
-- SELECT toTime(-13) < toTime64(12, 2);
155-
-- SELECT toTime(-12) < toTime64(12, 2);
156-
157-
-- SELECT toTime(-12) == toTime64(13, 2);
158-
-- SELECT toTime(-13) == toTime64(12, 2);
159-
-- SELECT toTime(-12) == toTime64(12, 2);
160-
161-
-- -- Right negative
162-
-- SELECT toTime(12) > toTime64(13, 2);
163-
-- SELECT toTime(13) > toTime64(-12, 2);
164-
-- SELECT toTime(12) > toTime64(-12, 2);
165-
166-
-- SELECT toTime(12) < toTime64(13, 2);
167-
-- SELECT toTime(13) < toTime64(-12, 2);
168-
-- SELECT toTime(12) < toTime64(-12, 2);
169-
170-
-- SELECT toTime(12) == toTime64(-13, 2);
171-
-- SELECT toTime(13) == toTime64(-12, 2);
172-
-- SELECT toTime(12) == toTime64(-12, 2);
123+
SELECT toTime(12) > toTime64(13, 2);
124+
SELECT toTime(13) > toTime64(12, 2);
125+
SELECT toTime(12) > toTime64(12, 2);
126+
127+
SELECT toTime(12) < toTime64(13, 2);
128+
SELECT toTime(13) < toTime64(12, 2);
129+
SELECT toTime(12) < toTime64(12, 2);
130+
131+
SELECT toTime(12) == toTime64(13, 2);
132+
SELECT toTime(13) == toTime64(12, 2);
133+
SELECT toTime(12) == toTime64(12, 2);
134+
135+
-- Both negative
136+
SELECT toTime(-12) > toTime64(-13, 2);
137+
SELECT toTime(-13) > toTime64(-12, 2);
138+
SELECT toTime(-12) > toTime64(-12, 2);
139+
140+
SELECT toTime(-12) < toTime64(-13, 2);
141+
SELECT toTime(-13) < toTime64(-12, 2);
142+
SELECT toTime(-12) < toTime64(-12, 2);
143+
144+
SELECT toTime(-12) == toTime64(-13, 2);
145+
SELECT toTime(-13) == toTime64(-12, 2);
146+
SELECT toTime(-12) == toTime64(-12, 2);
147+
148+
-- Left negative
149+
SELECT toTime(-12) > toTime64(13, 2);
150+
SELECT toTime(-13) > toTime64(12, 2);
151+
SELECT toTime(-12) > toTime64(12, 2);
152+
153+
SELECT toTime(-12) < toTime64(13, 2);
154+
SELECT toTime(-13) < toTime64(12, 2);
155+
SELECT toTime(-12) < toTime64(12, 2);
156+
157+
SELECT toTime(-12) == toTime64(13, 2);
158+
SELECT toTime(-13) == toTime64(12, 2);
159+
SELECT toTime(-12) == toTime64(12, 2);
160+
161+
-- Right negative
162+
SELECT toTime(12) > toTime64(-13, 2);
163+
SELECT toTime(13) > toTime64(-12, 2);
164+
SELECT toTime(12) > toTime64(-12, 2);
165+
166+
SELECT toTime(12) < toTime64(-13, 2);
167+
SELECT toTime(13) < toTime64(-12, 2);
168+
SELECT toTime(12) < toTime64(-12, 2);
169+
170+
SELECT toTime(12) == toTime64(-13, 2);
171+
SELECT toTime(13) == toTime64(-12, 2);
172+
SELECT toTime(12) == toTime64(-12, 2);

0 commit comments

Comments
 (0)