_constructGroupByParam()

in lib/protocol/encoder.js [883:1004]


    _constructGroupByParam(groupByType, groupBy) {
        switch (groupByType) {
            case TableStore.GroupByType.GROUP_BY_FIELD: {
                let properties = {
                    fieldName: groupBy.fieldName,
                    size: groupBy.size,
                    minDocCount: groupBy.minDocCount,
                };
                if (groupBy.sort) {
                    properties.sort = TableStore.encoder._makeGroupBySort(groupBy.sort);
                }
                TableStore.encoder._makeSubAggsAndSubGroupBys(properties, groupBy);
                return tsSearchProtos.GroupByField.create(properties);
            }
            case TableStore.GroupByType.GROUP_BY_RANGE: {
                const properties = {
                    fieldName: groupBy.fieldName,
                    ranges: TableStore.encoder._makeRange(groupBy.ranges),
                };
                TableStore.encoder._makeSubAggsAndSubGroupBys(properties, groupBy);
                return tsSearchProtos.GroupByRange.create(properties);
            }
            case TableStore.GroupByType.GROUP_BY_FILTER: {
                const properties = {
                    filters: [],
                };
                TableStore.util.arrayEach(groupBy.filters, function (f) {
                    let q = TableStore.encoder._makeQuery(f)
                    properties.filters.push(q);
                });
                TableStore.encoder._makeSubAggsAndSubGroupBys(properties, groupBy);
                return tsSearchProtos.GroupByFilter.create(properties);
            }
            case TableStore.GroupByType.GROUP_BY_GEO_DISTANCE: {
                const properties = {
                    fieldName: groupBy.fieldName,
                    ranges: TableStore.encoder._makeRange(groupBy.ranges),
                    origin: tsSearchProtos.GeoPoint.create(groupBy.origin),
                };
                TableStore.encoder._makeSubAggsAndSubGroupBys(properties, groupBy);
                return tsSearchProtos.GroupByGeoDistance.create(properties);
            }
            case TableStore.GroupByType.GROUP_BY_HISTOGRAM: {
                const properties = {
                    fieldName: groupBy.fieldName,
                    minDocCount: groupBy.minDocCount,
                };
                if (groupBy.sort) {
                    properties.sort = TableStore.encoder._makeGroupBySort(groupBy.sort);
                }
                if (groupBy.fieldRange) {
                    properties.fieldRange = TableStore.encoder._makeFieldRange(groupBy.fieldRange);
                }
                if (groupBy.interval) {
                    properties.interval = TableStore.PlainBufferBuilder.serializeSearchValue(groupBy.interval, "groupBy.interval");
                }
                if (groupBy.missing) {
                    properties.missing = TableStore.PlainBufferBuilder.serializeSearchValue(groupBy.missing, "groupByHistogram.missing");
                }
                if (groupBy.offset) {
                    properties.offset = TableStore.PlainBufferBuilder.serializeSearchValue(groupBy.offset, "groupByHistogram.offset");
                }
                TableStore.encoder._makeSubAggsAndSubGroupBys(properties, groupBy)
                return tsSearchProtos.GroupByHistogram.create(properties);
            }
            case TableStore.GroupByType.GROUP_BY_DATE_HISTOGRAM: {
                const properties = {
                    fieldName: groupBy.fieldName,
                    minDocCount: groupBy.minDocCount,
                };
                if (groupBy.sort) {
                    properties.sort = TableStore.encoder._makeGroupBySort(groupBy.sort);
                }
                if (groupBy.fieldRange) {
                    properties.fieldRange = TableStore.encoder._makeFieldRange(groupBy.fieldRange);
                }
                if (groupBy.interval) {
                    properties.interval = TableStore.encoder._makeDateTimeValue(groupBy.interval);
                }
                if (groupBy.missing) {
                    properties.missing = TableStore.PlainBufferBuilder.serializeSearchValue(groupBy.missing, "groupByDateHistogram.missing");
                }
                if (groupBy.offset) {
                    properties.offset = TableStore.encoder._makeDateTimeValue(groupBy.offset);
                }
                if (groupBy.timeZone) {
                    properties.timeZone = groupBy.timeZone;
                }
                TableStore.encoder._makeSubAggsAndSubGroupBys(properties, groupBy);
                return tsSearchProtos.GroupByDateHistogram.create(properties);
            }
            case TableStore.GroupByType.GROUP_BY_GEO_GRID: {
                const properties = {
                    fieldName: groupBy.fieldName,
                };
                if (groupBy.precision) {
                    properties.precision = groupBy.precision;
                }
                if (groupBy.size) {
                    properties.size = groupBy.size;
                }
                TableStore.encoder._makeSubAggsAndSubGroupBys(properties, groupBy);
                return tsSearchProtos.GroupByGeoGrid.create(properties);
            }
            case TableStore.GroupByType.GROUP_BY_COMPOSITE: {
                const properties = {};
                if (groupBy.nextToken) {
                    properties.nextToken = groupBy.nextToken;
                }
                if (groupBy.size) {
                    properties.size = groupBy.size;
                }
                if (groupBy.sources) {
                    properties.sources = TableStore.encoder._makeGroupBys(groupBy.sources);
                }
                TableStore.encoder._makeSubAggsAndSubGroupBys(properties, groupBy);
                return tsSearchProtos.GroupByComposite.create(properties);
            }
            default:
                throw new Error("not exist GroupByType: " + groupByType);
        }
    },