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);
}
},