Skip to content

Commit 550e338

Browse files
engalarengalarclaude
authored
fix: CREATE OR REPLACE PAGE reuses existing UUID (#72)
When a page already exists, UpdatePage now preserves the original UUID instead of generating a new one, avoiding git delete+add churn. Co-authored-by: engalar <wengao.liu@siemens.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 295c757 commit 550e338

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

mdl/executor/cmd_pages_create_v3.go

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,23 @@ func (e *Executor) execCreatePageV3(s *ast.CreatePageStmtV3) error {
5959
return fmt.Errorf("failed to build page: %w", err)
6060
}
6161

62-
// Delete old pages only after successful build
63-
for _, id := range pagesToDelete {
64-
if err := e.writer.DeletePage(id); err != nil {
65-
return fmt.Errorf("failed to delete existing page: %w", err)
62+
// Replace or create the page in the MPR
63+
if len(pagesToDelete) > 0 {
64+
// Reuse first existing page's UUID to avoid git delete+add (which crashes Studio Pro RevStatusCache)
65+
page.ID = pagesToDelete[0]
66+
if err := e.writer.UpdatePage(page); err != nil {
67+
return fmt.Errorf("failed to update page: %w", err)
68+
}
69+
// Delete any additional duplicates
70+
for _, id := range pagesToDelete[1:] {
71+
if err := e.writer.DeletePage(id); err != nil {
72+
return fmt.Errorf("failed to delete duplicate page: %w", err)
73+
}
74+
}
75+
} else {
76+
if err := e.writer.CreatePage(page); err != nil {
77+
return fmt.Errorf("failed to create page: %w", err)
6678
}
67-
}
68-
69-
// Create the page in the MPR
70-
if err := e.writer.CreatePage(page); err != nil {
71-
return fmt.Errorf("failed to create page: %w", err)
7279
}
7380

7481
// Track the created page so it can be resolved by subsequent page references

0 commit comments

Comments
 (0)