All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.vertx.up.uca.jooq.JqAggregator Maven / Gradle / Ivy

The newest version!
package io.vertx.up.uca.jooq;

import io.vertx.core.Future;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
import io.vertx.up.atom.query.engine.Qr;

import java.math.BigDecimal;
import java.util.List;
import java.util.concurrent.ConcurrentMap;

/**
 * @author Lang
 */
@SuppressWarnings("all")
class JqAggregator {

    private transient final AggregatorCount counter;
    private transient final AggregatorSum sum;
    private transient final AggregatorMax max;
    private transient final AggregatorMin min;
    private transient final AggregatorAvg avg;

    private transient final ActionGroup group;

    private JqAggregator(final JqAnalyzer analyzer) {
        this.group = new ActionGroup(analyzer);
        /*
         * Aggr
         */
        this.counter = new AggregatorCount(analyzer);
        this.sum = new AggregatorSum(analyzer);
        this.min = new AggregatorMin(analyzer);
        this.max = new AggregatorMax(analyzer);
        this.avg = new AggregatorAvg(analyzer);
    }

    public static JqAggregator create(final JqAnalyzer analyzer) {
        return new JqAggregator(analyzer);
    }

    // -------------------- Count Operation ------------
    /*
     * Internal Call and do not export this Programming API
     */
    Long count(final Qr qr) {
        return this.count(null == qr.getCriteria() ? new JsonObject() : qr.getCriteria().toJson());
    }

     Future countAsync(final Qr qr) {
        return this.countAsync(null == qr.getCriteria() ? new JsonObject() : qr.getCriteria().toJson());
    }

    /*
     * AgCount class for count
     * 1) countAll / countAllAsync
     */
    Long countAll() {
        return this.counter.count();
    }

    Future countAllAsync() {
        return this.counter.countAsync();
    }

     Long count(final JsonObject criteria) {
        return this.counter.count(criteria);
    }

     Future countAsync(final JsonObject criteria) {
        return this.counter.countAsync(criteria);
    }

    /*
     * Count Function by group field here
     * The aggregation result is List> reference here,
     * Here the result should be:
     *
     * Map Data Structure:
     *  - Group1 = Group1's Counter
     *  - Group2 = Group2's Counter
     *  - ......
     *  - GroupN = GroupN's Counter
     *
     * The limitation is that the grouped field should be only one
     */

     ConcurrentMap countBy(final JsonObject criteria, final String field) {
        return this.counter.countBy(criteria, field);
    }

    /*
     * Count function by group Fields here
     * The aggregation result is List> reference here,
     * Here the result should be:
     *
     * List Data Structure, here each element shouldd be:
     * {
     *     "field1": "value1",
     *     "field2": "value2",
     *     ......
     *     "fieldN": "valueN",
     *     "count": "COUNT"
     * }
     */
     JsonArray countBy(final JsonObject criteria, final String... fields) {
        return this.counter.countBy(criteria, fields);
    }

    // -------------------- Group Operation ------------
     ConcurrentMap> group(final String field) {
        return this.group.group(field);
    }

     ConcurrentMap> group(final JsonObject criteria, final String field) {
        return this.group.group(criteria, field);
    }

    // -------------------- Sum Operation ------------
    BigDecimal sum(final String field, final JsonObject criteria) {
        return this.sum.sum(field, criteria);
    }

    ConcurrentMap sum(final String field, final JsonObject criteria, final String groupField) {
        return this.sum.sum(field, criteria, groupField);
    }

    JsonArray sum(final String field, final JsonObject criteria, final String... groupFields) {
        return this.sum.sum(field, criteria, groupFields);
    }

    // ---------------------- Max Operation -------------
    BigDecimal max(final String field, final JsonObject criteria) {
        return this.max.max(field, criteria);
    }

    ConcurrentMap max(final String field, final JsonObject criteria, final String groupField) {
        return this.max.max(field, criteria, groupField);
    }

    JsonArray max(final String field, final JsonObject criteria, final String... groupFields) {
        return this.max.max(field, criteria, groupFields);
    }

    // ---------------------- Min Operation -------------
    BigDecimal min(final String field, final JsonObject criteria) {
        return this.min.min(field, criteria);
    }

    ConcurrentMap min(final String field, final JsonObject criteria, final String groupField) {
        return this.min.min(field, criteria, groupField);
    }

    JsonArray min(final String field, final JsonObject criteria, final String... groupFields) {
        return this.min.min(field, criteria, groupFields);
    }

    // ---------------------- Avg Operation -------------
    BigDecimal avg(final String field, final JsonObject criteria) {
        return this.avg.avg(field, criteria);
    }

    ConcurrentMap avg(final String field, final JsonObject criteria, final String groupField) {
        return this.avg.avg(field, criteria, groupField);
    }

    JsonArray avg(final String field, final JsonObject criteria, final String... groupFields) {
        return this.avg.avg(field, criteria, groupFields);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy