{"record":{"id":"d265d48898c73b22","repo":"apache/druid","slug":"approximatehistogramfoldingbufferaggregator-does-n-d265d4","errorCode":null,"errorMessage":"ApproximateHistogramFoldingBufferAggregator does not support getLong()","messagePattern":"ApproximateHistogramFoldingBufferAggregator does not support getLong\\(\\)","errorType":"exception","errorClass":"java.lang.UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogramFoldingBufferAggregator.java","lineNumber":72,"sourceCode":"    innerAggregator.aggregate(buf, position, hNext);\n  }\n\n  @Override\n  public Object get(ByteBuffer buf, int position)\n  {\n    return innerAggregator.get(buf, position);\n  }\n\n  @Override\n  public float getFloat(ByteBuffer buf, int position)\n  {\n    throw new UnsupportedOperationException(\"ApproximateHistogramFoldingBufferAggregator does not support getFloat()\");\n  }\n\n  @Override\n  public long getLong(ByteBuffer buf, int position)\n  {\n    throw new UnsupportedOperationException(\"ApproximateHistogramFoldingBufferAggregator does not support getLong()\");\n  }\n\n  @Override\n  public double getDouble(ByteBuffer buf, int position)\n  {\n    throw new UnsupportedOperationException(\"ApproximateHistogramFoldingBufferAggregator does not support getDouble()\");\n  }\n\n  @Override\n  public void close()\n  {\n    // no resources to cleanup\n  }\n\n  @Override\n  public void inspectRuntimeShape(RuntimeShapeInspector inspector)\n  {\n    inspector.visit(\"selector\", selector);","sourceCodeStart":54,"sourceCodeEnd":90,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogramFoldingBufferAggregator.java#L54-L90","documentation":"ApproximateHistogramFoldingBufferAggregator.getLong() is deliberately unimplemented: the buffered aggregation produces an ApproximateHistogram, and no long representation exists. The method throws UnsupportedOperationException unconditionally when invoked.","triggerScenarios":"Calling ApproximateHistogramFoldingBufferAggregator.getLong(ByteBuffer, int), or queries whose result extraction path invokes getLong on a buffer-aggregated approxHistogramFold column.","commonSituations":"Engine code assuming every BufferAggregator implements getLong; queries mixing histogram folds with long-typed metric expectations; custom post-processing that reads raw aggregation buffers numerically.","solutions":["Extract numbers via histogram post-aggregators (quantile, min, max) rather than getLong().","Use a long-capable aggregator (longSum, longMax) on the raw column when a long result is needed.","In generic code, check aggregator output type or catch UnsupportedOperationException and fall back to histogram object access."],"exampleFix":"// before\nlong v = bufferAggregator.getLong(buf, position);\n// after\n// query JSON:\n// {\"type\": \"min\", \"fieldName\": \"histFold\"}\nlong v = (long) minPostAggResult;","handlingStrategy":"validation","validationCode":"// Verify long support before buffered accessor call:\nboolean isFoldBuffer = aggregator instanceof org.apache.druid.query.aggregation.histogram.ApproximateHistogramFoldingBufferAggregator;\nif (!isFoldBuffer) { value = aggregator.getLong(buf, position); }","typeGuard":"boolean supportsLong(Object agg) {\n  return !(agg instanceof org.apache.druid.query.aggregation.histogram.ApproximateHistogramFoldingBufferAggregator);\n}","tryCatchPattern":"try {\n  value = aggregator.getLong(buf, position);\n} catch (UnsupportedOperationException e) {\n  value = (long) maxFromHistogramBuffer(buf, position);\n}","preventionTips":["Do not call getLong on histogram folding buffer aggregators; it is unsupported by design.","Use long-capable aggregators when long output is required.","Keep a mapping of aggregator types to supported accessor methods in custom query engines."],"tags":["java","druid","aggregation","unsupported-operation"],"backgroundTag":"unsupported-operation","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}