3030#include < vector>
3131
3232#include " common/cast_set.h"
33+ #include " common/compare.h"
3334#include " common/logging.h"
3435#include " runtime/primitive_type.h"
3536#include " runtime/type_limit.h"
@@ -78,20 +79,20 @@ struct SingleValueDataFixed {
7879 constexpr static bool IsFixedLength = true ;
7980
8081 void set_to_min_max (bool max) {
81- value = max ? type_limit <typename PrimitiveTypeTraits<T>::ColumnItemType>:: max ()
82- : type_limit <typename PrimitiveTypeTraits<T>::ColumnItemType>:: min ();
82+ value = max ? Compare::max_value <typename PrimitiveTypeTraits<T>::ColumnItemType>()
83+ : Compare::min_value <typename PrimitiveTypeTraits<T>::ColumnItemType>();
8384 }
8485
8586 void change_if (const IColumn& column, size_t row_num, bool less) {
8687 has_value = true ;
87- value = less ? std ::min (assert_cast<const typename PrimitiveTypeTraits<T>::ColumnType&,
88- TypeCheckOnRelease::DISABLE>(column)
89- .get_data ()[row_num],
90- value)
91- : std ::max (assert_cast<const typename PrimitiveTypeTraits<T>::ColumnType&,
92- TypeCheckOnRelease::DISABLE>(column)
93- .get_data ()[row_num],
94- value);
88+ value = less ? Compare ::min (assert_cast<const typename PrimitiveTypeTraits<T>::ColumnType&,
89+ TypeCheckOnRelease::DISABLE>(column)
90+ .get_data ()[row_num],
91+ value)
92+ : Compare ::max (assert_cast<const typename PrimitiveTypeTraits<T>::ColumnType&,
93+ TypeCheckOnRelease::DISABLE>(column)
94+ .get_data ()[row_num],
95+ value);
9596 }
9697
9798 void insert_result_into (IColumn& to) const {
@@ -137,9 +138,10 @@ struct SingleValueDataFixed {
137138 }
138139
139140 bool change_if_less (const IColumn& column, size_t row_num, Arena& arena) {
140- if (!has () || assert_cast<const typename PrimitiveTypeTraits<T>::ColumnType&,
141- TypeCheckOnRelease::DISABLE>(column)
142- .get_data ()[row_num] < value) {
141+ if (!has () || Compare::less (assert_cast<const typename PrimitiveTypeTraits<T>::ColumnType&,
142+ TypeCheckOnRelease::DISABLE>(column)
143+ .get_data ()[row_num],
144+ value)) {
143145 change (column, row_num, arena);
144146 return true ;
145147 } else {
@@ -148,7 +150,7 @@ struct SingleValueDataFixed {
148150 }
149151
150152 bool change_if_less (const Self& to, Arena& arena) {
151- if (to.has () && (!has () || to.value < value)) {
153+ if (to.has () && (!has () || Compare::less ( to.value , value) )) {
152154 change (to, arena);
153155 return true ;
154156 } else {
@@ -157,9 +159,11 @@ struct SingleValueDataFixed {
157159 }
158160
159161 bool change_if_greater (const IColumn& column, size_t row_num, Arena& arena) {
160- if (!has () || assert_cast<const typename PrimitiveTypeTraits<T>::ColumnType&,
161- TypeCheckOnRelease::DISABLE>(column)
162- .get_data ()[row_num] > value) {
162+ if (!has () ||
163+ Compare::greater (assert_cast<const typename PrimitiveTypeTraits<T>::ColumnType&,
164+ TypeCheckOnRelease::DISABLE>(column)
165+ .get_data ()[row_num],
166+ value)) {
163167 change (column, row_num, arena);
164168 return true ;
165169 } else {
@@ -171,13 +175,14 @@ struct SingleValueDataFixed {
171175 if (!has ()) {
172176 return false ;
173177 }
174- return assert_cast<const typename PrimitiveTypeTraits<T>::ColumnType&,
175- TypeCheckOnRelease::DISABLE>(column)
176- .get_data ()[row_num] == value;
178+ return Compare::equal (assert_cast<const typename PrimitiveTypeTraits<T>::ColumnType&,
179+ TypeCheckOnRelease::DISABLE>(column)
180+ .get_data ()[row_num],
181+ value);
177182 }
178183
179184 bool change_if_greater (const Self& to, Arena& arena) {
180- if (to.has () && (!has () || to.value > value)) {
185+ if (to.has () && (!has () || Compare::greater ( to.value , value) )) {
181186 change (to, arena);
182187 return true ;
183188 } else {
@@ -217,20 +222,20 @@ struct SingleValueDataDecimal {
217222 constexpr static bool IsFixedLength = true ;
218223
219224 void set_to_min_max (bool max) {
220- value = max ? type_limit <typename PrimitiveTypeTraits<T>::ColumnItemType>:: max ()
221- : type_limit <typename PrimitiveTypeTraits<T>::ColumnItemType>:: min ();
225+ value = max ? Compare::max_value <typename PrimitiveTypeTraits<T>::ColumnItemType>()
226+ : Compare::min_value <typename PrimitiveTypeTraits<T>::ColumnItemType>();
222227 }
223228
224229 void change_if (const IColumn& column, size_t row_num, bool less) {
225230 has_value = true ;
226- value = less ? std ::min (assert_cast<const typename PrimitiveTypeTraits<T>::ColumnType&,
227- TypeCheckOnRelease::DISABLE>(column)
228- .get_data ()[row_num],
229- value)
230- : std ::max (assert_cast<const typename PrimitiveTypeTraits<T>::ColumnType&,
231- TypeCheckOnRelease::DISABLE>(column)
232- .get_data ()[row_num],
233- value);
231+ value = less ? Compare ::min (assert_cast<const typename PrimitiveTypeTraits<T>::ColumnType&,
232+ TypeCheckOnRelease::DISABLE>(column)
233+ .get_data ()[row_num],
234+ value)
235+ : Compare ::max (assert_cast<const typename PrimitiveTypeTraits<T>::ColumnType&,
236+ TypeCheckOnRelease::DISABLE>(column)
237+ .get_data ()[row_num],
238+ value);
234239 }
235240
236241 void insert_result_into (IColumn& to) const {
@@ -276,9 +281,10 @@ struct SingleValueDataDecimal {
276281 }
277282
278283 bool change_if_less (const IColumn& column, size_t row_num, Arena& arena) {
279- if (!has () || assert_cast<const typename PrimitiveTypeTraits<T>::ColumnType&,
280- TypeCheckOnRelease::DISABLE>(column)
281- .get_data ()[row_num] < value) {
284+ if (!has () || Compare::less (assert_cast<const typename PrimitiveTypeTraits<T>::ColumnType&,
285+ TypeCheckOnRelease::DISABLE>(column)
286+ .get_data ()[row_num],
287+ value)) {
282288 change (column, row_num, arena);
283289 return true ;
284290 } else {
@@ -287,7 +293,7 @@ struct SingleValueDataDecimal {
287293 }
288294
289295 bool change_if_less (const Self& to, Arena& arena) {
290- if (to.has () && (!has () || to.value < value)) {
296+ if (to.has () && (!has () || Compare::less ( to.value , value) )) {
291297 change (to, arena);
292298 return true ;
293299 } else {
@@ -296,9 +302,11 @@ struct SingleValueDataDecimal {
296302 }
297303
298304 bool change_if_greater (const IColumn& column, size_t row_num, Arena& arena) {
299- if (!has () || assert_cast<const typename PrimitiveTypeTraits<T>::ColumnType&,
300- TypeCheckOnRelease::DISABLE>(column)
301- .get_data ()[row_num] > value) {
305+ if (!has () ||
306+ Compare::greater (assert_cast<const typename PrimitiveTypeTraits<T>::ColumnType&,
307+ TypeCheckOnRelease::DISABLE>(column)
308+ .get_data ()[row_num],
309+ value)) {
302310 change (column, row_num, arena);
303311 return true ;
304312 } else {
@@ -307,7 +315,7 @@ struct SingleValueDataDecimal {
307315 }
308316
309317 bool change_if_greater (const Self& to, Arena& arena) {
310- if (to.has () && (!has () || to.value > value)) {
318+ if (to.has () && (!has () || Compare::greater ( to.value , value) )) {
311319 change (to, arena);
312320 return true ;
313321 } else {
@@ -319,9 +327,10 @@ struct SingleValueDataDecimal {
319327 if (!has ()) {
320328 return false ;
321329 }
322- return assert_cast<const typename PrimitiveTypeTraits<T>::ColumnType&,
323- TypeCheckOnRelease::DISABLE>(column)
324- .get_data ()[row_num] == value;
330+ return Compare::equal (assert_cast<const typename PrimitiveTypeTraits<T>::ColumnType&,
331+ TypeCheckOnRelease::DISABLE>(column)
332+ .get_data ()[row_num],
333+ value);
325334 }
326335
327336 void change_first_time (const IColumn& column, size_t row_num, Arena& arena) {
0 commit comments