mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 16:50:48 +00:00
Use FieldVisitor to compare offsets in WindowFrame::checkValid
This commit is contained in:
parent
39de7f8a2a
commit
71d0682a2b
@ -117,4 +117,16 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class FieldVisitorAccurateLessOrEqual : public StaticVisitor<bool>
|
||||
{
|
||||
public:
|
||||
template <typename T, typename U>
|
||||
bool operator()(const T & l, const U & r) const
|
||||
{
|
||||
auto less_cmp = FieldVisitorAccurateLess();
|
||||
return !less_cmp(r, l);
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
#include <Interpreters/WindowDescription.h>
|
||||
|
||||
#include <Core/Field.h>
|
||||
#include <Common/FieldVisitorsAccurateComparison.h>
|
||||
#include <Common/FieldVisitorToString.h>
|
||||
#include <IO/Operators.h>
|
||||
#include <Parsers/ASTFunction.h>
|
||||
@ -160,7 +161,8 @@ void WindowFrame::checkValid() const
|
||||
bool begin_less_equal_end;
|
||||
if (begin_preceding && end_preceding)
|
||||
{
|
||||
begin_less_equal_end = begin_offset.get<Int64>() >= end_offset.get<Int64>();
|
||||
/// we can't compare Fields using operator<= if fields have different types
|
||||
begin_less_equal_end = applyVisitor(FieldVisitorAccurateLessOrEqual(), end_offset, begin_offset);
|
||||
}
|
||||
else if (begin_preceding && !end_preceding)
|
||||
{
|
||||
@ -172,7 +174,7 @@ void WindowFrame::checkValid() const
|
||||
}
|
||||
else /* if (!begin_preceding && !end_preceding) */
|
||||
{
|
||||
begin_less_equal_end = begin_offset.get<Int64>() <= end_offset.get<Int64>();
|
||||
begin_less_equal_end = applyVisitor(FieldVisitorAccurateLessOrEqual(), begin_offset, end_offset);
|
||||
}
|
||||
|
||||
if (!begin_less_equal_end)
|
||||
|
Loading…
Reference in New Issue
Block a user