MCPcopy Index your code
hub / github.com/bytebase/bytebase / compareEnumTypes

Function compareEnumTypes

backend/plugin/schema/differ.go:1911–1962  ·  view source on GitHub ↗

compareEnumTypes compares enum types between two schemas.

(diff *MetadataDiff, schemaName string, oldSchema, newSchema *model.SchemaMetadata)

Source from the content-addressed store, hash-verified

1909
1910// compareEnumTypes compares enum types between two schemas.
1911func 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.
1965func enumValuesEqual(oldValues, newValues []string) bool {

Callers 1

compareSchemaObjectsFunction · 0.85

Calls 3

enumValuesEqualFunction · 0.85
GetProtoMethod · 0.45
GetSkipDumpMethod · 0.45

Tested by

no test coverage detected