This commit is contained in:
Hamed Masafi 2018-03-11 13:24:36 +03:30
parent b9b80ebcf3
commit 9f712a55ea
3 changed files with 49 additions and 14 deletions

View File

@ -931,7 +931,9 @@ SqlGeneratorBase::operatorString(const PhraseData::Condition &cond) const
void SqlGeneratorBase::appendSkipTake(QString &sql, int skip, int take) void SqlGeneratorBase::appendSkipTake(QString &sql, int skip, int take)
{ {
Q_UNUSED(sql);
Q_UNUSED(skip);
Q_UNUSED(take);
} }
QString SqlGeneratorBase::createConditionalPhrase(const PhraseData *d) const QString SqlGeneratorBase::createConditionalPhrase(const PhraseData *d) const

View File

@ -24,12 +24,12 @@
NUT_BEGIN_NAMESPACE NUT_BEGIN_NAMESPACE
#define LOG(s) qDebug() << __func__ << s; #define LOG(s) qDebug() << __func__ << s
PhraseData::PhraseData() : PhraseData::PhraseData() :
className(""), fieldName(""), className(""), fieldName(""),
type(Field), operatorCond(NotAssign), type(Field), operatorCond(NotAssign),
left(0), right(0), operand(QVariant::Invalid), isNot(false), parents(3) left(0), right(0), operand(QVariant::Invalid), isNot(false), parents(1)
{ } { }
PhraseData::PhraseData(const char *className, const char *fieldName) : PhraseData::PhraseData(const char *className, const char *fieldName) :
@ -70,6 +70,12 @@ PhraseData *PhraseData::operator =(PhraseData *other)
return other; return other;
} }
PhraseData &PhraseData::operator =(PhraseData &other)
{
other.parents++;
return other;
}
//PhraseData::PhraseData(const PhraseData &other) : //PhraseData::PhraseData(const PhraseData &other) :
// left(other.left), right(other.right), operand(other.operand), // left(other.left), right(other.right), operand(other.operand),
// operatorCond(other.operatorCond), className(other.className), // operatorCond(other.operatorCond), className(other.className),
@ -111,7 +117,7 @@ PhraseData::~PhraseData()
void PhraseData::cleanUp() void PhraseData::cleanUp()
{ {
cleanUp(this); // cleanUp(this);
} }
void PhraseData::cleanUp(PhraseData *d) void PhraseData::cleanUp(PhraseData *d)
@ -134,22 +140,22 @@ AbstractFieldPhrase::AbstractFieldPhrase(const char *className,
AbstractFieldPhrase::AbstractFieldPhrase(const AbstractFieldPhrase &other) AbstractFieldPhrase::AbstractFieldPhrase(const AbstractFieldPhrase &other)
{ {
qDebug() <<"Copy ctor"<<other.data->toString()<<other.data->parents;
data = other.data; data = other.data;
data->parents++; data->parents++;
qDebug() <<"Copy ctor"<<other.data->toString()<<other.data->parents;
} }
AbstractFieldPhrase::AbstractFieldPhrase(AbstractFieldPhrase &&other) AbstractFieldPhrase::AbstractFieldPhrase(AbstractFieldPhrase &&other)
{ {
data = other.data; data = other.data;
data->parents++;
other.data = 0; other.data = 0;
} }
AbstractFieldPhrase::~AbstractFieldPhrase() AbstractFieldPhrase::~AbstractFieldPhrase()
{ {
if (data) { if (data) {
LOG(data->toString()); LOG(data->toString()) << data->parents;
qDebug() << data->parents;
} else { } else {
LOG(""); LOG("");
} }
@ -203,6 +209,7 @@ AbstractFieldPhraseOperatorField(>=, PhraseData::GreaterEqual)
AbstractFieldPhrase AbstractFieldPhrase::operator !() AbstractFieldPhrase AbstractFieldPhrase::operator !()
{ {
AbstractFieldPhrase f(data->className, data->fieldName); AbstractFieldPhrase f(data->className, data->fieldName);
f.data->isNot = !data->isNot; f.data->isNot = !data->isNot;
return f; return f;
@ -225,10 +232,17 @@ PhraseList::PhraseList() : isValid(false)
PhraseList::PhraseList(const PhraseList &other) : isValid(true) PhraseList::PhraseList(const PhraseList &other) : isValid(true)
{ {
LOG("");
data = qMove(other.data); data = qMove(other.data);
const_cast<PhraseList&>(other).data.clear(); const_cast<PhraseList&>(other).data.clear();
} }
PhraseList::PhraseList(PhraseList &&other)
{
LOG("");
data = other.data;
}
PhraseList::PhraseList(const AbstractFieldPhrase &other) : isValid(true) PhraseList::PhraseList(const AbstractFieldPhrase &other) : isValid(true)
{ {
data.append(other.data); data.append(other.data);
@ -256,13 +270,20 @@ PhraseList::PhraseList(PhraseList *left, PhraseList *right) : isValid(true)
PhraseList::PhraseList(PhraseList *left, const AbstractFieldPhrase *right) PhraseList::PhraseList(PhraseList *left, const AbstractFieldPhrase *right)
: isValid(true) : isValid(true)
{ {
data = left->data; data.append(left->data);
data.append(right->data); data.append(right->data);
incAllDataParents(); incAllDataParents();
} }
PhraseList::~PhraseList() PhraseList::~PhraseList()
{ } {
LOG("");
}
PhraseList &PhraseList::operator =(const PhraseData &other)
{
return other;
}
PhraseList PhraseList::operator |(const AbstractFieldPhrase &other) { PhraseList PhraseList::operator |(const AbstractFieldPhrase &other) {
return PhraseList(this, &other); return PhraseList(this, &other);
@ -564,6 +585,14 @@ PhraseDataList::PhraseDataList() : QList<PhraseData*>()
} }
PhraseDataList::PhraseDataList(const PhraseDataList &other) : QList<PhraseData*>()
{
PhraseDataList &o = const_cast<PhraseDataList&>(other);
PhraseDataList::iterator i;
for (i = o.begin(); i != o.end(); ++i)
append(*i);
}
void PhraseDataList::append(PhraseData *d) void PhraseDataList::append(PhraseData *d)
{ {
d->parents++; d->parents++;
@ -580,11 +609,11 @@ void PhraseDataList::append(QList<PhraseData *> &dl)
PhraseDataList::~PhraseDataList() PhraseDataList::~PhraseDataList()
{ {
QList<PhraseData*>::iterator i; QList<PhraseData*>::iterator i;
for (i = begin(); i != end(); ++i) { for (i = begin(); i != end(); ++i) {
(*i)->cleanUp(); (*i)->cleanUp();
if (!--(*i)->parents) if (!--(*i)->parents)
delete *i; delete *i;
} }
} }
//AssignmentPhraseList operator &(const AssignmentPhrase &l, const AssignmentPhrase &r) //AssignmentPhraseList operator &(const AssignmentPhrase &l, const AssignmentPhrase &r)

View File

@ -109,6 +109,7 @@ public:
// explicit PhraseData(const PhraseData *other); // explicit PhraseData(const PhraseData *other);
PhraseData *operator =(PhraseData *other); PhraseData *operator =(PhraseData *other);
PhraseData &operator =(PhraseData &other);
QString toString() const; QString toString() const;
@ -123,6 +124,7 @@ class PhraseDataList : public QList<PhraseData*>
{ {
public: public:
PhraseDataList(); PhraseDataList();
PhraseDataList(const PhraseDataList &other);
void append(PhraseData *d); void append(PhraseData *d);
void append(QList<PhraseData*> &dl); void append(QList<PhraseData*> &dl);
virtual ~PhraseDataList(); virtual ~PhraseDataList();
@ -173,12 +175,14 @@ public:
PhraseDataList data; PhraseDataList data;
explicit PhraseList(); explicit PhraseList();
PhraseList(const PhraseList &other); PhraseList(const PhraseList &other);
PhraseList(PhraseList &&other);
PhraseList(const AbstractFieldPhrase &other); PhraseList(const AbstractFieldPhrase &other);
PhraseList(const AbstractFieldPhrase *left, const AbstractFieldPhrase &right); PhraseList(const AbstractFieldPhrase *left, const AbstractFieldPhrase &right);
PhraseList(PhraseList *left, PhraseList *right); PhraseList(PhraseList *left, PhraseList *right);
PhraseList(PhraseList *left, const AbstractFieldPhrase *right); PhraseList(PhraseList *left, const AbstractFieldPhrase *right);
virtual ~PhraseList(); virtual ~PhraseList();
PhraseList &operator =(const PhraseData &other);
PhraseList operator |(PhraseList &other); PhraseList operator |(PhraseList &other);
PhraseList operator |(const AbstractFieldPhrase &other); PhraseList operator |(const AbstractFieldPhrase &other);