1 /************************************************************************************ 2 Copyright (C) 2013,2015 MariaDB Corporation AB 3 4 This library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Library General Public 6 License as published by the Free Software Foundation; either 7 version 2.1 of the License, or (at your option) any later version. 8 9 This library is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Library General Public License for more details. 13 14 You should have received a copy of the GNU Library General Public 15 License along with this library; if not see <http://www.gnu.org/licenses> 16 or write to the Free Software Foundation, Inc., 17 51 Franklin St., Fifth Floor, Boston, MA 02110, USA 18 *************************************************************************************/ 19 #ifndef _ma_error_h_ 20 #define _ma_error_h_ 21 22 extern MADB_ERROR MADB_ErrorList[]; 23 24 enum enum_madb_error { 25 MADB_ERR_00000=0, 26 MADB_ERR_01000, 27 MADB_ERR_01001, 28 MADB_ERR_01002, 29 MADB_ERR_01003, 30 MADB_ERR_01004, 31 MADB_ERR_01006, 32 MADB_ERR_01007, 33 MADB_ERR_01S00, 34 MADB_ERR_01S01, 35 MADB_ERR_01S02, 36 MADB_ERR_01S06, 37 MADB_ERR_01S07, 38 MADB_ERR_01S08, 39 MADB_ERR_01S09, 40 MADB_ERR_07001, 41 MADB_ERR_07002, 42 MADB_ERR_07005, 43 MADB_ERR_07006, 44 MADB_ERR_07009, 45 MADB_ERR_07S01, 46 MADB_ERR_08001, 47 MADB_ERR_08002, 48 MADB_ERR_08003, 49 MADB_ERR_08004, 50 MADB_ERR_08007, 51 MADB_ERR_08S01, 52 MADB_ERR_21S01, 53 MADB_ERR_21S02, 54 MADB_ERR_22001, 55 MADB_ERR_22002, 56 MADB_ERR_22003, 57 MADB_ERR_22007, 58 MADB_ERR_22008, 59 MADB_ERR_22012, 60 MADB_ERR_22015, 61 MADB_ERR_22018, 62 MADB_ERR_22019, 63 MADB_ERR_22025, 64 MADB_ERR_22026, 65 MADB_ERR_23000, 66 MADB_ERR_24000, 67 MADB_ERR_25000, 68 MADB_ERR_25S01, 69 MADB_ERR_25S02, 70 MADB_ERR_25S03, 71 MADB_ERR_28000, 72 MADB_ERR_34000, 73 MADB_ERR_3C000, 74 MADB_ERR_3D000, 75 MADB_ERR_3F000, 76 MADB_ERR_40001, 77 MADB_ERR_40002, 78 MADB_ERR_40003, 79 MADB_ERR_42000, 80 MADB_ERR_42S01, 81 MADB_ERR_42S02, 82 MADB_ERR_42S11, 83 MADB_ERR_42S12, 84 MADB_ERR_42S21, 85 MADB_ERR_42S22, 86 MADB_ERR_44000, 87 MADB_ERR_HY000, 88 MADB_ERR_HY001, 89 MADB_ERR_HY003, 90 MADB_ERR_HY004, 91 MADB_ERR_HY007, 92 MADB_ERR_HY008, 93 MADB_ERR_HY009, 94 MADB_ERR_HY010, 95 MADB_ERR_HY011, 96 MADB_ERR_HY012, 97 MADB_ERR_HY013, 98 MADB_ERR_HY014, 99 MADB_ERR_HY015, 100 MADB_ERR_HY016, 101 MADB_ERR_HY017, 102 MADB_ERR_HY018, 103 MADB_ERR_HY019, 104 MADB_ERR_HY020, 105 MADB_ERR_HY021, 106 MADB_ERR_HY024, 107 MADB_ERR_HY090, 108 MADB_ERR_HY091, 109 MADB_ERR_HY092, 110 MADB_ERR_HY095, 111 MADB_ERR_HY096, 112 MADB_ERR_HY097, 113 MADB_ERR_HY098, 114 MADB_ERR_HY099, 115 MADB_ERR_HY100, 116 MADB_ERR_HY101, 117 MADB_ERR_HY103, 118 MADB_ERR_HY104, 119 MADB_ERR_HY105, 120 MADB_ERR_HY106, 121 MADB_ERR_HY107, 122 MADB_ERR_HY109, 123 MADB_ERR_HY110, 124 MADB_ERR_HY111, 125 MADB_ERR_HYC00, 126 MADB_ERR_HYT00, 127 MADB_ERR_HYT01, 128 MADB_ERR_IM001, 129 MADB_ERR_IM002, 130 MADB_ERR_IM003, 131 MADB_ERR_IM004, 132 MADB_ERR_IM005, 133 MADB_ERR_IM006, 134 MADB_ERR_IM007, 135 MADB_ERR_IM008, 136 MADB_ERR_IM009, 137 MADB_ERR_IM010, 138 MADB_ERR_IM011, 139 MADB_ERR_IM012, 140 MADB_ERR_IM013, 141 MADB_ERR_IM014, 142 MADB_ERR_IM015, 143 MADB_ERR_S1000, 144 MADB_ERR_S1107, 145 MADB_ERR_S1C00, 146 }; 147 char* MADB_PutErrorPrefix(MADB_Dbc *dbc, MADB_Error *error); 148 149 SQLRETURN MADB_SetError(MADB_Error *Error, unsigned int SqlErrorCode, const char *SqlErrorMsg, unsigned int NativeError); 150 SQLRETURN MADB_SetNativeError(MADB_Error *Error, SQLSMALLINT HandleType, void *Ptr); 151 void MADB_CopyError(MADB_Error *ErrorTo, MADB_Error *ErrorFrom); 152 SQLRETURN MADB_GetDiagRec(MADB_Error *Err, SQLSMALLINT RecNumber, 153 void *SQLState, SQLINTEGER *NativeErrorPtr, 154 void *MessageText, SQLSMALLINT BufferLength, 155 SQLSMALLINT *TextLengthPtr, my_bool isWChar, 156 SQLINTEGER OdbcVersion); 157 SQLRETURN MADB_GetDiagField(SQLSMALLINT HandleType, SQLHANDLE Handle, 158 SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier, SQLPOINTER 159 DiagInfoPtr, SQLSMALLINT BufferLength, 160 SQLSMALLINT *StringLengthPtr, my_bool isWChar); 161 162 #define MADB_CLEAR_ERROR(a) do { \ 163 strcpy_s((a)->SqlState, SQL_SQLSTATE_SIZE+1, MADB_ErrorList[MADB_ERR_00000].SqlState); \ 164 (a)->SqlErrorMsg[(a)->PrefixLen]= 0; \ 165 (a)->NativeError= 0;\ 166 (a)->ReturnValue= SQL_SUCCESS;\ 167 (a)->ErrorNum= 0; \ 168 } while (0) 169 170 #define MADB_CLEAR_HANDLE_ERROR(handle_type, handle) \ 171 switch (handle_type) { \ 172 case SQL_HANDLE_ENV: \ 173 MADB_CLEAR_ERROR(&((MADB_Env *)Handle)->Error); \ 174 break; \ 175 case SQL_HANDLE_DBC: \ 176 MADB_CLEAR_ERROR(&((MADB_Dbc *)Handle)->Error); \ 177 break; \ 178 case SQL_HANDLE_STMT:\ 179 MADB_CLEAR_ERROR(&((MADB_Stmt *)Handle)->Error); \ 180 } 181 182 #define MADB_CHECK_HANDLE_CLEAR_ERROR(handle_type, handle) \ 183 if (handle == 0) return SQL_INVALID_HANDLE;\ 184 MADB_CLEAR_HANDLE_ERROR(handle_type, handle) \ 185 186 187 #define MADB_NOT_IMPLEMENTED(HANDLE)\ 188 MADB_SetError(&(HANDLE)->Error, MADB_ERR_IM001, NULL, 0);\ 189 return SQL_ERROR; 190 191 #define MADB_CHECK_ATTRIBUTE(Handle, Attr, ValidAttrs)\ 192 {\ 193 SQLULEN x=1, ok=0, my_attr=(SQLULEN)(Attr);\ 194 while (x <= ValidAttrs[0] && !ok)\ 195 if ((ok= ValidAttrs[x++] == my_attr))\ 196 if (!ok)\ 197 {\ 198 MADB_SetError(&(Handle)->Error,MADB_ERR_HY024, NULL, 0);\ 199 return (Handle)->Error.ReturnValue;\ 200 }\ 201 } 202 203 #endif /* _ma_error_h_ */ 204