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

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. #include <ndb_global.h>
  14. #include "dba_internal.hpp"
  15. static DBA_Error_t latestError = DBA_NO_ERROR;
  16. static DBA_ErrorCode_t latestNdbError = 0;
  17. static char latestMsg[1024];
  18. /**
  19.  * Private 
  20.  */
  21. void
  22. DBA__SetLatestError(DBA_Error_t le, 
  23.     DBA_ErrorCode_t lnb, 
  24.     const char * msg, ...){
  25.   require(msg != 0);
  26.   latestError = le;
  27.   latestNdbError = lnb;
  28.   
  29.   va_list ap;
  30.   
  31.   va_start(ap, msg);
  32.   vsnprintf(latestMsg, sizeof(latestMsg)-1, msg, ap);
  33.   va_end(ap);
  34. }
  35. /**
  36.  * Get latest DBA error
  37.  */
  38. extern "C"
  39. DBA_Error_t
  40. DBA_GetLatestError(){
  41.   return latestError;
  42. }
  43. /**
  44.  * Get latest error string associated with GetLatestError
  45.  *
  46.  * String must not be free by caller of this method
  47.  */
  48. extern "C"
  49. const char *
  50. DBA_GetLatestErrorMsg(){
  51.   return latestMsg;
  52. }
  53. /**
  54.  * Get the latest NDB error
  55.  *
  56.  * Note only applicable to synchronous methods
  57.  */
  58. extern "C"
  59. DBA_ErrorCode_t
  60. DBA_GetLatestNdbError(){
  61.   return latestNdbError;
  62. }
  63. extern "C"
  64. const
  65. char *
  66. DBA_GetNdbErrorMsg(DBA_ErrorCode_t code){
  67.   return DBA__TheNdb->getNdbError(code).message;
  68. }
  69. struct DBA_ErrorTxtMap {
  70.   DBA_Error_t Error;
  71.   const char * Msg;
  72. };
  73. static
  74. const DBA_ErrorTxtMap errMap[] = {
  75.   { DBA_NO_ERROR, "No error" },
  76.   { DBA_NOT_IMPLEMENTED, "Function Not Implemented" },
  77.   { DBA_NDB_ERROR, "Uncategorised NDB error" },
  78.   { DBA_ERROR, "Uncategorised DBA implementation error" },
  79.   { DBA_APPLICATION_ERROR,
  80.     "Function called with invalid argument(s)/invalid sequence(s)" },
  81.   { DBA_NO_DATA, "No row with specified PK existed" },
  82.   { DBA_CONSTRAINT_VIOLATION, "There already existed a row with that PK" },
  83.   
  84.   { DBA_TEMPORARY_ERROR, "Request failed due to temporary reasons" },
  85.   { DBA_INSUFFICIENT_SPACE,
  86.     "The DB is full" },
  87.   { DBA_OVERLOAD, "Request was rejected in NDB due to high load situation" },
  88.   { DBA_TIMEOUT, "The request timed out, probably due to dead-lock" }
  89. };
  90. static const int ErrMsgs = sizeof(errMap)/sizeof(DBA_ErrorTxtMap);
  91. extern "C"
  92. const
  93. char *
  94. DBA_GetErrorMsg(DBA_Error_t e){
  95.   for(int i = 0; i<ErrMsgs; i++)
  96.     if(errMap[i].Error == e)
  97.       return errMap[i].Msg;
  98.   return "Invalid error code";
  99. }