compareViews compares views between two schemas.
(engine storepb.Engine, diff *MetadataDiff, schemaName string, oldSchema, newSchema *model.SchemaMetadata)
| 1498 | |
| 1499 | // compareViews compares views between two schemas. |
| 1500 | func 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 { |
no test coverage detected