| 79 | 79 | | "DELETE FROM trial_grants WHERE workspace = ?2", |
| 80 | 80 | | "UPDATE OR IGNORE storage_days SET workspace = ?1 WHERE workspace = ?2", |
| 81 | 81 | | "DELETE FROM storage_days WHERE workspace = ?2", |
| 82 | + | "UPDATE OR IGNORE package_storage_days SET workspace = ?1 WHERE workspace = ?2", |
| 83 | + | "DELETE FROM package_storage_days WHERE workspace = ?2", |
| 84 | + | // Month-end snapshots, by day: the current slug's stays if it has one. |
| 85 | + | "UPDATE OR IGNORE pending_days SET workspace = ?1 WHERE workspace = ?2", |
| 86 | + | "DELETE FROM pending_days WHERE workspace = ?2", |
| 87 | + | // Model tokens, by day, person, session and model: the counts add. |
| 88 | + | "INSERT INTO token_usage (day, workspace, person, session, model, tier, input, output, cache_read, cache_write, requests) |
| 89 | + | SELECT day, ?1, person, session, model, tier, input, output, cache_read, cache_write, requests FROM token_usage WHERE workspace = ?2 |
| 90 | + | ON CONFLICT (day, workspace, person, session, model) DO UPDATE SET |
| 91 | + | input = token_usage.input + excluded.input, |
| 92 | + | output = token_usage.output + excluded.output, |
| 93 | + | cache_read = token_usage.cache_read + excluded.cache_read, |
| 94 | + | cache_write = token_usage.cache_write + excluded.cache_write, |
| 95 | + | requests = token_usage.requests + excluded.requests", |
| 96 | + | "DELETE FROM token_usage WHERE workspace = ?2", |
| 97 | + | // Price notices sent, one per version: told once is told. |
| 98 | + | "UPDATE OR IGNORE price_notices SET workspace = ?1 WHERE workspace = ?2", |
| 99 | + | "DELETE FROM price_notices WHERE workspace = ?2", |
| 100 | + | "UPDATE OR IGNORE closed_workspaces SET workspace = ?1 WHERE workspace = ?2", |
| 101 | + | "DELETE FROM closed_workspaces WHERE workspace = ?2", |
| 102 | + | // The margin figures and counts are redone each day from the ledger and |
| 103 | + | // the meters; moved so the days between keep adding up. |
| 104 | + | "UPDATE OR IGNORE workspace_costs SET workspace = ?1 WHERE workspace = ?2", |
| 105 | + | "DELETE FROM workspace_costs WHERE workspace = ?2", |
| 106 | + | "UPDATE OR IGNORE own_counts SET workspace = ?1 WHERE workspace = ?2", |
| 107 | + | "DELETE FROM own_counts WHERE workspace = ?2", |
| 108 | + | "UPDATE margin_alerts SET subject = ?1 WHERE kind = 'workspace' AND subject = ?2", |
| 82 | 109 | | // Holds, spikes, requests and the plan's payments: many per workspace. |
| 83 | 110 | | "UPDATE reservations SET workspace = ?1 WHERE workspace = ?2", |
| 84 | 111 | | "UPDATE reservations SET repo = ?1 || substr(repo, length(?2) + 1) WHERE substr(repo, 1, length(?2) + 1) = ?2 || '/'", |
| ⋯ |
| 147 | 174 | | "UPDATE OR IGNORE billing_accounts SET id = ?3, name = CASE WHEN name = ?2 THEN ?1 ELSE name END WHERE id = ?4", |
| 148 | 175 | | "DELETE FROM billing_accounts WHERE id = ?4", |
| 149 | 176 | | "UPDATE admin_actions SET account = ?3 WHERE account = ?4", |
| 177 | + | "UPDATE OR IGNORE budget_alerts SET account = ?3 WHERE account = ?4", |
| 178 | + | "DELETE FROM budget_alerts WHERE account = ?4", |
| 150 | 179 | | "UPDATE account_members SET account_id = ?3 WHERE account_id = ?4", |
| 151 | 180 | | "UPDATE enterprise_invoices SET account_id = ?3 WHERE account_id = ?4", |
| 152 | 181 | | ]; |
| ⋯ |
| 278 | 307 | | "enterprise_invoice_lines", "billing_accounts", "admin_actions", "enterprise_invoices", |
| 279 | 308 | | "allowance_use", "trial_grants", "storage_days", |
| 280 | 309 | | "reservations", "spikes", "limit_requests", "plan_payments", "card_checks", "alerts_sent", |
| 310 | + | "package_storage_days", "pending_days", "token_usage", "price_notices", "closed_workspaces", |
| 311 | + | "workspace_costs", "own_counts", |
| 281 | 312 | | ] { |
| 282 | 313 | | assert!(all.contains(&format!("FROM {table} WHERE workspace = ?2")) |
| 283 | 314 | | || all.contains(&format!("UPDATE {table} SET")) |