codekingpro/portable-devtools
114k
1"""2psycopg exceptions3 4DBAPI-defined Exceptions are defined in the following hierarchy::5 6 Exceptions7 |__Warning8 |__Error9 |__InterfaceError10 |__DatabaseError11 |__DataError12 |__OperationalError13 |__IntegrityError14 |__InternalError15 |__ProgrammingError16 |__NotSupportedError17"""18 19# Copyright (C) 2020 The Psycopg Team20 21from dataclasses import dataclass, field, fields22from typing import Any, Callable, Dict, List, NoReturn, Optional, Sequence, Tuple, Type23from typing import Union, TYPE_CHECKING24from typing_extensions import TypeAlias25from asyncio import CancelledError26 27from .pq.abc import PGconn, PGresult28from .pq._enums import ConnStatus, DiagnosticField, PipelineStatus, TransactionStatus29from ._compat import TypeGuard30 31if TYPE_CHECKING:32 from .pq.misc import PGnotify, ConninfoOption33 34ErrorInfo: TypeAlias = Union[None, PGresult, Dict[int, Optional[bytes]]]35 36_sqlcodes: Dict[str, "Type[Error]"] = {}37 38 39@dataclass40class FinishedPGconn:41 """Finished libpq connection.42 43 Attributes are set from a real `~pscopg.pq.PGconn` but any operations will44 raise an `~psycopg.OperationalError`.45 """46 47 info: List["ConninfoOption"] = field(default_factory=list)48 49 db: bytes = b""50 user: bytes = b""51 password: bytes = b""52 host: bytes = b""53 hostaddr: bytes = b""54 port: bytes = b""55 tty: bytes = b""56 options: bytes = b""57 status: int = ConnStatus.BAD.value58 transaction_status: int = TransactionStatus.UNKNOWN.value59 pipeline_status: int = PipelineStatus.OFF.value60 61 error_message: bytes = b""62 server_version: int = 063 64 backend_pid: int = 065 needs_password: bool = False66 used_password: bool = False67 ssl_in_use: bool = False68 69 nonblocking: int = 070 71 notice_handler: Optional[Callable[["PGresult"], None]] = None72 notify_handler: Optional[Callable[["PGnotify"], None]] = None73 74 @staticmethod75 def _raise() -> NoReturn:76 raise OperationalError("the connection is closed")77 78 @classmethod79 def connect(cls, *args: Any) -> NoReturn:80 raise TypeError(f"{cls} is unusable")81 82 @classmethod83 def connect_start(cls, *args: Any) -> NoReturn:84 raise TypeError(f"{cls} is unusable")85 86 def connect_poll(self) -> NoReturn:87 self._raise()88 89 def finish(self) -> None:90 pass91 92 def reset(self) -> NoReturn:93 self._raise()94 95 def reset_start(self) -> NoReturn:96 self._raise()97 98 def reset_poll(self) -> NoReturn:99 self._raise()100 101 @classmethod102 def ping(cls, *args: Any) -> NoReturn:103 raise TypeError(f"{cls} is unusable")104 105 def parameter_status(self, *args: Any) -> NoReturn:106 self._raise()107 108 @property109 def socket(self) -> NoReturn:110 self._raise()111 112 def exec_(self, *args: Any) -> NoReturn:113 self._raise()114 115 def send_query(self, *args: Any) -> None:116 self._raise()117 118 def exec_params(self, *args: Any) -> NoReturn:119 self._raise()120 121 def send_query_params(self, *args: Any) -> NoReturn:122 self._raise()123 124 def send_prepare(self, *args: Any) -> NoReturn:125 self._raise()126 127 def send_query_prepared(self, *args: Any) -> NoReturn:128 self._raise()129 130 def prepare(self, *args: Any) -> NoReturn:131 self._raise()132 133 def exec_prepared(self, *args: Any) -> NoReturn:134 self._raise()135 136 def describe_prepared(self, *args: Any) -> NoReturn:137 self._raise()138 139 def send_describe_prepared(self, *args: Any) -> NoReturn:140 self._raise()141 142 def describe_portal(self, *args: Any) -> NoReturn:143 self._raise()144 145 def send_describe_portal(self, *args: Any) -> NoReturn:146 self._raise()147 148 def get_result(self) -> NoReturn:149 self._raise()150 151 def consume_input(self) -> NoReturn:152 self._raise()153 154 def is_busy(self) -> NoReturn:155 self._raise()156 157 def flush(self) -> NoReturn:158 self._raise()159 160 def set_single_row_mode(self) -> NoReturn:161 self._raise()162 163 def get_cancel(self) -> NoReturn:164 self._raise()165 166 def notifies(self) -> NoReturn:167 self._raise()168 169 def put_copy_data(self, *args: Any) -> NoReturn:170 self._raise()171 172 def put_copy_end(self, *args: Any) -> NoReturn:173 self._raise()174 175 def get_copy_data(self, *args: Any) -> NoReturn:176 self._raise()177 178 def trace(self, *args: Any) -> NoReturn:179 self._raise()180 181 def set_trace_flags(self, *args: Any) -> NoReturn:182 self._raise()183 184 def untrace(self) -> NoReturn:185 self._raise()186 187 def encrypt_password(self, *args: Any) -> NoReturn:188 self._raise()189 190 def make_empty_result(self, *args: Any) -> NoReturn:191 self._raise()192 193 def enter_pipeline_mode(self) -> NoReturn:194 self._raise()195 196 def exit_pipeline_mode(self) -> NoReturn:197 self._raise()198 199 def pipeline_sync(self) -> NoReturn:200 self._raise()201 202 def send_flush_request(self) -> NoReturn:203 self._raise()204 205 206def finish_pgconn(pgconn: PGconn) -> PGconn:207 args = {}208 for f in fields(FinishedPGconn):209 try:210 args[f.name] = getattr(pgconn, f.name)211 except Exception:212 pass213 pgconn.finish()214 return FinishedPGconn(**args)215 216 217class Warning(Exception):218 """219 Exception raised for important warnings.220 221 Defined for DBAPI compatibility, but never raised by ``psycopg``.222 """223 224 __module__ = "psycopg"225 226 227class Error(Exception):228 """229 Base exception for all the errors psycopg will raise.230 231 Exception that is the base class of all other error exceptions. You can232 use this to catch all errors with one single `!except` statement.233 234 This exception is guaranteed to be picklable.235 """236 237 __module__ = "psycopg"238 239 sqlstate: Optional[str] = None240 241 def __init__(242 self,243 *args: Sequence[Any],244 info: ErrorInfo = None,245 encoding: str = "utf-8",246 pgconn: Optional[PGconn] = None,247 ):248 super().__init__(*args)249 self._info = info250 self._encoding = encoding251 self._pgconn = pgconn252 253 # Handle sqlstate codes for which we don't have a class.254 if not self.sqlstate and info:255 self.sqlstate = self.diag.sqlstate256 257 @property258 def pgconn(self) -> Optional[PGconn]:259 """The connection object, if the error was raised from a connection attempt.260 261 :rtype: Optional[psycopg.pq.PGconn]262 """263 return self._pgconn if self._pgconn else None264 265 @property266 def pgresult(self) -> Optional[PGresult]:267 """The result object, if the exception was raised after a failed query.268 269 :rtype: Optional[psycopg.pq.PGresult]270 """271 return self._info if _is_pgresult(self._info) else None272 273 @property274 def diag(self) -> "Diagnostic":275 """276 A `Diagnostic` object to inspect details of the errors from the database.277 """278 return Diagnostic(self._info, encoding=self._encoding)279 280 def __reduce__(self) -> Union[str, Tuple[Any, ...]]:281 res = super().__reduce__()282 if isinstance(res, tuple) and len(res) >= 3:283 # To make the exception picklable284 res[2]["_info"] = _info_to_dict(self._info)285 res[2]["_pgconn"] = None286 287 return res288 289 290class InterfaceError(Error):291 """292 An error related to the database interface rather than the database itself.293 """294 295 __module__ = "psycopg"296 297 298class DatabaseError(Error):299 """300 Exception raised for errors that are related to the database.301 """302 303 __module__ = "psycopg"304 305 def __init_subclass__(cls, code: Optional[str] = None, name: Optional[str] = None):306 if code:307 _sqlcodes[code] = cls308 cls.sqlstate = code309 if name:310 _sqlcodes[name] = cls311 312 313class DataError(DatabaseError):314 """315 An error caused by problems with the processed data.316 317 Examples may be division by zero, numeric value out of range, etc.318 """319 320 __module__ = "psycopg"321 322 323class OperationalError(DatabaseError):324 """325 An error related to the database's operation.326 327 These errors are not necessarily under the control of the programmer, e.g.328 an unexpected disconnect occurs, the data source name is not found, a329 transaction could not be processed, a memory allocation error occurred330 during processing, etc.331 """332 333 __module__ = "psycopg"334 335 336class IntegrityError(DatabaseError):337 """338 An error caused when the relational integrity of the database is affected.339 340 An example may be a foreign key check failed.341 """342 343 __module__ = "psycopg"344 345 346class InternalError(DatabaseError):347 """348 An error generated when the database encounters an internal error,349 350 Examples could be the cursor is not valid anymore, the transaction is out351 of sync, etc.352 """353 354 __module__ = "psycopg"355 356 357class ProgrammingError(DatabaseError):358 """359 Exception raised for programming errors360 361 Examples may be table not found or already exists, syntax error in the SQL362 statement, wrong number of parameters specified, etc.363 """364 365 __module__ = "psycopg"366 367 368class NotSupportedError(DatabaseError):369 """370 A method or database API was used which is not supported by the database.371 """372 373 __module__ = "psycopg"374 375 376class ConnectionTimeout(OperationalError):377 """378 Exception raised on timeout of the `~psycopg.Connection.connect()` method.379 380 The error is raised if the ``connect_timeout`` is specified and a381 connection is not obtained in useful time.382 383 Subclass of `~psycopg.OperationalError`.384 """385 386 387class PipelineAborted(OperationalError):388 """389 Raised when a operation fails because the current pipeline is in aborted state.390 391 Subclass of `~psycopg.OperationalError`.392 """393 394 395class Diagnostic:396 """Details from a database error report."""397 398 def __init__(self, info: ErrorInfo, encoding: str = "utf-8"):399 self._info = info400 self._encoding = encoding401 402 @property403 def severity(self) -> Optional[str]:404 return self._error_message(DiagnosticField.SEVERITY)405 406 @property407 def severity_nonlocalized(self) -> Optional[str]:408 return self._error_message(DiagnosticField.SEVERITY_NONLOCALIZED)409 410 @property411 def sqlstate(self) -> Optional[str]:412 return self._error_message(DiagnosticField.SQLSTATE)413 414 @property415 def message_primary(self) -> Optional[str]:416 return self._error_message(DiagnosticField.MESSAGE_PRIMARY)417 418 @property419 def message_detail(self) -> Optional[str]:420 return self._error_message(DiagnosticField.MESSAGE_DETAIL)421 422 @property423 def message_hint(self) -> Optional[str]:424 return self._error_message(DiagnosticField.MESSAGE_HINT)425 426 @property427 def statement_position(self) -> Optional[str]:428 return self._error_message(DiagnosticField.STATEMENT_POSITION)429 430 @property431 def internal_position(self) -> Optional[str]:432 return self._error_message(DiagnosticField.INTERNAL_POSITION)433 434 @property435 def internal_query(self) -> Optional[str]:436 return self._error_message(DiagnosticField.INTERNAL_QUERY)437 438 @property439 def context(self) -> Optional[str]:440 return self._error_message(DiagnosticField.CONTEXT)441 442 @property443 def schema_name(self) -> Optional[str]:444 return self._error_message(DiagnosticField.SCHEMA_NAME)445 446 @property447 def table_name(self) -> Optional[str]:448 return self._error_message(DiagnosticField.TABLE_NAME)449 450 @property451 def column_name(self) -> Optional[str]:452 return self._error_message(DiagnosticField.COLUMN_NAME)453 454 @property455 def datatype_name(self) -> Optional[str]:456 return self._error_message(DiagnosticField.DATATYPE_NAME)457 458 @property459 def constraint_name(self) -> Optional[str]:460 return self._error_message(DiagnosticField.CONSTRAINT_NAME)461 462 @property463 def source_file(self) -> Optional[str]:464 return self._error_message(DiagnosticField.SOURCE_FILE)465 466 @property467 def source_line(self) -> Optional[str]:468 return self._error_message(DiagnosticField.SOURCE_LINE)469 470 @property471 def source_function(self) -> Optional[str]:472 return self._error_message(DiagnosticField.SOURCE_FUNCTION)473 474 def _error_message(self, field: DiagnosticField) -> Optional[str]:475 if self._info:476 if isinstance(self._info, dict):477 val = self._info.get(field)478 else:479 val = self._info.error_field(field)480 481 if val is not None:482 return val.decode(self._encoding, "replace")483 484 return None485 486 def __reduce__(self) -> Union[str, Tuple[Any, ...]]:487 res = super().__reduce__()488 if isinstance(res, tuple) and len(res) >= 3:489 res[2]["_info"] = _info_to_dict(self._info)490 491 return res492 493 494def _info_to_dict(info: ErrorInfo) -> ErrorInfo:495 """496 Convert a PGresult to a dictionary to make the info picklable.497 """498 # PGresult is a protocol, can't use isinstance499 if _is_pgresult(info):500 return {v: info.error_field(v) for v in DiagnosticField}501 else:502 return info503 504 505def lookup(sqlstate: str) -> Type[Error]:506 """Lookup an error code or `constant name`__ and return its exception class.507 508 Raise `!KeyError` if the code is not found.509 510 .. __: https://www.postgresql.org/docs/current/errcodes-appendix.html511 #ERRCODES-TABLE512 """513 return _sqlcodes[sqlstate.upper()]514 515 516def error_from_result(result: PGresult, encoding: str = "utf-8") -> Error:517 from psycopg import pq518 519 state = result.error_field(DiagnosticField.SQLSTATE) or b""520 cls = _class_for_state(state.decode("ascii"))521 return cls(522 pq.error_message(result, encoding=encoding),523 info=result,524 encoding=encoding,525 )526 527 528def _is_pgresult(info: ErrorInfo) -> TypeGuard[PGresult]:529 """Return True if an ErrorInfo is a PGresult instance."""530 # PGresult is a protocol, can't use isinstance531 return hasattr(info, "error_field")532 533 534def _class_for_state(sqlstate: str) -> Type[Error]:535 try:536 return lookup(sqlstate)537 except KeyError:538 return get_base_exception(sqlstate)539 540 541def get_base_exception(sqlstate: str) -> Type[Error]:542 return (543 _base_exc_map.get(sqlstate[:2])544 or _base_exc_map.get(sqlstate[:1])545 or DatabaseError546 )547 548 549_base_exc_map = {550 "08": OperationalError, # Connection Exception551 "0A": NotSupportedError, # Feature Not Supported552 "20": ProgrammingError, # Case Not Foud553 "21": ProgrammingError, # Cardinality Violation554 "22": DataError, # Data Exception555 "23": IntegrityError, # Integrity Constraint Violation556 "24": InternalError, # Invalid Cursor State557 "25": InternalError, # Invalid Transaction State558 "26": ProgrammingError, # Invalid SQL Statement Name *559 "27": OperationalError, # Triggered Data Change Violation560 "28": OperationalError, # Invalid Authorization Specification561 "2B": InternalError, # Dependent Privilege Descriptors Still Exist562 "2D": InternalError, # Invalid Transaction Termination563 "2F": OperationalError, # SQL Routine Exception *564 "34": ProgrammingError, # Invalid Cursor Name *565 "38": OperationalError, # External Routine Exception *566 "39": OperationalError, # External Routine Invocation Exception *567 "3B": OperationalError, # Savepoint Exception *568 "3D": ProgrammingError, # Invalid Catalog Name569 "3F": ProgrammingError, # Invalid Schema Name570 "40": OperationalError, # Transaction Rollback571 "42": ProgrammingError, # Syntax Error or Access Rule Violation572 "44": ProgrammingError, # WITH CHECK OPTION Violation573 "53": OperationalError, # Insufficient Resources574 "54": OperationalError, # Program Limit Exceeded575 "55": OperationalError, # Object Not In Prerequisite State576 "57": OperationalError, # Operator Intervention577 "58": OperationalError, # System Error (errors external to PostgreSQL itself)578 "F": OperationalError, # Configuration File Error579 "H": OperationalError, # Foreign Data Wrapper Error (SQL/MED)580 "P": ProgrammingError, # PL/pgSQL Error581 "X": InternalError, # Internal Error582}583 584 585# Error classes generated by tools/update_errors.py586 587# fmt: off588# autogenerated: start589 590 591# Class 02 - No Data (this is also a warning class per the SQL standard)592 593class NoData(DatabaseError,594 code='02000', name='NO_DATA'):595 pass596 597class NoAdditionalDynamicResultSetsReturned(DatabaseError,598 code='02001', name='NO_ADDITIONAL_DYNAMIC_RESULT_SETS_RETURNED'):599 pass600 601 602# Class 03 - SQL Statement Not Yet Complete603 604class SqlStatementNotYetComplete(DatabaseError,605 code='03000', name='SQL_STATEMENT_NOT_YET_COMPLETE'):606 pass607 608 609# Class 08 - Connection Exception610 611class ConnectionException(OperationalError,612 code='08000', name='CONNECTION_EXCEPTION'):613 pass614 615class SqlclientUnableToEstablishSqlconnection(OperationalError,616 code='08001', name='SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION'):617 pass618 619class ConnectionDoesNotExist(OperationalError,620 code='08003', name='CONNECTION_DOES_NOT_EXIST'):621 pass622 623class SqlserverRejectedEstablishmentOfSqlconnection(OperationalError,624 code='08004', name='SQLSERVER_REJECTED_ESTABLISHMENT_OF_SQLCONNECTION'):625 pass626 627class ConnectionFailure(OperationalError,628 code='08006', name='CONNECTION_FAILURE'):629 pass630 631class TransactionResolutionUnknown(OperationalError,632 code='08007', name='TRANSACTION_RESOLUTION_UNKNOWN'):633 pass634 635class ProtocolViolation(OperationalError,636 code='08P01', name='PROTOCOL_VIOLATION'):637 pass638 639 640# Class 09 - Triggered Action Exception641 642class TriggeredActionException(DatabaseError,643 code='09000', name='TRIGGERED_ACTION_EXCEPTION'):644 pass645 646 647# Class 0A - Feature Not Supported648 649class FeatureNotSupported(NotSupportedError,650 code='0A000', name='FEATURE_NOT_SUPPORTED'):651 pass652 653 654# Class 0B - Invalid Transaction Initiation655 656class InvalidTransactionInitiation(DatabaseError,657 code='0B000', name='INVALID_TRANSACTION_INITIATION'):658 pass659 660 661# Class 0F - Locator Exception662 663class LocatorException(DatabaseError,664 code='0F000', name='LOCATOR_EXCEPTION'):665 pass666 667class InvalidLocatorSpecification(DatabaseError,668 code='0F001', name='INVALID_LOCATOR_SPECIFICATION'):669 pass670 671 672# Class 0L - Invalid Grantor673 674class InvalidGrantor(DatabaseError,675 code='0L000', name='INVALID_GRANTOR'):676 pass677 678class InvalidGrantOperation(DatabaseError,679 code='0LP01', name='INVALID_GRANT_OPERATION'):680 pass681 682 683# Class 0P - Invalid Role Specification684 685class InvalidRoleSpecification(DatabaseError,686 code='0P000', name='INVALID_ROLE_SPECIFICATION'):687 pass688 689 690# Class 0Z - Diagnostics Exception691 692class DiagnosticsException(DatabaseError,693 code='0Z000', name='DIAGNOSTICS_EXCEPTION'):694 pass695 696class StackedDiagnosticsAccessedWithoutActiveHandler(DatabaseError,697 code='0Z002', name='STACKED_DIAGNOSTICS_ACCESSED_WITHOUT_ACTIVE_HANDLER'):698 pass699 700 701# Class 20 - Case Not Found702 703class CaseNotFound(ProgrammingError,704 code='20000', name='CASE_NOT_FOUND'):705 pass706 707 708# Class 21 - Cardinality Violation709 710class CardinalityViolation(ProgrammingError,711 code='21000', name='CARDINALITY_VIOLATION'):712 pass713 714 715# Class 22 - Data Exception716 717class DataException(DataError,718 code='22000', name='DATA_EXCEPTION'):719 pass720 721class StringDataRightTruncation(DataError,722 code='22001', name='STRING_DATA_RIGHT_TRUNCATION'):723 pass724 725class NullValueNoIndicatorParameter(DataError,726 code='22002', name='NULL_VALUE_NO_INDICATOR_PARAMETER'):727 pass728 729class NumericValueOutOfRange(DataError,730 code='22003', name='NUMERIC_VALUE_OUT_OF_RANGE'):731 pass732 733class NullValueNotAllowed(DataError,734 code='22004', name='NULL_VALUE_NOT_ALLOWED'):735 pass736 737class ErrorInAssignment(DataError,738 code='22005', name='ERROR_IN_ASSIGNMENT'):739 pass740 741class InvalidDatetimeFormat(DataError,742 code='22007', name='INVALID_DATETIME_FORMAT'):743 pass744 745class DatetimeFieldOverflow(DataError,746 code='22008', name='DATETIME_FIELD_OVERFLOW'):747 pass748 749class InvalidTimeZoneDisplacementValue(DataError,750 code='22009', name='INVALID_TIME_ZONE_DISPLACEMENT_VALUE'):751 pass752 753class EscapeCharacterConflict(DataError,754 code='2200B', name='ESCAPE_CHARACTER_CONFLICT'):755 pass756 757class InvalidUseOfEscapeCharacter(DataError,758 code='2200C', name='INVALID_USE_OF_ESCAPE_CHARACTER'):759 pass760 761class InvalidEscapeOctet(DataError,762 code='2200D', name='INVALID_ESCAPE_OCTET'):763 pass764 765class ZeroLengthCharacterString(DataError,766 code='2200F', name='ZERO_LENGTH_CHARACTER_STRING'):767 pass768 769class MostSpecificTypeMismatch(DataError,770 code='2200G', name='MOST_SPECIFIC_TYPE_MISMATCH'):771 pass772 773class SequenceGeneratorLimitExceeded(DataError,774 code='2200H', name='SEQUENCE_GENERATOR_LIMIT_EXCEEDED'):775 pass776 777class NotAnXmlDocument(DataError,778 code='2200L', name='NOT_AN_XML_DOCUMENT'):779 pass780 781class InvalidXmlDocument(DataError,782 code='2200M', name='INVALID_XML_DOCUMENT'):783 pass784 785class InvalidXmlContent(DataError,786 code='2200N', name='INVALID_XML_CONTENT'):787 pass788 789class InvalidXmlComment(DataError,790 code='2200S', name='INVALID_XML_COMMENT'):791 pass792 793class InvalidXmlProcessingInstruction(DataError,794 code='2200T', name='INVALID_XML_PROCESSING_INSTRUCTION'):795 pass796 797class InvalidIndicatorParameterValue(DataError,798 code='22010', name='INVALID_INDICATOR_PARAMETER_VALUE'):799 pass800 801class SubstringError(DataError,802 code='22011', name='SUBSTRING_ERROR'):803 pass804 805class DivisionByZero(DataError,806 code='22012', name='DIVISION_BY_ZERO'):807 pass808 809class InvalidPrecedingOrFollowingSize(DataError,810 code='22013', name='INVALID_PRECEDING_OR_FOLLOWING_SIZE'):811 pass812 813class InvalidArgumentForNtileFunction(DataError,814 code='22014', name='INVALID_ARGUMENT_FOR_NTILE_FUNCTION'):815 pass816 817class IntervalFieldOverflow(DataError,818 code='22015', name='INTERVAL_FIELD_OVERFLOW'):819 pass820 821class InvalidArgumentForNthValueFunction(DataError,822 code='22016', name='INVALID_ARGUMENT_FOR_NTH_VALUE_FUNCTION'):823 pass824 825class InvalidCharacterValueForCast(DataError,826 code='22018', name='INVALID_CHARACTER_VALUE_FOR_CAST'):827 pass828 829class InvalidEscapeCharacter(DataError,830 code='22019', name='INVALID_ESCAPE_CHARACTER'):831 pass832 833class InvalidRegularExpression(DataError,834 code='2201B', name='INVALID_REGULAR_EXPRESSION'):835 pass836 837class InvalidArgumentForLogarithm(DataError,838 code='2201E', name='INVALID_ARGUMENT_FOR_LOGARITHM'):839 pass840 841class InvalidArgumentForPowerFunction(DataError,842 code='2201F', name='INVALID_ARGUMENT_FOR_POWER_FUNCTION'):843 pass844 845class InvalidArgumentForWidthBucketFunction(DataError,846 code='2201G', name='INVALID_ARGUMENT_FOR_WIDTH_BUCKET_FUNCTION'):847 pass848 849class InvalidRowCountInLimitClause(DataError,850 code='2201W', name='INVALID_ROW_COUNT_IN_LIMIT_CLAUSE'):851 pass852 853class InvalidRowCountInResultOffsetClause(DataError,854 code='2201X', name='INVALID_ROW_COUNT_IN_RESULT_OFFSET_CLAUSE'):855 pass856 857class CharacterNotInRepertoire(DataError,858 code='22021', name='CHARACTER_NOT_IN_REPERTOIRE'):859 pass860 861class IndicatorOverflow(DataError,862 code='22022', name='INDICATOR_OVERFLOW'):863 pass864 865class InvalidParameterValue(DataError,866 code='22023', name='INVALID_PARAMETER_VALUE'):867 pass868 869class UnterminatedCString(DataError,870 code='22024', name='UNTERMINATED_C_STRING'):871 pass872 873class InvalidEscapeSequence(DataError,874 code='22025', name='INVALID_ESCAPE_SEQUENCE'):875 pass876 877class StringDataLengthMismatch(DataError,878 code='22026', name='STRING_DATA_LENGTH_MISMATCH'):879 pass880 881class TrimError(DataError,882 code='22027', name='TRIM_ERROR'):883 pass884 885class ArraySubscriptError(DataError,886 code='2202E', name='ARRAY_SUBSCRIPT_ERROR'):887 pass888 889class InvalidTablesampleRepeat(DataError,890 code='2202G', name='INVALID_TABLESAMPLE_REPEAT'):891 pass892 893class InvalidTablesampleArgument(DataError,894 code='2202H', name='INVALID_TABLESAMPLE_ARGUMENT'):895 pass896 897class DuplicateJsonObjectKeyValue(DataError,898 code='22030', name='DUPLICATE_JSON_OBJECT_KEY_VALUE'):899 pass900 901class InvalidArgumentForSqlJsonDatetimeFunction(DataError,902 code='22031', name='INVALID_ARGUMENT_FOR_SQL_JSON_DATETIME_FUNCTION'):903 pass904 905class InvalidJsonText(DataError,906 code='22032', name='INVALID_JSON_TEXT'):907 pass908 909class InvalidSqlJsonSubscript(DataError,910 code='22033', name='INVALID_SQL_JSON_SUBSCRIPT'):911 pass912 913class MoreThanOneSqlJsonItem(DataError,914 code='22034', name='MORE_THAN_ONE_SQL_JSON_ITEM'):915 pass916 917class NoSqlJsonItem(DataError,918 code='22035', name='NO_SQL_JSON_ITEM'):919 pass920 921class NonNumericSqlJsonItem(DataError,922 code='22036', name='NON_NUMERIC_SQL_JSON_ITEM'):923 pass924 925class NonUniqueKeysInAJsonObject(DataError,926 code='22037', name='NON_UNIQUE_KEYS_IN_A_JSON_OBJECT'):927 pass928 929class SingletonSqlJsonItemRequired(DataError,930 code='22038', name='SINGLETON_SQL_JSON_ITEM_REQUIRED'):931 pass932 933class SqlJsonArrayNotFound(DataError,934 code='22039', name='SQL_JSON_ARRAY_NOT_FOUND'):935 pass936 937class SqlJsonMemberNotFound(DataError,938 code='2203A', name='SQL_JSON_MEMBER_NOT_FOUND'):939 pass940 941class SqlJsonNumberNotFound(DataError,942 code='2203B', name='SQL_JSON_NUMBER_NOT_FOUND'):943 pass944 945class SqlJsonObjectNotFound(DataError,946 code='2203C', name='SQL_JSON_OBJECT_NOT_FOUND'):947 pass948 949class TooManyJsonArrayElements(DataError,950 code='2203D', name='TOO_MANY_JSON_ARRAY_ELEMENTS'):951 pass952 953class TooManyJsonObjectMembers(DataError,954 code='2203E', name='TOO_MANY_JSON_OBJECT_MEMBERS'):955 pass956 957class SqlJsonScalarRequired(DataError,958 code='2203F', name='SQL_JSON_SCALAR_REQUIRED'):959 pass960 961class SqlJsonItemCannotBeCastToTargetType(DataError,962 code='2203G', name='SQL_JSON_ITEM_CANNOT_BE_CAST_TO_TARGET_TYPE'):963 pass964 965class FloatingPointException(DataError,966 code='22P01', name='FLOATING_POINT_EXCEPTION'):967 pass968 969class InvalidTextRepresentation(DataError,970 code='22P02', name='INVALID_TEXT_REPRESENTATION'):971 pass972 973class InvalidBinaryRepresentation(DataError,974 code='22P03', name='INVALID_BINARY_REPRESENTATION'):975 pass976 977class BadCopyFileFormat(DataError,978 code='22P04', name='BAD_COPY_FILE_FORMAT'):979 pass980 981class UntranslatableCharacter(DataError,982 code='22P05', name='UNTRANSLATABLE_CHARACTER'):983 pass984 985class NonstandardUseOfEscapeCharacter(DataError,986 code='22P06', name='NONSTANDARD_USE_OF_ESCAPE_CHARACTER'):987 pass988 989 990# Class 23 - Integrity Constraint Violation991 992class IntegrityConstraintViolation(IntegrityError,993 code='23000', name='INTEGRITY_CONSTRAINT_VIOLATION'):994 pass995 996class RestrictViolation(IntegrityError,997 code='23001', name='RESTRICT_VIOLATION'):998 pass999 1000class NotNullViolation(IntegrityError,1001 code='23502', name='NOT_NULL_VIOLATION'):1002 pass1003 1004class ForeignKeyViolation(IntegrityError,1005 code='23503', name='FOREIGN_KEY_VIOLATION'):1006 pass1007 1008class UniqueViolation(IntegrityError,1009 code='23505', name='UNIQUE_VIOLATION'):1010 pass1011 1012class CheckViolation(IntegrityError,1013 code='23514', name='CHECK_VIOLATION'):1014 pass1015 1016class ExclusionViolation(IntegrityError,1017 code='23P01', name='EXCLUSION_VIOLATION'):1018 pass1019 1020 1021# Class 24 - Invalid Cursor State1022 1023class InvalidCursorState(InternalError,1024 code='24000', name='INVALID_CURSOR_STATE'):1025 pass1026 1027 1028# Class 25 - Invalid Transaction State1029 1030class InvalidTransactionState(InternalError,1031 code='25000', name='INVALID_TRANSACTION_STATE'):1032 pass1033 1034class ActiveSqlTransaction(InternalError,1035 code='25001', name='ACTIVE_SQL_TRANSACTION'):1036 pass1037 1038class BranchTransactionAlreadyActive(InternalError,1039 code='25002', name='BRANCH_TRANSACTION_ALREADY_ACTIVE'):1040 pass1041 1042class InappropriateAccessModeForBranchTransaction(InternalError,1043 code='25003', name='INAPPROPRIATE_ACCESS_MODE_FOR_BRANCH_TRANSACTION'):1044 pass1045 1046class InappropriateIsolationLevelForBranchTransaction(InternalError,1047 code='25004', name='INAPPROPRIATE_ISOLATION_LEVEL_FOR_BRANCH_TRANSACTION'):1048 pass1049 1050class NoActiveSqlTransactionForBranchTransaction(InternalError,1051 code='25005', name='NO_ACTIVE_SQL_TRANSACTION_FOR_BRANCH_TRANSACTION'):1052 pass1053 1054class ReadOnlySqlTransaction(InternalError,1055 code='25006', name='READ_ONLY_SQL_TRANSACTION'):1056 pass1057 1058class SchemaAndDataStatementMixingNotSupported(InternalError,1059 code='25007', name='SCHEMA_AND_DATA_STATEMENT_MIXING_NOT_SUPPORTED'):1060 pass1061 1062class HeldCursorRequiresSameIsolationLevel(InternalError,1063 code='25008', name='HELD_CURSOR_REQUIRES_SAME_ISOLATION_LEVEL'):1064 pass1065 1066class NoActiveSqlTransaction(InternalError,1067 code='25P01', name='NO_ACTIVE_SQL_TRANSACTION'):1068 pass1069 1070class InFailedSqlTransaction(InternalError,1071 code='25P02', name='IN_FAILED_SQL_TRANSACTION'):1072 pass1073 1074class IdleInTransactionSessionTimeout(InternalError,1075 code='25P03', name='IDLE_IN_TRANSACTION_SESSION_TIMEOUT'):1076 pass1077 1078 1079# Class 26 - Invalid SQL Statement Name1080 1081class InvalidSqlStatementName(ProgrammingError,1082 code='26000', name='INVALID_SQL_STATEMENT_NAME'):1083 pass1084 1085 1086# Class 27 - Triggered Data Change Violation1087 1088class TriggeredDataChangeViolation(OperationalError,1089 code='27000', name='TRIGGERED_DATA_CHANGE_VIOLATION'):1090 pass1091 1092 1093# Class 28 - Invalid Authorization Specification1094 1095class InvalidAuthorizationSpecification(OperationalError,1096 code='28000', name='INVALID_AUTHORIZATION_SPECIFICATION'):1097 pass1098 1099class InvalidPassword(OperationalError,1100 code='28P01', name='INVALID_PASSWORD'):1101 pass1102 1103 1104# Class 2B - Dependent Privilege Descriptors Still Exist1105 1106class DependentPrivilegeDescriptorsStillExist(InternalError,1107 code='2B000', name='DEPENDENT_PRIVILEGE_DESCRIPTORS_STILL_EXIST'):1108 pass1109 1110class DependentObjectsStillExist(InternalError,1111 code='2BP01', name='DEPENDENT_OBJECTS_STILL_EXIST'):1112 pass1113 1114 1115# Class 2D - Invalid Transaction Termination1116 1117class InvalidTransactionTermination(InternalError,1118 code='2D000', name='INVALID_TRANSACTION_TERMINATION'):1119 pass1120 1121 1122# Class 2F - SQL Routine Exception1123 1124class SqlRoutineException(OperationalError,1125 code='2F000', name='SQL_ROUTINE_EXCEPTION'):1126 pass1127 1128class ModifyingSqlDataNotPermitted(OperationalError,1129 code='2F002', name='MODIFYING_SQL_DATA_NOT_PERMITTED'):1130 pass1131 1132class ProhibitedSqlStatementAttempted(OperationalError,1133 code='2F003', name='PROHIBITED_SQL_STATEMENT_ATTEMPTED'):1134 pass1135 1136class ReadingSqlDataNotPermitted(OperationalError,1137 code='2F004', name='READING_SQL_DATA_NOT_PERMITTED'):1138 pass1139 1140class FunctionExecutedNoReturnStatement(OperationalError,1141 code='2F005', name='FUNCTION_EXECUTED_NO_RETURN_STATEMENT'):1142 pass1143 1144 1145# Class 34 - Invalid Cursor Name1146 1147class InvalidCursorName(ProgrammingError,1148 code='34000', name='INVALID_CURSOR_NAME'):1149 pass1150 1151 1152# Class 38 - External Routine Exception1153 1154class ExternalRoutineException(OperationalError,1155 code='38000', name='EXTERNAL_ROUTINE_EXCEPTION'):1156 pass1157 1158class ContainingSqlNotPermitted(OperationalError,1159 code='38001', name='CONTAINING_SQL_NOT_PERMITTED'):1160 pass1161 1162class ModifyingSqlDataNotPermittedExt(OperationalError,1163 code='38002', name='MODIFYING_SQL_DATA_NOT_PERMITTED'):1164 pass1165 1166class ProhibitedSqlStatementAttemptedExt(OperationalError,1167 code='38003', name='PROHIBITED_SQL_STATEMENT_ATTEMPTED'):1168 pass1169 1170class ReadingSqlDataNotPermittedExt(OperationalError,1171 code='38004', name='READING_SQL_DATA_NOT_PERMITTED'):1172 pass1173 1174 1175# Class 39 - External Routine Invocation Exception1176 1177class ExternalRoutineInvocationException(OperationalError,1178 code='39000', name='EXTERNAL_ROUTINE_INVOCATION_EXCEPTION'):1179 pass1180 1181class InvalidSqlstateReturned(OperationalError,1182 code='39001', name='INVALID_SQLSTATE_RETURNED'):1183 pass1184 1185class NullValueNotAllowedExt(OperationalError,1186 code='39004', name='NULL_VALUE_NOT_ALLOWED'):1187 pass1188 1189class TriggerProtocolViolated(OperationalError,1190 code='39P01', name='TRIGGER_PROTOCOL_VIOLATED'):1191 pass1192 1193class SrfProtocolViolated(OperationalError,1194 code='39P02', name='SRF_PROTOCOL_VIOLATED'):1195 pass1196 1197class EventTriggerProtocolViolated(OperationalError,1198 code='39P03', name='EVENT_TRIGGER_PROTOCOL_VIOLATED'):1199 pass1200 