@@ -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