compareEnumTypes compares enum types between two schemas.
(diff *MetadataDiff, schemaName string, oldSchema, newSchema *model.SchemaMetadata)
| 1909 | |
| 1910 | // compareEnumTypes compares enum types between two schemas. |
| 1911 | func compareEnumTypes(diff *MetadataDiff, schemaName string, oldSchema, newSchema *model.SchemaMetadata) { |
| 1912 | oldSchemaProto := oldSchema.GetProto() |
| 1913 | newSchemaProto := newSchema.GetProto() |
| 1914 | |
| 1915 | // Build maps of enum types |
| 1916 | oldEnumMap := make(map[string]*storepb.EnumTypeMetadata) |
| 1917 | for _, enum := range oldSchemaProto.EnumTypes { |
| 1918 | if !enum.GetSkipDump() { |
| 1919 | oldEnumMap[enum.Name] = enum |
| 1920 | } |
| 1921 | } |
| 1922 | |
| 1923 | newEnumMap := make(map[string]*storepb.EnumTypeMetadata) |
| 1924 | for _, enum := range newSchemaProto.EnumTypes { |
| 1925 | if !enum.GetSkipDump() { |
| 1926 | newEnumMap[enum.Name] = enum |
| 1927 | } |
| 1928 | } |
| 1929 | |
| 1930 | // Check for dropped enum types |
| 1931 | for enumName, oldEnum := range oldEnumMap { |
| 1932 | if _, exists := newEnumMap[enumName]; !exists { |
| 1933 | diff.EnumTypeChanges = append(diff.EnumTypeChanges, &EnumTypeDiff{ |
| 1934 | Action: MetadataDiffActionDrop, |
| 1935 | SchemaName: schemaName, |
| 1936 | EnumTypeName: enumName, |
| 1937 | OldEnumType: oldEnum, |
| 1938 | }) |
| 1939 | } |
| 1940 | } |
| 1941 | |
| 1942 | // Check for new and modified enum types |
| 1943 | for enumName, newEnum := range newEnumMap { |
| 1944 | if oldEnum, exists := oldEnumMap[enumName]; !exists { |
| 1945 | diff.EnumTypeChanges = append(diff.EnumTypeChanges, &EnumTypeDiff{ |
| 1946 | Action: MetadataDiffActionCreate, |
| 1947 | SchemaName: schemaName, |
| 1948 | EnumTypeName: enumName, |
| 1949 | NewEnumType: newEnum, |
| 1950 | }) |
| 1951 | } else if !enumValuesEqual(oldEnum.Values, newEnum.Values) { |
| 1952 | // Enum values changed - generate ALTER diff |
| 1953 | diff.EnumTypeChanges = append(diff.EnumTypeChanges, &EnumTypeDiff{ |
| 1954 | Action: MetadataDiffActionAlter, |
| 1955 | SchemaName: schemaName, |
| 1956 | EnumTypeName: enumName, |
| 1957 | OldEnumType: oldEnum, |
| 1958 | NewEnumType: newEnum, |
| 1959 | }) |
| 1960 | } |
| 1961 | } |
| 1962 | } |
| 1963 | |
| 1964 | // enumValuesEqual checks if two enum value slices are equal. |
| 1965 | func enumValuesEqual(oldValues, newValues []string) bool { |
no test coverage detected