{"record":{"id":"a7e13a4aa339758c","repo":"apache/iceberg","slug":"errmsg-variant-double","errorCode":null,"errorMessage":"errMsg(variant, \"double\")","messagePattern":"errMsg\\(variant, \"double\"\\)","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"flink/v2.2/flink/src/main/java/org/apache/iceberg/flink/data/VariantRowDataWrapper.java","lineNumber":273,"sourceCode":"      default -> throw new UnsupportedOperationException(errMsg(variant, \"int\"));\n    };\n  }\n\n  private static long longValue(Variant variant) {\n    return switch (variant.getType()) {\n      case TINYINT -> variant.getByte();\n      case SMALLINT -> variant.getShort();\n      case INT -> variant.getInt();\n      case BIGINT -> variant.getLong();\n      default -> throw new UnsupportedOperationException(errMsg(variant, \"long\"));\n    };\n  }\n\n  private static double doubleValue(Variant variant) {\n    return switch (variant.getType()) {\n      case FLOAT -> variant.getFloat();\n      case DOUBLE -> variant.getDouble();\n      default -> throw new UnsupportedOperationException(errMsg(variant, \"double\"));\n    };\n  }\n\n  private static DecimalData decimalDataValue(Variant variant, DecimalType decimalType) {\n    return DecimalData.fromBigDecimal(\n        variant.getDecimal(), decimalType.getPrecision(), decimalType.getScale());\n  }\n\n  private static TimestampData timestampValue(Variant variant, int precision) {\n    return switch (variant.getType()) {\n      case TIMESTAMP -> TimestampData.fromLocalDateTime(variant.getDateTime());\n      case TIMESTAMP_LTZ -> TimestampData.fromInstant(variant.getInstant());\n      case BIGINT -> {\n        Preconditions.checkArgument(\n            precision >= MICROSECOND_PRECISION && precision <= NANOSECOND_PRECISION,\n            \"Invalid precision: %s. Only micros and nanos precision are supported.\",\n            precision);\n        yield precision > MICROSECOND_PRECISION","sourceCodeStart":255,"sourceCodeEnd":291,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/flink/v2.2/flink/src/main/java/org/apache/iceberg/flink/data/VariantRowDataWrapper.java#L255-L291","documentation":"doubleValue converts a Variant to a Flink double but supports only FLOAT and DOUBLE variant types. Other types throw UnsupportedOperationException with errMsg(variant, \"double\"). This is a guard against reading non-float variants (integers, decimals, strings) via getDouble.","triggerScenarios":"Calling getDouble(pos) or elementValue where the Variant's getType() is not FLOAT or DOUBLE — e.g. an INT or DECIMAL variant read through a DOUBLE Flink field.","commonSituations":"Variant column written as DECIMAL but read as DOUBLE; mixed-type variant data; incorrect Flink schema declaration for a variant field.","solutions":["Read decimal variants through the Decimal-typed accessor (getDecimal/decimalDataValue) instead.","Align the Flink field type with the actual variant physical type.","Pre-convert the variant value to a float/double if narrowing is intended."],"exampleFix":"// before\ndouble d = wrapper.getDouble(pos); // variant is DECIMAL\n// after\nBigDecimal bd = variant.getDecimal();\ndouble d = bd.doubleValue();","handlingStrategy":"type-guard","validationCode":"if (variant.getType() == Variant.Type.FLOAT || variant.getType() == Variant.Type.DOUBLE) { /* safe to getDouble */ }","typeGuard":"boolean isDoubleVariant(Variant v) { return v.getType() == Variant.Type.FLOAT || v.getType() == Variant.Type.DOUBLE; }","tryCatchPattern":"try { double d = wrapper.getDouble(pos); } catch (UnsupportedOperationException e) { /* handle decimal/string variants separately */ }","preventionTips":["Use the decimal accessor for DECIMAL variants, not getDouble.","Ensure writers emit float/double variants for DOUBLE-typed fields.","Cover decimal-to-double expectations in tests explicitly."],"tags":["flink","variant","type-mismatch"],"backgroundTag":"unsupported-operation","analyzedSha":"86d9c8fc543e7c56c9f624eb725f76c9baff9570","analyzedAt":"2026-09-12T00:46:39.097Z","contentChangedAt":"2026-09-12T00:46:39.097Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}