Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions src/common/classes/TriState.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,14 @@ namespace Firebird {
class TriState
{
public:
TriState() noexcept;
explicit TriState(bool input) noexcept;
static constexpr TriState empty() noexcept
{
return TriState();
}

public:
constexpr TriState() noexcept;
explicit constexpr TriState(bool input) noexcept;

bool operator ==(const TriState& o) const noexcept
{
Expand All @@ -62,13 +68,13 @@ class TriState
};

// The var is left uninitialized.
inline TriState::TriState() noexcept
inline constexpr TriState::TriState() noexcept
: m_init(false), m_val(false)
{
}

// The var is initialized to the explicit value.
inline TriState::TriState(bool input) noexcept
inline constexpr TriState::TriState(bool input) noexcept
: m_init(true), m_val(input)
{
}
Expand Down
20 changes: 9 additions & 11 deletions src/dsql/AggNodes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -388,7 +388,7 @@ bool AggNode::aggPass(thread_db* tdbb, Request* request) const
if (arg)
{
desc = EVL_expr(tdbb, request, arg);
if (request->req_flags & req_null)
if (!desc)
return false;

if (distinct)
Expand Down Expand Up @@ -597,7 +597,7 @@ void AnyValueAggNode::aggPass(thread_db* tdbb, Request* request, dsc* desc) cons
{
const auto argValue = EVL_expr(tdbb, request, arg);

if (!(request->req_flags & req_null))
if (!argValue)
EVL_make_value(tdbb, argValue, impure);
}

Expand Down Expand Up @@ -1037,7 +1037,7 @@ void ListAggNode::aggPass(thread_db* tdbb, Request* request, dsc* desc) const
{
const dsc* const delimiterDesc = EVL_expr(tdbb, request, delimiter);

if (request->req_flags & req_null)
if (!delimiterDesc)
{
// Mark the result as NULL.
impure->vlu_desc.dsc_dtype = 0;
Expand Down Expand Up @@ -2031,11 +2031,11 @@ bool CorrAggNode::aggPass(thread_db* tdbb, Request* request) const
dsc* desc2 = NULL;

desc = EVL_expr(tdbb, request, arg);
if (request->req_flags & req_null)
if (!desc)
return false;

desc2 = EVL_expr(tdbb, request, arg2);
if (request->req_flags & req_null)
if (!desc2)
return false;

++impure->vlux_count;
Expand Down Expand Up @@ -2307,11 +2307,11 @@ bool RegrAggNode::aggPass(thread_db* tdbb, Request* request) const
dsc* desc2 = NULL;

desc = EVL_expr(tdbb, request, arg);
if (request->req_flags & req_null)
if (!desc)
return false;

desc2 = EVL_expr(tdbb, request, arg2);
if (request->req_flags & req_null)
if (!desc2)
return false;

++impure->vlux_count;
Expand Down Expand Up @@ -2559,12 +2559,10 @@ void RegrCountAggNode::aggInit(thread_db* tdbb, Request* request) const

bool RegrCountAggNode::aggPass(thread_db* tdbb, Request* request) const
{
EVL_expr(tdbb, request, arg);
if (request->req_flags & req_null)
if (!EVL_expr(tdbb, request, arg))
return false;

EVL_expr(tdbb, request, arg2);
if (request->req_flags & req_null)
if (!EVL_expr(tdbb, request, arg2))
return false;

impure_value_ex* impure = request->getImpure<impure_value_ex>(impureOffset);
Expand Down
Loading
Loading