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)
{
Q_UNUSED(sql);
Q_UNUSED(skip);
Q_UNUSED(take);
}
QString SqlGeneratorBase::createConditionalPhrase(const PhraseData *d) const

View File

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

View File

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