diff --git a/src/generators/sqlgeneratorbase.cpp b/src/generators/sqlgeneratorbase.cpp index 44efaec..ad64f94 100644 --- a/src/generators/sqlgeneratorbase.cpp +++ b/src/generators/sqlgeneratorbase.cpp @@ -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 diff --git a/src/phrase.cpp b/src/phrase.cpp index a3885c1..0c9f9bc 100644 --- a/src/phrase.cpp +++ b/src/phrase.cpp @@ -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"<toString()<parents; data = other.data; data->parents++; + qDebug() <<"Copy ctor"<toString()<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(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() } +PhraseDataList::PhraseDataList(const PhraseDataList &other) : QList() +{ + PhraseDataList &o = const_cast(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 &dl) PhraseDataList::~PhraseDataList() { QList::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) diff --git a/src/phrase.h b/src/phrase.h index 7cf6fff..97e49d7 100644 --- a/src/phrase.h +++ b/src/phrase.h @@ -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 { public: PhraseDataList(); + PhraseDataList(const PhraseDataList &other); void append(PhraseData *d); void append(QList &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);