From fd532607ef29aac49b52c861e5aecda6dfa19e82 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Tue, 27 Sep 2016 00:28:40 +0200 Subject: New query api --- common/datastorequery.cpp | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) (limited to 'common/datastorequery.cpp') diff --git a/common/datastorequery.cpp b/common/datastorequery.cpp index f352b74..0fc9234 100644 --- a/common/datastorequery.cpp +++ b/common/datastorequery.cpp @@ -148,14 +148,9 @@ public: QHash mAggregateValues; QByteArray mReductionProperty; QByteArray mSelectionProperty; - enum SelectionComparator { - Max - /* Min, */ - /* First */ - }; - SelectionComparator mSelectionComparator; + Query::Reduce::Selector::Comparator mSelectionComparator; - Reduce(const QByteArray &reductionProperty, const QByteArray &selectionProperty, SelectionComparator comparator, FilterBase::Ptr source, DataStoreQuery *store) + Reduce(const QByteArray &reductionProperty, const QByteArray &selectionProperty, Query::Reduce::Selector::Comparator comparator, FilterBase::Ptr source, DataStoreQuery *store) : FilterBase(source, store), mReductionProperty(reductionProperty), mSelectionProperty(selectionProperty), @@ -177,9 +172,9 @@ public: return QByteArray(); } - static bool compare(const QVariant &left, const QVariant &right, SelectionComparator comparator) + static bool compare(const QVariant &left, const QVariant &right, Query::Reduce::Selector::Comparator comparator) { - if (comparator == Max) { + if (comparator == Query::Reduce::Selector::Max) { return left > right; } return false; @@ -412,13 +407,16 @@ void DataStoreQuery::setupQuery() /* baseSet = Sort::Ptr::create(baseSet, mQuery.sortProperty); */ /* } */ - if (mQuery.threadLeaderOnly) { - auto reduce = Reduce::Ptr::create("threadId", "date", Reduce::Max, baseSet, this); - baseSet = reduce; - } - if (mQuery.bloomThread) { - auto reduce = Bloom::Ptr::create("threadId", baseSet, this); - baseSet = reduce; + for (const auto &stage : mQuery.filterStages) { + if (auto filter = stage.dynamicCast()) { + + } else if (auto filter = stage.dynamicCast()) { + auto reduce = Reduce::Ptr::create(filter->property, filter->selector.property, filter->selector.comparator, baseSet, this); + baseSet = reduce; + } else if (auto filter = stage.dynamicCast()) { + auto reduce = Bloom::Ptr::create(filter->property, baseSet, this); + baseSet = reduce; + } } mCollector = Collector::Ptr::create(baseSet, this); -- cgit v1.2.3