From 17f0dd179e9fd57b41b29abe84e7e49f9a7ac8a8 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 21 Feb 2018 14:07:57 +0100 Subject: Support reductions in the list command --- common/query.h | 11 ++++++++--- sinksh/syntax_modules/sink_list.cpp | 7 ++++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/common/query.h b/common/query.h index 1e7b41d..fd79105 100644 --- a/common/query.h +++ b/common/query.h @@ -247,14 +247,19 @@ public: //Potentially pass-in an identifier under which the result will be available in the result set. }; - template - Reduce &reduce(const Reduce::Selector &s) + Reduce &reduce(const QByteArray &name, const Reduce::Selector &s) { - auto reduction = QSharedPointer::create(T::name, s); + auto reduction = QSharedPointer::create(name, s); mFilterStages << reduction; return *reduction; } + template + Reduce &reduce(const Reduce::Selector &s) + { + return reduce(T::name, s); + } + /** * "Bloom" on a property. * diff --git a/sinksh/syntax_modules/sink_list.cpp b/sinksh/syntax_modules/sink_list.cpp index 92c1e77..63ce527 100644 --- a/sinksh/syntax_modules/sink_list.cpp +++ b/sinksh/syntax_modules/sink_list.cpp @@ -92,7 +92,7 @@ QStringList printToList(const Sink::ApplicationDomain::ApplicationDomainType &o, bool list(const QStringList &args_, State &state) { if (args_.isEmpty()) { - state.printError(QObject::tr("Options: $type [--resource $resource] [--compact] [--filter $property=$value] [--id $id] [--showall|--show $property]")); + state.printError(QObject::tr("Options: $type [--resource $resource] [--compact] [--filter $property=$value] [--id $id] [--showall|--show $property] [--reduce $reduceProperty:$selectorProperty] [--sort $sortProperty] [--limit $count]")); return false; } @@ -114,6 +114,11 @@ bool list(const QStringList &args_, State &state) query.setSortProperty(options.options.value("sort").first().toUtf8()); } + if (options.options.contains("reduce")) { + auto value = options.options.value("reduce").first().toUtf8(); + query.reduce(value.split(':').value(0), Sink::Query::Reduce::Selector(value.split(':').value(1), Sink::Query::Reduce::Selector::Max)); + } + auto compact = options.options.contains("compact"); if (!options.options.contains("showall")) { if (options.options.contains("show")) { -- cgit v1.2.3