Skip to content

Commit b54815e

Browse files
Merge branch 'JanKaul:main' into main
2 parents 642d470 + 9d43655 commit b54815e

3 files changed

Lines changed: 45 additions & 27 deletions

File tree

catalogs/iceberg-rest-catalog/src/apis/configuration.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ pub struct ApiKey {
4545
pub struct AWSv4Key {
4646
pub access_key: String,
4747
pub secret_key: SecretString,
48+
pub session_token: Option<SecretString>,
4849
pub region: String,
4950
pub service: String,
5051
}
@@ -62,15 +63,17 @@ impl AWSv4Key {
6263
.body(body)
6364
.unwrap();
6465
let signing_settings = SigningSettings::default();
65-
let signing_params = SigningParams::builder()
66+
let mut builder = SigningParams::builder()
6667
.access_key(self.access_key.as_str())
6768
.secret_key(self.secret_key.expose_secret().as_str())
6869
.region(self.region.as_str())
6970
.service_name(self.service.as_str())
7071
.time(SystemTime::now())
71-
.settings(signing_settings)
72-
.build()
73-
.unwrap();
72+
.settings(signing_settings);
73+
if let Some(session_token) = &self.session_token {
74+
builder.set_security_token(Some(session_token.expose_secret().as_str()));
75+
}
76+
let signing_params = builder.build().unwrap();
7477
let signable_request = SignableRequest::from(&request);
7578
let (mut signing_instructions, _signature) =
7679
sign(signable_request, &signing_params)?.into_parts();

catalogs/iceberg-rest-catalog/src/catalog.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ impl Catalog for RestCatalog {
9393
catalog_api_api::drop_namespace(
9494
&self.configuration,
9595
self.name.as_deref(),
96-
&namespace.url_encode(),
96+
&namespace.to_string(),
9797
)
9898
.await
9999
.map_err(Into::<Error>::into)?;
@@ -107,7 +107,7 @@ impl Catalog for RestCatalog {
107107
let response = catalog_api_api::load_namespace_metadata(
108108
&self.configuration,
109109
self.name.as_deref(),
110-
&namespace.url_encode(),
110+
&namespace.to_string(),
111111
)
112112
.await
113113
.map_err(Into::<Error>::into)?;
@@ -123,7 +123,7 @@ impl Catalog for RestCatalog {
123123
catalog_api_api::update_properties(
124124
&self.configuration,
125125
self.name.as_deref(),
126-
&namespace.url_encode(),
126+
&namespace.to_string(),
127127
models::UpdateNamespacePropertiesRequest { updates, removals },
128128
)
129129
.await
@@ -135,7 +135,7 @@ impl Catalog for RestCatalog {
135135
match catalog_api_api::namespace_exists(
136136
&self.configuration,
137137
self.name.as_deref(),
138-
&namespace.url_encode(),
138+
&namespace.to_string(),
139139
)
140140
.await
141141
{

iceberg-rust/src/view/transaction/operation.rs

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,17 @@ impl Operation {
4747
schema,
4848
branch,
4949
} => {
50+
let schema_changed = metadata.current_schema(branch.as_deref())
51+
.map(|s| schema != *s.fields())
52+
.unwrap_or(true);
53+
5054
let version = metadata.current_version(branch.as_deref())?;
5155
let version_id = metadata.versions.keys().max().unwrap_or(&0) + 1;
52-
let schema_id = metadata.schemas.keys().max().unwrap_or(&0) + 1;
56+
let schema_id = if schema_changed {
57+
metadata.schemas.keys().max().unwrap_or(&0) + 1
58+
} else {
59+
*metadata.current_schema(branch.as_deref()).unwrap().schema_id()
60+
};
5361
let last_column_id = schema.iter().map(|x| x.id).max().unwrap_or(0);
5462

5563
let version = Version {
@@ -72,28 +80,35 @@ impl Operation {
7280

7381
let branch_name = branch.unwrap_or("main".to_string());
7482

83+
let mut view_updates: Vec<ViewUpdate<T>> = if schema_changed {
84+
vec![ViewUpdate::AddSchema {
85+
schema: Schema::from_struct_type(schema, schema_id, None),
86+
last_column_id: Some(last_column_id),
87+
}]
88+
} else {
89+
vec![]
90+
};
91+
92+
view_updates.append(&mut vec![
93+
ViewUpdate::AddViewVersion {
94+
view_version: version,
95+
},
96+
ViewUpdate::SetCurrentViewVersion {
97+
view_version_id: version_id,
98+
},
99+
ViewUpdate::SetProperties {
100+
updates: HashMap::from_iter(vec![(
101+
REF_PREFIX.to_string() + &branch_name,
102+
version_id.to_string(),
103+
)]),
104+
},
105+
]);
106+
75107
Ok((
76108
Some(ViewRequirement::AssertViewUuid {
77109
uuid: metadata.view_uuid,
78110
}),
79-
vec![
80-
ViewUpdate::AddViewVersion {
81-
view_version: version,
82-
},
83-
ViewUpdate::SetCurrentViewVersion {
84-
view_version_id: version_id,
85-
},
86-
ViewUpdate::AddSchema {
87-
schema: Schema::from_struct_type(schema, schema_id, None),
88-
last_column_id: Some(last_column_id),
89-
},
90-
ViewUpdate::SetProperties {
91-
updates: HashMap::from_iter(vec![(
92-
REF_PREFIX.to_string() + &branch_name,
93-
version_id.to_string(),
94-
)]),
95-
},
96-
],
111+
view_updates,
97112
))
98113
}
99114
Operation::UpdateProperties(entries) => Ok((

0 commit comments

Comments
 (0)