Path: blob/main/singlestoredb/exceptions.py
469 views
#!/usr/bin/env python1"""Database exeception classes."""2from typing import Optional345class MySQLError(Exception):6"""All MySQL-related exceptions."""789class Error(MySQLError):10"""11Generic database exception.1213Parameters14----------15errno : int16Database error code17msg : str18Database error message19sqlstate : str, optional20SQL engine state code2122"""2324def __init__(25self, errno: Optional[int] = None, msg: Optional[str] = None,26sqlstate: Optional[int] = None,27):28self.errno = errno29self.errmsg = msg30self.sqlstate = sqlstate31super(Exception, self).__init__(errno, msg, sqlstate)3233def __str__(self) -> str:34"""Return string representation."""35prefix = []36if self.errno is not None:37prefix.append(f'{self.errno}')38if self.sqlstate is not None:39prefix.append(f'({self.sqlstate})')40if prefix and self.errmsg:41return ' '.join(prefix) + ': ' + self.errmsg42elif prefix:43return ' '.join(prefix)44elif self.errmsg:45return f'{self.errmsg}'46return 'Unknown error'4748def __repr__(self) -> str:49"""Return string representation."""50return str(self)5152@property53def msg(self) -> Optional[str]:54"""Return error message."""55return self.errmsg565758class Warning(Warning, MySQLError): # type: ignore59"""Exception for important warnings like data truncations, etc."""606162class InterfaceError(Error):63"""Exception for errors in the database interface rather than the database."""646566class DatabaseError(Error):67"""General exception for errors in the database."""686970class InternalError(DatabaseError):71"""Exception for internal database errors such as out of sync transactions."""727374class OperationalError(DatabaseError):75"""Exception for operational errors such as unexpected disconnections."""767778class ProgrammingError(DatabaseError):79"""Exception for programming errors."""808182class IntegrityError(DatabaseError):83"""Exception for relational integrity errors."""848586class DataError(DatabaseError):87"""Exception for problems with processed data like division by zero."""888990class NotSupportedError(DatabaseError):91"""Exception for using unsupported features of the database."""929394class ManagementError(Error):95"""Exception for errors in the management API."""9697def __init__(98self, errno: Optional[int] = None, msg: Optional[str] = None,99response: Optional[str] = None,100):101self.errno = errno102self.errmsg = msg103self.response = response104super(Exception, self).__init__(errno, msg)105106def __str__(self) -> str:107"""Return string representation."""108prefix = []109if self.errno is not None:110prefix.append(f'{self.errno}')111if self.response is not None:112prefix.append(f'({self.response})')113if prefix and self.errmsg:114return ' '.join(prefix) + ': ' + self.errmsg115elif prefix:116return ' '.join(prefix)117elif self.errmsg:118return f'{self.errmsg}'119return 'Unknown error'120121122