@@ -124,6 +124,24 @@ def __init__(self, name, member_name_old, member_name_new):
124124 )
125125
126126
127+ class AddedVectorMember (SchemaChange ):
128+ """Class representing an added VectorMember"""
129+
130+ def __init__ (self , member , datatype ):
131+ self .member = member
132+ self .klassname = datatype
133+ super ().__init__ (f"'{ self .klassname } ' has added a vector member '{ self .member } '" )
134+
135+
136+ class DroppedVectorMember (SchemaChange ):
137+ """Class representing a dropped VectorMember"""
138+
139+ def __init__ (self , member , datatype ):
140+ self .member = member
141+ self .klassname = datatype
142+ super ().__init__ (f"'{ self .klassname } ' has a dropped member '{ self .member .name } " )
143+
144+
127145class RootIoRule :
128146 """A placeholder IORule class"""
129147
@@ -234,6 +252,15 @@ def _compare_datatypes(self) -> None:
234252 "Members" ,
235253 )
236254
255+ self ._compare_members (
256+ kept_types ,
257+ self .datamodel_new .datatypes ,
258+ self .datamodel_old .datatypes ,
259+ "VectorMembers" ,
260+ AddedVectorMember ,
261+ DroppedVectorMember ,
262+ )
263+
237264 def _compare_members (
238265 self ,
239266 definitions ,
@@ -336,6 +363,12 @@ def heuristics(self):
336363 added_members = [change for change in schema_changes if isinstance (change , AddedMember )]
337364 self .heuristics_members (added_members , dropped_members , schema_changes )
338365
366+ added_vecmems = [c for c in schema_changes if isinstance (c , AddedVectorMember )]
367+ for vmc in added_vecmems :
368+ self .errors .append (
369+ f"Forbidden schema change in '{ vmc .klassname } ': Added vector member '{ vmc .member } '"
370+ )
371+
339372 # are the member changes actually supported/supportable?
340373 changed_members = [
341374 change for change in schema_changes if isinstance (change , ChangedMember )
0 commit comments