NdbError.hpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:6k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #ifndef NDB_ERROR_HPP
  14. #define NDB_ERROR_HPP
  15. #include <ndberror.h>
  16. /**
  17.  * @struct NdbError
  18.  * @brief Contains error information
  19.  *
  20.  * A NdbError consists of five parts:
  21.  * -# Error status         : Application impact
  22.  * -# Error classification : Logical error group
  23.  * -# Error code           : Internal error code
  24.  * -# Error message        : Context independent description of error 
  25.  * -# Error details        : Context dependent information 
  26.  *                           (not always available)
  27.  *
  28.  * <em>Error status</em> is usually used for programming against errors.
  29.  * If more detailed error control is needed, it is possible to 
  30.  * use the <em>error classification</em>.
  31.  *
  32.  * It is not recommended to write application programs dependent on
  33.  * specific <em>error codes</em>.
  34.  *
  35.  * The <em>error messages</em> and <em>error details</em> may
  36.  * change without notice.
  37.  * 
  38.  * For example of use, see @ref ndbapi_example3.cpp.
  39.  */
  40. struct NdbError {
  41.   /**
  42.    * Status categorizes error codes into status values reflecting
  43.    * what the application should do when encountering errors
  44.    */
  45.   enum Status {
  46.     /**
  47.      * The error code indicate success<br>
  48.      * (Includes classification: NdbError::NoError)
  49.      */
  50.     Success = ndberror_st_success,
  51.     /**
  52.      * The error code indicates a temporary error.
  53.      * The application should typically retry.<br>
  54.      * (Includes classifications: NdbError::InsufficientSpace, 
  55.      *  NdbError::TemporaryResourceError, NdbError::NodeRecoveryError,
  56.      *  NdbError::OverloadError, NdbError::NodeShutdown 
  57.      *  and NdbError::TimeoutExpired.)
  58.      */
  59.     TemporaryError = ndberror_st_temporary,
  60.     
  61.     /**
  62.      * The error code indicates a permanent error.<br>
  63.      * (Includes classificatons: NdbError::PermanentError, 
  64.      *  NdbError::ApplicationError, NdbError::NoDataFound,
  65.      *  NdbError::ConstraintViolation, NdbError::SchemaError,
  66.      *  NdbError::UserDefinedError, NdbError::InternalError, and, 
  67.      *  NdbError::FunctionNotImplemented.)
  68.      */
  69.     PermanentError = ndberror_st_permanent,
  70.   
  71.     /**
  72.      * The result/status is unknown.<br>
  73.      * (Includes classifications: NdbError::UnknownResultError, and
  74.      *  NdbError::UnknownErrorCode.)
  75.      */
  76.     UnknownResult = ndberror_st_unknown
  77.   };
  78.   
  79.   /**
  80.    * Type of error
  81.    */
  82.   enum Classification {
  83.     /**
  84.      * Success.  No error occurred.
  85.      */
  86.     NoError = ndberror_cl_none,
  87.     /**
  88.      * Error in application program.
  89.      */
  90.     ApplicationError = ndberror_cl_application,
  91.     /**
  92.      * Read operation failed due to missing record.
  93.      */
  94.     NoDataFound = ndberror_cl_no_data_found,
  95.     /**
  96.      * E.g. inserting a tuple with a primary key already existing 
  97.      * in the table.
  98.      */
  99.     ConstraintViolation = ndberror_cl_constraint_violation,
  100.     /**
  101.      * Error in creating table or usage of table.
  102.      */
  103.     SchemaError = ndberror_cl_schema_error,
  104.     /**
  105.      * Error occurred in interpreted program.
  106.      */
  107.     UserDefinedError = ndberror_cl_user_defined,
  108.     
  109.     /**
  110.      * E.g. insufficient memory for data or indexes.
  111.      */
  112.     InsufficientSpace = ndberror_cl_insufficient_space,
  113.     /**
  114.      * E.g. too many active transactions.
  115.      */
  116.     TemporaryResourceError = ndberror_cl_temporary_resource,
  117.     /**
  118.      * Temporary failures which are probably inflicted by a node
  119.      * recovery in progress.  Examples: information sent between
  120.      * application and NDB lost, distribution change.
  121.      */
  122.     NodeRecoveryError = ndberror_cl_node_recovery,
  123.     /**
  124.      * E.g. out of log file space.
  125.      */
  126.     OverloadError = ndberror_cl_overload,
  127.     /**
  128.      * Timeouts, often inflicted by deadlocks in NDB.
  129.      */
  130.     TimeoutExpired = ndberror_cl_timeout_expired,
  131.     
  132.     /**
  133.      * Is is unknown whether the transaction was committed or not.
  134.      */
  135.     UnknownResultError = ndberror_cl_unknown_result,
  136.     
  137.     /**
  138.      * A serious error in NDB has occurred.
  139.      */
  140.     InternalError = ndberror_cl_internal_error,
  141.     /**
  142.      * A function used is not yet implemented.
  143.      */
  144.     FunctionNotImplemented = ndberror_cl_function_not_implemented,
  145.     /**
  146.      * Error handler could not determine correct error code.
  147.      */
  148.     UnknownErrorCode = ndberror_cl_unknown_error_code,
  149.     /**
  150.      * Node shutdown
  151.      */
  152.     NodeShutdown = ndberror_cl_node_shutdown
  153.   };
  154.   
  155.   /**
  156.    * Error status.  
  157.    */
  158.   Status status;
  159.   /**
  160.    * Error type
  161.    */
  162.   Classification classification;
  163.   
  164.   /**
  165.    * Error code
  166.    */
  167.   int code;
  168.   /**
  169.    * Error message
  170.    */
  171.   const char * message;
  172.   /**
  173.    * The detailed description.  This is extra information regarding the 
  174.    * error which is not included in the error message.
  175.    *
  176.    * @note Is NULL when no details specified
  177.    */
  178.   char * details;
  179.   NdbError(){
  180.     status = UnknownResult;
  181.     classification = NoError;
  182.     code = 0;
  183.     message = 0;
  184.     details = 0;
  185.   }
  186.   NdbError(const ndberror_struct & ndberror){
  187.     status = (NdbError::Status) ndberror.status;
  188.     classification = (NdbError::Classification) ndberror.classification;
  189.     code = ndberror.code;
  190.     message = ndberror.message;
  191.     details = ndberror.details;
  192.   }
  193.   operator ndberror_struct() const {
  194.     ndberror_struct ndberror;
  195.     ndberror.status = (ndberror_status_enum) status;
  196.     ndberror.classification = (ndberror_classification_enum) classification;
  197.     ndberror.code = code;
  198.     ndberror.message = message;
  199.     ndberror.details = details;
  200.     return ndberror;
  201.   }
  202. };
  203. class NdbOut& operator <<(class NdbOut&, const NdbError &);
  204. class NdbOut& operator <<(class NdbOut&, const NdbError::Status&);
  205. class NdbOut& operator <<(class NdbOut&, const NdbError::Classification&);
  206. #endif