@Nullable static Supplier<Object> supplierFromObjectSelector(final BaseObjectColumnValueSelector<?> selector) { if (selector instanceof NilColumnValueSelector) { return null; } final Class<?> clazz = selector.classOfObject(); if (Number.class.isAssignableFrom(clazz) || String.class.isAssignableFrom(clazz)) { // Number, String supported as-is. return selector::getObject; } else if (clazz.isAssignableFrom(Number.class) || clazz.isAssignableFrom(String.class)) { // Might be Numbers and Strings. Use a selector that double-checks. return () -> { final Object val = selector.getObject(); if (val instanceof Number || val instanceof String) { return val; } else { return null; } }; } else { // No numbers or strings. return null; } } }
@Override public Aggregator factorize(ColumnSelectorFactory metricFactory) { BaseObjectColumnValueSelector selector = metricFactory.makeColumnValueSelector(fieldName); if (selector instanceof NilColumnValueSelector) { return NoopAggregator.instance(); } final Class classOfObject = selector.classOfObject(); if (classOfObject.equals(Object.class) || HyperLogLogCollector.class.isAssignableFrom(classOfObject)) { return new HyperUniquesAggregator(selector); } throw new IAE("Incompatible type for metric[%s], expected a HyperUnique, got a %s", fieldName, classOfObject); }
@Override public BufferAggregator factorizeBuffered(ColumnSelectorFactory metricFactory) { BaseObjectColumnValueSelector selector = metricFactory.makeColumnValueSelector(fieldName); if (selector instanceof NilColumnValueSelector) { return NoopBufferAggregator.instance(); } final Class classOfObject = selector.classOfObject(); if (classOfObject.equals(Object.class) || HyperLogLogCollector.class.isAssignableFrom(classOfObject)) { return new HyperUniquesBufferAggregator(selector); } throw new IAE("Incompatible type for metric[%s], expected a HyperUnique, got a %s", fieldName, classOfObject); }
@Nullable static Supplier<Object> supplierFromObjectSelector(final BaseObjectColumnValueSelector<?> selector) { if (selector instanceof NilColumnValueSelector) { return null; } final Class<?> clazz = selector.classOfObject(); if (Number.class.isAssignableFrom(clazz) || String.class.isAssignableFrom(clazz)) { // Number, String supported as-is. return selector::getObject; } else if (clazz.isAssignableFrom(Number.class) || clazz.isAssignableFrom(String.class)) { // Might be Numbers and Strings. Use a selector that double-checks. return () -> { final Object val = selector.getObject(); if (val instanceof Number || val instanceof String) { return val; } else { return null; } }; } else { // No numbers or strings. return null; } } }
@Override public BufferAggregator factorizeBuffered(ColumnSelectorFactory metricFactory) { BaseObjectColumnValueSelector selector = metricFactory.makeColumnValueSelector(fieldName); if (selector instanceof NilColumnValueSelector) { return NoopBufferAggregator.instance(); } final Class classOfObject = selector.classOfObject(); if (classOfObject.equals(Object.class) || HyperLogLogCollector.class.isAssignableFrom(classOfObject)) { return new HyperUniquesBufferAggregator(selector); } throw new IAE("Incompatible type for metric[%s], expected a HyperUnique, got a %s", fieldName, classOfObject); }
@Override public Aggregator factorize(ColumnSelectorFactory metricFactory) { BaseObjectColumnValueSelector selector = metricFactory.makeColumnValueSelector(fieldName); if (selector instanceof NilColumnValueSelector) { return NoopAggregator.instance(); } final Class classOfObject = selector.classOfObject(); if (classOfObject.equals(Object.class) || HyperLogLogCollector.class.isAssignableFrom(classOfObject)) { return new HyperUniquesAggregator(selector); } throw new IAE("Incompatible type for metric[%s], expected a HyperUnique, got a %s", fieldName, classOfObject); }