You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-12-20 01:42:27 +03:00
Merge pull request #1278 from mariadb-corporation/revert-1268-mcol4043-1-1.5
Revert "MCOL-4043 Fix memory leaks - 1"
This commit is contained in:
@@ -150,14 +150,8 @@ SimpleFilter::SimpleFilter(const SimpleFilter& rhs) :
|
|||||||
SimpleFilter::~SimpleFilter()
|
SimpleFilter::~SimpleFilter()
|
||||||
{
|
{
|
||||||
//delete fOp;
|
//delete fOp;
|
||||||
if (fLhs != NULL)
|
delete fLhs;
|
||||||
delete fLhs;
|
delete fRhs;
|
||||||
|
|
||||||
if (fRhs != NULL)
|
|
||||||
delete fRhs;
|
|
||||||
|
|
||||||
fLhs = NULL;
|
|
||||||
fRhs = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -364,11 +364,6 @@ struct JobInfo
|
|||||||
bool isDML;
|
bool isDML;
|
||||||
std::string timeZone;
|
std::string timeZone;
|
||||||
|
|
||||||
// This is for tracking any dynamically allocated ParseTree objects
|
|
||||||
// in simpleScalarFilterToParseTree() for later deletion in
|
|
||||||
// JobList::~JobList()
|
|
||||||
std::vector<std::pair<execplan::ParseTree*, execplan::ParseTree*>> dynamicParseTreeVec;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//defaults okay
|
//defaults okay
|
||||||
//JobInfo(const JobInfo& rhs);
|
//JobInfo(const JobInfo& rhs);
|
||||||
|
|||||||
@@ -3269,12 +3269,6 @@ void doOR(ParseTree* n, JobInfo& jobInfo, bool tryCombine)
|
|||||||
ccp->left(parseTree->left());
|
ccp->left(parseTree->left());
|
||||||
ccp->right(parseTree->right());
|
ccp->right(parseTree->right());
|
||||||
ccp->data(parseTree->data());
|
ccp->data(parseTree->data());
|
||||||
jobInfo.dynamicParseTreeVec.push_back(make_pair(parseTree, ccp));
|
|
||||||
}
|
|
||||||
else if (parseTree)
|
|
||||||
{
|
|
||||||
delete parseTree;
|
|
||||||
parseTree = NULL;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -192,10 +192,7 @@ void ssfInHaving(ParseTree* pt, void* obj)
|
|||||||
pt->right(parseTree->right());
|
pt->right(parseTree->right());
|
||||||
pt->data(parseTree->data());
|
pt->data(parseTree->data());
|
||||||
|
|
||||||
jobInfo->dynamicParseTreeVec.push_back(make_pair(parseTree, pt));
|
|
||||||
// don't delete the parseTree, it has been placed in the plan.
|
// don't delete the parseTree, it has been placed in the plan.
|
||||||
// Instead, we use the dynamicParseTreeVec above for deletion
|
|
||||||
// in the JobList dtor after the query executes.
|
|
||||||
// delete parseTree;
|
// delete parseTree;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -630,10 +627,7 @@ void doSimpleScalarFilter(ParseTree* p, JobInfo& jobInfo)
|
|||||||
// create job steps for each simple filter
|
// create job steps for each simple filter
|
||||||
JLF_ExecPlanToJobList::walkTree(parseTree, jobInfo);
|
JLF_ExecPlanToJobList::walkTree(parseTree, jobInfo);
|
||||||
|
|
||||||
jobInfo.dynamicParseTreeVec.push_back(make_pair(parseTree, ccp));
|
|
||||||
// don't delete the parseTree, it has been placed in the plan.
|
// don't delete the parseTree, it has been placed in the plan.
|
||||||
// Instead, we use the dynamicParseTreeVec above for deletion
|
|
||||||
// in the JobList dtor after the query executes.
|
|
||||||
// delete parseTree;
|
// delete parseTree;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -142,26 +142,6 @@ JobList::~JobList()
|
|||||||
(*iter)->join();
|
(*iter)->join();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto& parseTree : fDynamicParseTreeVec)
|
|
||||||
{
|
|
||||||
if (parseTree.first)
|
|
||||||
{
|
|
||||||
delete parseTree.first;
|
|
||||||
parseTree.first = NULL;
|
|
||||||
// Note that we don't delete parseTree.second here,
|
|
||||||
// that is handled by CalpontSelectExecutionPlan::unserialize().
|
|
||||||
// parseTree.first already deleted the objects pointed to by
|
|
||||||
// parseTree.second->left()/right()/data(), so we set the
|
|
||||||
// pointers to NULL here.
|
|
||||||
if (parseTree.second)
|
|
||||||
{
|
|
||||||
parseTree.second->left((ParseTree*) (NULL));
|
|
||||||
parseTree.second->right((ParseTree*) (NULL));
|
|
||||||
parseTree.second->data((TreeNode*) (NULL));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (exception& ex)
|
catch (exception& ex)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -34,7 +34,6 @@
|
|||||||
|
|
||||||
#include "jobstep.h"
|
#include "jobstep.h"
|
||||||
#include "bytestream.h"
|
#include "bytestream.h"
|
||||||
#include "parsetree.h"
|
|
||||||
|
|
||||||
#ifndef __GNUC__
|
#ifndef __GNUC__
|
||||||
# ifndef __attribute__
|
# ifndef __attribute__
|
||||||
@@ -191,12 +190,6 @@ public:
|
|||||||
fPmsConfigured = pms;
|
fPmsConfigured = pms;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void setDynamicParseTreeVec(
|
|
||||||
const std::vector<std::pair<execplan::ParseTree*, execplan::ParseTree*>>& dynamicParseTreeVec)
|
|
||||||
{
|
|
||||||
fDynamicParseTreeVec = dynamicParseTreeVec;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//defaults okay
|
//defaults okay
|
||||||
//JobList(const JobList& rhs);
|
//JobList(const JobList& rhs);
|
||||||
@@ -224,7 +217,6 @@ protected:
|
|||||||
volatile uint32_t fAborted;
|
volatile uint32_t fAborted;
|
||||||
|
|
||||||
uint32_t fPriority; //higher #s = higher priority
|
uint32_t fPriority; //higher #s = higher priority
|
||||||
std::vector<std::pair<execplan::ParseTree*, execplan::ParseTree*>> fDynamicParseTreeVec;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class TupleJobList : public JobList
|
class TupleJobList : public JobList
|
||||||
|
|||||||
@@ -2003,7 +2003,6 @@ SJLP makeJobList_(
|
|||||||
jl->addQuery(querySteps);
|
jl->addQuery(querySteps);
|
||||||
jl->addProject(projectSteps);
|
jl->addProject(projectSteps);
|
||||||
jl->addDelivery(deliverySteps);
|
jl->addDelivery(deliverySteps);
|
||||||
jl->setDynamicParseTreeVec(jobInfo.dynamicParseTreeVec);
|
|
||||||
|
|
||||||
dynamic_cast<TupleJobList*>(jl)->setDeliveryFlag(true);
|
dynamic_cast<TupleJobList*>(jl)->setDeliveryFlag(true);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user