{"record":{"id":"312c41af6ea28ff5","repo":"pentaho/pentaho-kettle","slug":"unknown-storage-type-storagetype-specified","errorCode":null,"errorMessage":" : Unknown storage type \" + storageType + \" specified.","messagePattern":" : Unknown storage type \" \\+ storageType \\+ \" specified\\.","errorType":"exception","errorClass":"KettleValueException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/org/pentaho/di/core/row/value/ValueMetaBase.java","lineNumber":1874,"sourceCode":"              throw new KettleValueException( toString() + \" : Unknown storage type \" + storageType + \" specified.\" );\n          }\n          break;\n\n        case TYPE_BIGNUMBER:\n          switch ( storageType ) {\n            case STORAGE_TYPE_NORMAL:\n              string = convertBigNumberToString( (BigDecimal) object );\n              break;\n            case STORAGE_TYPE_BINARY_STRING:\n              string = convertBigNumberToString( (BigDecimal) convertBinaryStringToNativeType( (byte[]) object ) );\n              break;\n            case STORAGE_TYPE_INDEXED:\n              string =\n                  object == null ? null\n                      : convertBigNumberToString( (BigDecimal) index[( (Integer) object ).intValue()] );\n              break;\n            default:\n              throw new KettleValueException( toString() + \" : Unknown storage type \" + storageType + \" specified.\" );\n          }\n          break;\n\n        case TYPE_BOOLEAN:\n          switch ( storageType ) {\n            case STORAGE_TYPE_NORMAL:\n              string = convertBooleanToString( (Boolean) object );\n              break;\n            case STORAGE_TYPE_BINARY_STRING:\n              string = convertBooleanToString( (Boolean) convertBinaryStringToNativeType( (byte[]) object ) );\n              break;\n            case STORAGE_TYPE_INDEXED:\n              string =\n                  object == null ? null : convertBooleanToString( (Boolean) index[( (Integer) object ).intValue()] );\n              break;\n            default:\n              throw new KettleValueException( toString() + \" : Unknown storage type \" + storageType + \" specified.\" );\n          }","sourceCodeStart":1856,"sourceCodeEnd":1892,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/core/src/main/java/org/pentaho/di/core/row/value/ValueMetaBase.java#L1856-L1892","documentation":"In the TYPE_BIGNUMBER (BigDecimal) conversion branch of ValueMetaBase, an unrecognized storageType falls to the switch default and throws KettleValueException. The message includes the meta's toString() and the raw storageType integer so you can identify which field's metadata is broken.","triggerScenarios":"getString()/toString() on a TYPE_BIGNUMBER ValueMeta whose storageType is not NORMAL, INDEXED, or BINARY_STRING; typical after manually built metadata or corrupted serialization round-trips.","commonSituations":"Custom steps handling BigDecimal fields (financial data) with hand-set storage constants; metadata migrated across Pentaho/Kettle major versions; bytecode-manipulation or reflection utilities corrupting metadata fields.","solutions":["Set meta.setStorageType(ValueMetaInterface.STORAGE_TYPE_NORMAL) when the data is a plain BigDecimal","Check getStorageType() against the valid constants before calling toString/getString and normalize invalid values","Rebuild the step metadata and re-save the transformation through supported PDI tooling","Keep the Kettle engine version uniform across the pipeline"],"exampleFix":"// before\nString s = bigDecMeta.toString(data); // bad storageType -> throws\n// after\nbigDecMeta.setStorageType(ValueMetaInterface.STORAGE_TYPE_NORMAL);\nString s = bigDecMeta.toString(data);","handlingStrategy":"validation","validationCode":"if (bdMeta.getType() == ValueMetaInterface.TYPE_BIGNUMBER) {\n  int st = bdMeta.getStorageType();\n  if (st != ValueMetaInterface.STORAGE_TYPE_NORMAL\n      && st != ValueMetaInterface.STORAGE_TYPE_INDEXED\n      && st != ValueMetaInterface.STORAGE_TYPE_BINARY_STRING) {\n    bdMeta.setStorageType(ValueMetaInterface.STORAGE_TYPE_NORMAL);\n  }\n}","typeGuard":"boolean safeBigNumberMeta(ValueMetaInterface m) {\n  return m != null && m.getType() == ValueMetaInterface.TYPE_BIGNUMBER && isKnownStorageType(m);\n}","tryCatchPattern":"try {\n  String s = bdMeta.toString(data);\n} catch (KettleValueException e) {\n  logError(\"Invalid storage type on bigdecimal field \" + bdMeta.getName());\n  bdMeta.setStorageType(ValueMetaInterface.STORAGE_TYPE_NORMAL);\n  String s = bdMeta.toString(data);\n}","preventionTips":["Use STORAGE_TYPE_* constants, never raw integers","Validate metadata produced by dynamic/reflective metadata generators","Keep the Kettle engine version uniform across pipeline nodes","Add storageType assertions in integration tests for BigDecimal-heavy steps"],"tags":["kettle","value-metadata","storage-type","bigdecimal"],"backgroundTag":"invalid-enum-value","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}