Skip to content

Commit c806fa6

Browse files
engalarclaude
andcommitted
fix: CREATE OR REPLACE PAGE reuses existing UUID
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: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent e464177 commit c806fa6

1 file changed

Lines changed: 16 additions & 9 deletions

File tree

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)