in src/main/java/org/apache/datasketches/server/UpdateHandler.java [193:282]
private static void processSingleUpdate(final SketchStorage.SketchEntry entry,
final JsonElement data) {
switch (entry.family_) {
case UNION:
assert(entry.type_ != null);
switch (entry.type_) {
case FLOAT: case DOUBLE:
((Union) entry.sketch_).update(data.getAsDouble());
break;
case INT: case LONG:
((Union) entry.sketch_).update(data.getAsLong());
break;
case STRING: default:
((Union) entry.sketch_).update(data.getAsString());
break;
}
break;
case CPC:
assert(entry.type_ != null);
switch (entry.type_) {
case FLOAT: case DOUBLE:
((CpcSketch) entry.sketch_).update(data.getAsDouble());
break;
case INT: case LONG:
((CpcSketch) entry.sketch_).update(data.getAsLong());
break;
case STRING: default:
((CpcSketch) entry.sketch_).update(data.getAsString());
break;
}
break;
case HLL:
assert(entry.type_ != null);
switch (entry.type_) {
case FLOAT: case DOUBLE:
((HllSketch) entry.sketch_).update(data.getAsDouble());
break;
case INT: case LONG:
((HllSketch) entry.sketch_).update(data.getAsLong());
break;
case STRING: default:
((HllSketch) entry.sketch_).update(data.getAsString());
break;
}
break;
case KLL:
((KllFloatsSketch) entry.sketch_).update(data.getAsFloat());
break;
case FREQUENCY:
if (data.isJsonObject()) {
final JsonObject inputPair = data.getAsJsonObject();
if (!inputPair.has(QUERY_PAIR_ITEM_FIELD) || !inputPair.has(QUERY_PAIR_WEIGHT_FIELD)) {
throw new IllegalArgumentException("Frequent Items input pairs must include both "
+ QUERY_PAIR_ITEM_FIELD + " and " + QUERY_PAIR_WEIGHT_FIELD + " values");
}
final String item = inputPair.get(QUERY_PAIR_ITEM_FIELD).getAsString();
final int weight = inputPair.get(QUERY_PAIR_WEIGHT_FIELD).getAsInt();
((ItemsSketch<String>) entry.sketch_).update(item, weight);
} else {
((ItemsSketch<String>) entry.sketch_).update(data.getAsString());
}
break;
case RESERVOIR:
((ReservoirItemsSketch<String>) entry.sketch_).update(data.getAsString());
break;
case VAROPT:
if (data.isJsonObject()) {
final JsonObject inputPair = data.getAsJsonObject();
if (!inputPair.has(QUERY_PAIR_ITEM_FIELD) || !inputPair.has(QUERY_PAIR_WEIGHT_FIELD)) {
throw new IllegalArgumentException("VarOpt input pairs must include both "
+ QUERY_PAIR_ITEM_FIELD + " and " + QUERY_PAIR_WEIGHT_FIELD + " values");
}
final String item = inputPair.get(QUERY_PAIR_ITEM_FIELD).getAsString();
final double weight = inputPair.get(QUERY_PAIR_WEIGHT_FIELD).getAsDouble();
((VarOptItemsSketch<String>) entry.sketch_).update(item, weight);
} else {
((VarOptItemsSketch<String>) entry.sketch_).update(data.getAsString(), 1.0);
}
break;
default:
throw new IllegalArgumentException("Unsupported sketch type: " + entry.family_);
}
}