diff --git a/google/cloud/spanner_dbapi/cursor.py b/google/cloud/spanner_dbapi/cursor.py index dccbf04dc8..cf15b99a55 100644 --- a/google/cloud/spanner_dbapi/cursor.py +++ b/google/cloud/spanner_dbapi/cursor.py @@ -21,6 +21,7 @@ from google.api_core.exceptions import FailedPrecondition from google.api_core.exceptions import InternalServerError from google.api_core.exceptions import InvalidArgument +from google.api_core.exceptions import OutOfRange from collections import namedtuple @@ -241,7 +242,7 @@ def execute(self, sql, args=None): self.connection.database.run_in_transaction( self._do_execute_update, sql, args or None ) - except (AlreadyExists, FailedPrecondition) as e: + except (AlreadyExists, FailedPrecondition, OutOfRange) as e: raise IntegrityError(e.details if hasattr(e, "details") else e) except InvalidArgument as e: raise ProgrammingError(e.details if hasattr(e, "details") else e) diff --git a/tests/unit/spanner_dbapi/test_cursor.py b/tests/unit/spanner_dbapi/test_cursor.py index 07deffd707..038f419351 100644 --- a/tests/unit/spanner_dbapi/test_cursor.py +++ b/tests/unit/spanner_dbapi/test_cursor.py @@ -251,6 +251,13 @@ def test_execute_integrity_error(self): with self.assertRaises(IntegrityError): cursor.execute(sql="sql") + with mock.patch( + "google.cloud.spanner_dbapi.parse_utils.classify_stmt", + side_effect=exceptions.OutOfRange("message"), + ): + with self.assertRaises(IntegrityError): + cursor.execute("sql") + def test_execute_invalid_argument(self): from google.api_core import exceptions from google.cloud.spanner_dbapi.exceptions import ProgrammingError