{"record":{"id":"aa4a9b200ca5734e","repo":"apache/iceberg","slug":"unsupported-type-double","errorCode":null,"errorMessage":"Unsupported type: double","messagePattern":"Unsupported type: double","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"arrow/src/main/java/org/apache/iceberg/arrow/vectorized/ArrowVectorAccessor.java","lineNumber":69,"sourceCode":"\n  public boolean getBoolean(int rowId) {\n    throw new UnsupportedOperationException(\"Unsupported type: boolean\");\n  }\n\n  public int getInt(int rowId) {\n    throw new UnsupportedOperationException(\"Unsupported type: int\");\n  }\n\n  public long getLong(int rowId) {\n    throw new UnsupportedOperationException(\"Unsupported type: long\");\n  }\n\n  public float getFloat(int rowId) {\n    throw new UnsupportedOperationException(\"Unsupported type: float\");\n  }\n\n  public double getDouble(int rowId) {\n    throw new UnsupportedOperationException(\"Unsupported type: double\");\n  }\n\n  public byte[] getBinary(int rowId) {\n    throw new UnsupportedOperationException(\"Unsupported type: binary\");\n  }\n\n  public DecimalT getDecimal(int rowId, int precision, int scale) {\n    throw new UnsupportedOperationException(\"Unsupported type: decimal\");\n  }\n\n  public Utf8StringT getUTF8String(int rowId) {\n    throw new UnsupportedOperationException(\"Unsupported type: UTF8String\");\n  }\n\n  public ArrayT getArray(int rowId) {\n    throw new UnsupportedOperationException(\"Unsupported type: array\");\n  }\n","sourceCodeStart":51,"sourceCodeEnd":87,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/arrow/src/main/java/org/apache/iceberg/arrow/vectorized/ArrowVectorAccessor.java#L51-L87","documentation":"The base ArrowVectorAccessor.getDouble(int) is an unimplemented stub that always throws. Double (float8) accessors must override it; calling the base means the accessor instance cannot read doubles. toFloat8Vector in the vectorized read path depends on the override.","triggerScenarios":"Reading a double column via an accessor that lacks the getDouble override — mis-mapped vector type in the accessor factory or base-class instantiation.","commonSituations":"Custom vectorized readers converting to engine double vectors; subclasses authored without a double override; new Arrow double vector types not routed correctly.","solutions":["Dispatch Float8Vector to an accessor overriding getDouble (return vector.get(rowId)).","Add the @Override getDouble to your subclass.","Fall back to non-vectorized reads if accessor wiring cannot be fixed immediately."],"exampleFix":"// before\nclass MyAccessor extends ArrowVectorAccessor<Float8Vector> { } // getDouble missing\n// after\n@Override public double getDouble(int rowId) { return vector.get(rowId); }","handlingStrategy":"type-guard","validationCode":"if (!(accessor instanceof DoubleAccessor)) { /* fallback */ }","typeGuard":"static boolean supportsDouble(ArrowVectorAccessor<?> a) {\n  return a.getClass() != ArrowVectorAccessor.class;\n}","tryCatchPattern":"try {\n  double v = accessor.getDouble(rowId);\n} catch (UnsupportedOperationException e) {\n  if (\"Unsupported type: double\".equals(e.getMessage())) { fallbackRead(rowId); } else { throw e; }\n}","preventionTips":["Map Float8Vector fields to double-capable accessors.","Override getDouble in subclasses.","Include double columns in accessor factory regression tests."],"tags":["arrow","unsupported-type","vectorized-read","double"],"backgroundTag":"method-not-implemented","analyzedSha":"86d9c8fc543e7c56c9f624eb725f76c9baff9570","analyzedAt":"2026-09-12T00:46:39.097Z","contentChangedAt":"2026-09-12T00:46:39.097Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}