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