From 760a94f221ac6e7f472a3417a7bf4777b9d02136 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8C=83=E5=9D=A4?= Date: Mon, 23 Mar 2026 20:49:55 +0800 Subject: [PATCH] fix fork_database error mapping for existing destination Convert MySQL/SeekDB duplicate database errors (1007) in fork_database to ValueError so SDK callers receive stable exceptions and the destination-exists integration test passes. Made-with: Cursor --- src/pyseekdb/client/client_base.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/pyseekdb/client/client_base.py b/src/pyseekdb/client/client_base.py index 88411e0..b9c104b 100644 --- a/src/pyseekdb/client/client_base.py +++ b/src/pyseekdb/client/client_base.py @@ -595,7 +595,17 @@ def fork_database(self, source_name: str, destination_name: str, tenant: str = D effective_tenant = self._database_tenant(tenant) logger.debug(f"Forking database: {source_name} -> {destination_name}{self._database_context(effective_tenant)}") sql = f"FORK DATABASE `{source_name}` TO `{destination_name}`" - self._execute(sql) + try: + self._execute(sql) + except Exception as ex: + args = getattr(ex, "args", ()) + if args and isinstance(args[0], int) and args[0] == 1007: + raise ValueError(f"Database '{destination_name}' already exists") from ex + + msg = str(ex).lower() + if ("database exists" in msg or "already exists" in msg) and "database" in msg: + raise ValueError(f"Database '{destination_name}' already exists") from ex + raise logger.debug(f"✅ Successfully forked database '{source_name}' to '{destination_name}'") return self.get_database(destination_name, tenant=tenant)