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

Function compareViews

backend/plugin/schema/differ.go:1500–1570  ·  view source on GitHub ↗

compareViews compares views between two schemas.

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

Source from the content-addressed store, hash-verified

1498
1499// compareViews compares views between two schemas.
1500func compareViews(engine storepb.Engine, diff *MetadataDiff, schemaName string, oldSchema, newSchema *model.SchemaMetadata) {
1501 // Get the engine-specific view comparer
1502 comparer := GetViewComparer(engine)
1503 // Check for dropped views
1504 for _, viewName := range oldSchema.ListViewNames() {
1505 if newSchema.GetView(viewName) == nil {
1506 oldView := oldSchema.GetView(viewName)
1507 if oldView != nil && !oldView.SkipDump {
1508 diff.ViewChanges = append(diff.ViewChanges, &ViewDiff{
1509 Action: MetadataDiffActionDrop,
1510 SchemaName: schemaName,
1511 ViewName: viewName,
1512 OldView: oldView,
1513 })
1514 }
1515 }
1516 }
1517
1518 // Check for new and modified views
1519 for _, viewName := range newSchema.ListViewNames() {
1520 newView := newSchema.GetView(viewName)
1521 if newView == nil || newView.SkipDump {
1522 continue
1523 }
1524
1525 oldView := oldSchema.GetView(viewName)
1526 if oldView == nil {
1527 diff.ViewChanges = append(diff.ViewChanges, &ViewDiff{
1528 Action: MetadataDiffActionCreate,
1529 SchemaName: schemaName,
1530 ViewName: viewName,
1531 NewView: newView,
1532 })
1533 } else if !oldView.SkipDump {
1534 // Use engine-specific comparison
1535 changes, err := comparer.CompareView(oldView, newView)
1536 if err != nil {
1537 // Fallback to simple definition comparison on error
1538 if oldView.Definition != newView.Definition {
1539 diff.ViewChanges = append(diff.ViewChanges, &ViewDiff{
1540 Action: MetadataDiffActionAlter,
1541 SchemaName: schemaName,
1542 ViewName: viewName,
1543 OldView: oldView,
1544 NewView: newView,
1545 })
1546 }
1547 } else if len(changes) > 0 {
1548 // Check if any change requires recreation
1549 requiresRecreation := false
1550 for _, change := range changes {
1551 if change.RequiresRecreation {
1552 requiresRecreation = true
1553 break
1554 }
1555 }
1556
1557 if requiresRecreation {

Callers 1

compareSchemaObjectsFunction · 0.70

Calls 4

GetViewComparerFunction · 0.85
ListViewNamesMethod · 0.80
CompareViewMethod · 0.65
GetViewMethod · 0.45

Tested by

no test coverage detected