Skip to content

Commit 9d43655

Browse files
authored
Merge pull request JanKaul#166 from splitgraph/update-view-order-upstream
Avoid unneeded schema change for view updates
2 parents 73922cd + bdab371 commit 9d43655

1 file changed

Lines changed: 34 additions & 19 deletions

File tree

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)