18
18
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
/* Functions to map mysqld errno to sql_state */
21
/* Functions to map drizzle errno to sql_state */
22
22
#include <drizzled/global.h>
27
#include <drizzled/sql_state.h>
23
28
#include <drizzled/error.h>
24
#include <libdrizzle/libdrizzle.h>
25
#include "sql_state.h"
29
30
using namespace std;
31
struct st_map_errno_to_sqlstate sqlstate_array[]=
32
typedef struct st_map_errno_to_sqlstate
34
uint32_t drizzleclient_errno;
35
const char *odbc_state;
36
const char *jdbc_state;
39
errno_sqlstate_map sqlstate_map[]=
33
41
{ ER_DUP_KEY ,"23000", "" },
34
42
{ ER_OUTOFMEMORY ,"HY001", "S1001" },
238
246
{ ER_DUP_ENTRY_WITH_KEY_NAME ,"23000", "S1009" },
241
vector<struct st_map_errno_to_sqlstate>
242
sqlstate_map(sqlstate_array,
243
sqlstate_array + sizeof(sqlstate_array)/sizeof(*sqlstate_array));
245
bool compare_errno_map(st_map_errno_to_sqlstate a,
246
st_map_errno_to_sqlstate b)
249
bool compare_errno_map(errno_sqlstate_map a,
250
errno_sqlstate_map b)
248
return (a.drizzle_errno < b.drizzle_errno);
252
return (a.drizzleclient_errno < b.drizzleclient_errno);
251
const char *drizzle_errno_to_sqlstate(uint32_t drizzle_errno)
255
const char *drizzleclient_errno_to_sqlstate(uint32_t drizzleclient_errno)
254
struct st_map_errno_to_sqlstate the_state= {drizzle_errno, NULL, NULL};
255
vector<struct st_map_errno_to_sqlstate>::iterator result=
256
lower_bound(sqlstate_map.begin(), sqlstate_map.end(),
257
the_state, compare_errno_map);
258
errno_sqlstate_map drizzle_err_state= {drizzleclient_errno, NULL, NULL};
259
errno_sqlstate_map* result=
260
lower_bound(&sqlstate_map[0],
261
&sqlstate_map[sizeof(sqlstate_map)/sizeof(*sqlstate_map)],
262
drizzle_err_state, compare_errno_map);
259
if ((*result).drizzle_errno == drizzle_errno)
264
if ((*result).drizzleclient_errno == drizzleclient_errno)
260
265
return (*result).odbc_state;
261
266
/* General error */