MCPcopy Create free account
hub / github.com/apache/arrow / Parse

Method Parse

cpp/src/parquet/encryption/key_metadata.cc:38–70  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

36 : is_internal_storage_(true), key_material_or_reference_(key_material) {}
37
38KeyMetadata KeyMetadata::Parse(const std::string& key_metadata) {
39 ObjectParser json_parser;
40 ::arrow::Status status = json_parser.Parse(key_metadata);
41 if (!status.ok()) {
42 throw ParquetException("Failed to parse key metadata " + key_metadata);
43 }
44
45 // 1. Extract "key material type", and make sure it is supported
46 std::string key_material_type;
47 PARQUET_ASSIGN_OR_THROW(key_material_type,
48 json_parser.GetString(KeyMaterial::kKeyMaterialTypeField));
49 if (key_material_type != KeyMaterial::kKeyMaterialType1) {
50 throw ParquetException("Wrong key material type: " + key_material_type + " vs " +
51 KeyMaterial::kKeyMaterialType1);
52 }
53
54 // 2. Check if "key material" is stored internally in Parquet file key metadata, or is
55 // stored externally
56 bool is_internal_storage;
57 PARQUET_ASSIGN_OR_THROW(is_internal_storage,
58 json_parser.GetBool(kKeyMaterialInternalStorageField));
59
60 if (is_internal_storage) {
61 // 3.1 "key material" is stored internally, inside "key metadata" - parse it
62 KeyMaterial key_material = KeyMaterial::Parse(&json_parser);
63 return KeyMetadata(key_material);
64 } else {
65 // 3.2 "key material" is stored externally. "key metadata" keeps a reference to it
66 std::string key_reference;
67 PARQUET_ASSIGN_OR_THROW(key_reference, json_parser.GetString(kKeyReferenceField));
68 return KeyMetadata(key_reference);
69 }
70}
71
72// For external material only. For internal material, create serialized KeyMaterial
73// directly

Callers 3

LoadKeyMaterialMapMethod · 0.45

Calls 5

ParquetExceptionFunction · 0.85
ParseFunction · 0.50
okMethod · 0.45
GetStringMethod · 0.45
GetBoolMethod · 0.45

Tested by

no test coverage detected