Skip to content

Commit cfb6748

Browse files
Get rid of specialized classes for processing json_arrgayagg
Use a boolean flag and a couple of `if`s
1 parent 6b7edd8 commit cfb6748

16 files changed

+185
-1756
lines changed

dbcon/execplan/CMakeLists.txt

-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ set(execplan_LIB_SRCS
2222
functioncolumn.cpp
2323
groupconcatcolumn.cpp
2424
intervalcolumn.cpp
25-
jsonarrayaggcolumn.cpp
2625
logicoperator.cpp
2726
mysqlexecutionplan.cpp
2827
objectidmanager.cpp

dbcon/execplan/groupconcatcolumn.cpp

+25-14
Original file line numberDiff line numberDiff line change
@@ -41,22 +41,19 @@ namespace execplan
4141
/**
4242
* Constructors/Destructors
4343
*/
44-
GroupConcatColumn::GroupConcatColumn() : AggregateColumn()
44+
GroupConcatColumn::GroupConcatColumn(bool isJsonArrayAgg) : AggregateColumn(), fIsJsonArrayAgg(isJsonArrayAgg)
4545
{
4646
}
4747

48-
GroupConcatColumn::GroupConcatColumn(const uint32_t sessionID) : AggregateColumn(sessionID)
48+
GroupConcatColumn::GroupConcatColumn(const uint32_t sessionID, bool isJsonArrayAgg) : AggregateColumn(sessionID), fIsJsonArrayAgg(isJsonArrayAgg)
4949
{
5050
}
5151

5252
GroupConcatColumn::GroupConcatColumn(const GroupConcatColumn& rhs, const uint32_t sessionID)
5353
: AggregateColumn(dynamic_cast<const AggregateColumn&>(rhs))
5454
, fOrderCols(rhs.fOrderCols)
5555
, fSeparator(rhs.fSeparator)
56-
{
57-
}
58-
59-
GroupConcatColumn::~GroupConcatColumn()
56+
, fIsJsonArrayAgg(rhs.fIsJsonArrayAgg)
6057
{
6158
}
6259

@@ -67,24 +64,32 @@ GroupConcatColumn::~GroupConcatColumn()
6764
const string GroupConcatColumn::toString() const
6865
{
6966
ostringstream output;
70-
output << "GroupConcatColumn " << data() << endl;
71-
output << AggregateColumn::toString() << endl;
72-
output << "Group Concat Order Columns: " << endl;
67+
if (fIsJsonArrayAgg) {
68+
output << "JsonArrayAggColumn " << data() << endl;
69+
output << AggregateColumn::toString() << endl;
70+
output << "Json Array Order Columns: " << endl;
71+
}
72+
else {
73+
output << "GroupConcatColumn " << data() << endl;
74+
output << AggregateColumn::toString() << endl;
75+
output << "Group Concat Order Columns: " << endl;
76+
}
7377

7478
for (uint32_t i = 0; i < fOrderCols.size(); i++)
7579
{
7680
output << *fOrderCols[i];
7781
}
7882

79-
output << "\nSeparator: " << fSeparator << endl;
83+
if (!fIsJsonArrayAgg)
84+
output << "\nSeparator: " << fSeparator << endl;
8085
return output.str();
8186
}
8287

8388
string GroupConcatColumn::toCppCode(IncludeSet& includes) const
8489
{
8590
includes.insert("groupconcatcolumn.h");
8691
stringstream ss;
87-
ss << "GroupConcatColumn(" << sessionID() << ")";
92+
ss << "GroupConcatColumn(" << sessionID() << "," << std::boolalpha << fIsJsonArrayAgg << ")";
8893

8994
return ss.str();
9095
}
@@ -100,13 +105,13 @@ void GroupConcatColumn::serialize(messageqcpp::ByteStream& b) const
100105
b << (uint8_t)ObjectReader::GROUPCONCATCOLUMN;
101106
AggregateColumn::serialize(b);
102107

103-
CalpontSelectExecutionPlan::ReturnedColumnList::const_iterator rcit;
104108
b << static_cast<uint32_t>(fOrderCols.size());
105109

106-
for (rcit = fOrderCols.begin(); rcit != fOrderCols.end(); ++rcit)
107-
(*rcit)->serialize(b);
110+
for (const auto& col : fOrderCols)
111+
col->serialize(b);
108112

109113
b << fSeparator;
114+
b << (uint8_t)fIsJsonArrayAgg;
110115
}
111116

112117
void GroupConcatColumn::unserialize(messageqcpp::ByteStream& b)
@@ -127,6 +132,9 @@ void GroupConcatColumn::unserialize(messageqcpp::ByteStream& b)
127132
}
128133

129134
b >> fSeparator;
135+
uint8_t tmp8;
136+
b >> tmp8;
137+
fIsJsonArrayAgg = tmp8;
130138
}
131139

132140
bool GroupConcatColumn::operator==(const GroupConcatColumn& t) const
@@ -156,6 +164,9 @@ bool GroupConcatColumn::operator==(const GroupConcatColumn& t) const
156164
if (fSeparator != t.fSeparator)
157165
return false;
158166

167+
if (fIsJsonArrayAgg != t.fIsJsonArrayAgg)
168+
return false;
169+
159170
return true;
160171
}
161172

dbcon/execplan/groupconcatcolumn.h

+8-7
Original file line numberDiff line numberDiff line change
@@ -50,27 +50,27 @@ class GroupConcatColumn : public AggregateColumn
5050
/**
5151
* Constructors
5252
*/
53-
GroupConcatColumn();
53+
explicit GroupConcatColumn(bool isJsonArrayAgg = false);
5454

55-
GroupConcatColumn(const uint32_t sessionID);
55+
explicit GroupConcatColumn(const uint32_t sessionID, bool isJsonArrayAgg = false);
5656

5757
GroupConcatColumn(const GroupConcatColumn& rhs, const uint32_t sessionID = 0);
5858

5959
/**
6060
* Destructors
6161
*/
62-
virtual ~GroupConcatColumn();
62+
~GroupConcatColumn() override = default;
6363

6464
/**
6565
* Overloaded stream operator
6666
*/
67-
virtual const std::string toString() const override;
67+
const std::string toString() const override;
6868

6969
/** return a copy of this pointer
7070
*
7171
* deep copy of this pointer and return the copy
7272
*/
73-
virtual GroupConcatColumn* clone() const override
73+
GroupConcatColumn* clone() const override
7474
{
7575
return new GroupConcatColumn(*this);
7676
}
@@ -98,8 +98,8 @@ class GroupConcatColumn : public AggregateColumn
9898
/**
9999
* Serialize interface
100100
*/
101-
virtual void serialize(messageqcpp::ByteStream&) const override;
102-
virtual void unserialize(messageqcpp::ByteStream&) override;
101+
void serialize(messageqcpp::ByteStream&) const override;
102+
void unserialize(messageqcpp::ByteStream&) override;
103103

104104
/** @brief Do a deep, strict (as opposed to semantic) equivalence test
105105
*
@@ -140,6 +140,7 @@ class GroupConcatColumn : public AggregateColumn
140140
private:
141141
std::vector<SRCP> fOrderCols;
142142
std::string fSeparator;
143+
bool fIsJsonArrayAgg{false};
143144
};
144145

145146
/**

dbcon/execplan/jsonarrayaggcolumn.cpp

-180
This file was deleted.

0 commit comments

Comments
 (0)