~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/error/sql_state.cc

  • Committer: Olaf van der Spek
  • Date: 2011-02-12 18:24:24 UTC
  • mto: (2167.1.2 build) (2172.1.4 build)
  • mto: This revision was merged to the branch mainline in revision 2168.
  • Revision ID: olafvdspek@gmail.com-20110212182424-kgnm9osi7qo97at2
casts

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/* - mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
2
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
3
 *
4
 
 *  Copyright (C) 2008 Sun Microsystems
 
4
 *  Copyright (C) 2008 Sun Microsystems, Inc.
5
5
 *
6
6
 *  This program is free software; you can redistribute it and/or modify
7
7
 *  it under the terms of the GNU General Public License as published by
23
23
 
24
24
#include <algorithm>
25
25
 
26
 
#include <drizzled/sql_state.h>
27
26
#include <drizzled/error.h>
 
27
#include <drizzled/error/sql_state.h>
28
28
 
29
29
using namespace std;
30
30
 
31
31
namespace drizzled
32
32
{
33
33
 
34
 
typedef struct st_map_errno_to_sqlstate
35
 
{
36
 
  uint32_t drizzle_errno;
 
34
namespace error
 
35
{
 
36
 
 
37
struct sql_state_t
 
38
{
 
39
  drizzled::error_t drizzle_errno;
37
40
  const char *odbc_state;
38
41
  const char *jdbc_state;
39
 
} errno_sqlstate_map;
 
42
};
40
43
 
41
 
errno_sqlstate_map sqlstate_map[]=
 
44
sql_state_t sqlstate_map[]=
42
45
{
43
46
  { ER_DUP_KEY                              ,"23000", "" },
44
47
  { ER_OUTOFMEMORY                          ,"HY001", "S1001" },
95
98
  { ER_FIELD_SPECIFIED_TWICE                ,"42000", "" },
96
99
  { ER_UNSUPPORTED_EXTENSION                ,"42000", "" },
97
100
  { ER_TABLE_MUST_HAVE_COLUMNS              ,"42000", "" },
98
 
  { ER_UNKNOWN_CHARACTER_SET                ,"42000", "" },
99
101
  { ER_TOO_BIG_ROWSIZE                      ,"42000", "" },
100
102
  { ER_WRONG_OUTER_JOIN                     ,"42000", "" },
101
103
  { ER_NULL_COLUMN_IN_INDEX                 ,"42000", "" },
102
 
  { ER_PASSWORD_ANONYMOUS_USER              ,"42000", "" },
103
 
  { ER_PASSWORD_NOT_ALLOWED                 ,"42000", "" },
104
 
  { ER_PASSWORD_NO_MATCH                    ,"42000", "" },
105
104
  { ER_WRONG_VALUE_COUNT_ON_ROW             ,"21S01", "" },
106
 
  { ER_INVALID_USE_OF_NULL                  ,"22004", "" },
107
 
  { ER_REGEXP_ERROR                         ,"42000", "" },
108
105
  { ER_MIX_OF_GROUP_FUNC_AND_FIELDS         ,"42000", "" },
109
 
  { ER_NONEXISTING_GRANT                    ,"42000", "" },
110
 
  { ER_TABLEACCESS_DENIED_ERROR             ,"42000", "" },
111
 
  { ER_COLUMNACCESS_DENIED_ERROR            ,"42000", "" },
112
 
  { ER_ILLEGAL_GRANT_FOR_TABLE              ,"42000", "" },
113
 
  { ER_GRANT_WRONG_HOST_OR_USER             ,"42000", "" },
114
 
  { ER_NO_SUCH_TABLE                        ,"42S02", "" },
115
 
  { ER_NONEXISTING_TABLE_GRANT              ,"42000", "" },
116
 
  { ER_NOT_ALLOWED_COMMAND                  ,"42000", "" },
 
106
  { ER_TABLE_UNKNOWN                        ,"42S02", "" },
117
107
  { ER_SYNTAX_ERROR                         ,"42000", "" },
118
 
  { ER_ABORTING_CONNECTION                  ,"08S01", "" },
119
108
  { ER_NET_PACKET_TOO_LARGE                 ,"08S01", "" },
120
 
  { ER_NET_READ_ERROR_FROM_PIPE             ,"08S01", "" },
121
 
  { ER_NET_FCNTL_ERROR                      ,"08S01", "" },
122
109
  { ER_NET_PACKETS_OUT_OF_ORDER             ,"08S01", "" },
123
 
  { ER_NET_UNCOMPRESS_ERROR                 ,"08S01", "" },
124
 
  { ER_NET_READ_ERROR                       ,"08S01", "" },
125
 
  { ER_NET_READ_INTERRUPTED                 ,"08S01", "" },
126
 
  { ER_NET_ERROR_ON_WRITE                   ,"08S01", "" },
127
 
  { ER_NET_WRITE_INTERRUPTED                ,"08S01", "" },
128
 
  { ER_TOO_LONG_STRING                      ,"42000", "" },
129
110
  { ER_TABLE_CANT_HANDLE_BLOB               ,"42000", "" },
130
111
  { ER_TABLE_CANT_HANDLE_AUTO_INCREMENT     ,"42000", "" },
131
112
  { ER_WRONG_COLUMN_NAME                    ,"42000", "" },
138
119
  { ER_KEY_DOES_NOT_EXITS                   ,"42000", "S1009" },
139
120
  { ER_CHECK_NO_SUCH_TABLE                  ,"42000", "" },
140
121
  { ER_CHECK_NOT_IMPLEMENTED                ,"42000", "" },
141
 
  { ER_CANT_DO_THIS_DURING_AN_TRANSACTION   ,"25000", "" },
142
122
  { ER_NEW_ABORTING_CONNECTION              ,"08S01", "" },
143
 
  { ER_MASTER_NET_READ                      ,"08S01", "" },
144
 
  { ER_MASTER_NET_WRITE                     ,"08S01", "" },
145
 
  { ER_TOO_MANY_USER_CONNECTIONS            ,"42000", "" },
146
123
  { ER_READ_ONLY_TRANSACTION                ,"25000", "" },
147
 
  { ER_NO_PERMISSION_TO_CREATE_USER         ,"42000", "" },
148
124
  { ER_LOCK_DEADLOCK                        ,"40001", "" },
149
125
  { ER_NO_REFERENCED_ROW                    ,"23000", "" },
150
126
  { ER_ROW_IS_REFERENCED                    ,"23000", "" },
151
 
  { ER_CONNECT_TO_MASTER                    ,"08S01", "" },
152
127
  { ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT    ,"21000", "" },
153
 
  { ER_USER_LIMIT_REACHED                   ,"42000", "" },
154
 
  { ER_SPECIFIC_ACCESS_DENIED_ERROR         ,"42000", "" },
155
128
  { ER_NO_DEFAULT                           ,"42000", "" },
156
129
  { ER_WRONG_VALUE_FOR_VAR                  ,"42000", "" },
157
130
  { ER_WRONG_TYPE_FOR_VAR                   ,"42000", "" },
164
137
  { ER_DERIVED_MUST_HAVE_ALIAS              ,"42000", "" },
165
138
  { ER_SELECT_REDUCED                       ,"01000", "" },
166
139
  { ER_TABLENAME_NOT_ALLOWED_HERE           ,"42000", "" },
167
 
  { ER_NOT_SUPPORTED_AUTH_MODE              ,"08004", "" },
168
140
  { ER_SPATIAL_CANT_HAVE_NULL               ,"42000", "" },
169
141
  { ER_COLLATION_CHARSET_MISMATCH           ,"42000", "" },
170
142
  { ER_WARN_TOO_FEW_RECORDS                 ,"01000", "" },
176
148
  { ER_WRONG_NAME_FOR_CATALOG               ,"42000", "" },
177
149
  { ER_UNKNOWN_STORAGE_ENGINE               ,"42000", "" },
178
150
  { ER_TRUNCATED_WRONG_VALUE                ,"22007", "" },
179
 
  { ER_SP_NO_RECURSIVE_CREATE               ,"2F003", "" },
180
 
  { ER_SP_ALREADY_EXISTS                    ,"42000", "" },
181
151
  { ER_SP_DOES_NOT_EXIST                    ,"42000", "" },
182
 
  { ER_SP_LILABEL_MISMATCH                  ,"42000", "" },
183
 
  { ER_SP_LABEL_REDEFINE                    ,"42000", "" },
184
 
  { ER_SP_LABEL_MISMATCH                    ,"42000", "" },
185
 
  { ER_SP_UNINIT_VAR                        ,"01000", "" },
186
 
  { ER_SP_BADSELECT                         ,"0A000", "" },
187
 
  { ER_SP_BADRETURN                         ,"42000", "" },
188
 
  { ER_SP_BADSTATEMENT                      ,"0A000", "" },
189
 
  { ER_UPDATE_LOG_DEPRECATED_IGNORED        ,"42000", "" },
190
 
  { ER_UPDATE_LOG_DEPRECATED_TRANSLATED     ,"42000", "" },
191
152
  { ER_QUERY_INTERRUPTED                    ,"70100", "" },
192
 
  { ER_SP_WRONG_NO_OF_ARGS                  ,"42000", "" },
193
 
  { ER_SP_COND_MISMATCH                     ,"42000", "" },
194
 
  { ER_SP_NORETURN                          ,"42000", "" },
195
 
  { ER_SP_NORETURNEND                       ,"2F005", "" },
196
 
  { ER_SP_BAD_CURSOR_QUERY                  ,"42000", "" },
197
 
  { ER_SP_BAD_CURSOR_SELECT                 ,"42000", "" },
198
 
  { ER_SP_CURSOR_MISMATCH                   ,"42000", "" },
199
 
  { ER_SP_CURSOR_ALREADY_OPEN               ,"24000", "" },
200
 
  { ER_SP_CURSOR_NOT_OPEN                   ,"24000", "" },
201
 
  { ER_SP_UNDECLARED_VAR                    ,"42000", "" },
202
 
  { ER_SP_FETCH_NO_DATA                     ,"02000", "" },
203
 
  { ER_SP_DUP_PARAM                         ,"42000", "" },
204
 
  { ER_SP_DUP_VAR                           ,"42000", "" },
205
 
  { ER_SP_DUP_COND                          ,"42000", "" },
206
 
  { ER_SP_DUP_CURS                          ,"42000", "" },
207
 
  { ER_SP_SUBSELECT_NYI                     ,"0A000", "" },
208
 
  { ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG        ,"0A000", "" },
209
 
  { ER_SP_VARCOND_AFTER_CURSHNDLR           ,"42000", "" },
210
 
  { ER_SP_CURSOR_AFTER_HANDLER              ,"42000", "" },
211
 
  { ER_SP_CASE_NOT_FOUND                    ,"20000", "" },
212
153
  { ER_DIVISION_BY_ZERO                     ,"22012", "" },
213
154
  { ER_ILLEGAL_VALUE_FOR_TYPE               ,"22007", "" },
214
 
  { ER_PROCACCESS_DENIED_ERROR              ,"42000", "" },
215
 
  { ER_XAER_NOTA                            ,"XAE04", "" },
216
 
  { ER_XAER_INVAL                           ,"XAE05", "" },
217
155
  { ER_XAER_RMFAIL                          ,"XAE07", "" },
218
 
  { ER_XAER_OUTSIDE                         ,"XAE09", "" },
219
 
  { ER_XAER_RMERR                           ,"XAE03", "" },
220
 
  { ER_XA_RBROLLBACK                        ,"XA100", "" },
221
 
  { ER_NONEXISTING_PROC_GRANT               ,"42000", "" },
222
156
  { ER_DATA_TOO_LONG                        ,"22001", "" },
223
 
  { ER_SP_BAD_SQLSTATE                      ,"42000", "" },
224
 
  { ER_CANT_CREATE_USER_WITH_GRANT          ,"42000", "" },
225
 
  { ER_SP_DUP_HANDLER                       ,"42000", "" },
226
 
  { ER_SP_NOT_VAR_ARG                       ,"42000", "" },
227
157
  { ER_SP_NO_RETSET                         ,"0A000", "" },
228
158
  { ER_CANT_CREATE_GEOMETRY_OBJECT          ,"22003", "" },
229
159
  { ER_TOO_BIG_SCALE                        ,"42000", "S1009" },
230
160
  { ER_TOO_BIG_PRECISION                    ,"42000", "S1009" },
231
161
  { ER_M_BIGGER_THAN_D                      ,"42000", "S1009" },
232
 
  { ER_TOO_LONG_BODY                        ,"42000", "S1009" },
233
162
  { ER_TOO_BIG_DISPLAYWIDTH                 ,"42000", "S1009" },
234
 
  { ER_XAER_DUPID                           ,"XAE08", "" },
235
163
  { ER_DATETIME_FUNCTION_OVERFLOW           ,"22008", "" },
236
164
  { ER_ROW_IS_REFERENCED_2                  ,"23000", "" },
237
165
  { ER_NO_REFERENCED_ROW_2                  ,"23000", "" },
238
 
  { ER_SP_BAD_VAR_SHADOW                    ,"42000", "" },
239
 
  { ER_SP_WRONG_NAME                        ,"42000", "" },
240
 
  { ER_SP_NO_AGGREGATE                      ,"42000", "" },
241
 
  { ER_MAX_PREPARED_STMT_COUNT_REACHED      ,"42000", "" },
242
166
  { ER_NON_GROUPING_FIELD_USED              ,"42000", "" },
243
167
  { ER_FOREIGN_DUPLICATE_KEY                ,"23000", "S1009" },
244
168
  { ER_CANT_CHANGE_TX_ISOLATION             ,"25001", "" },
245
169
  { ER_WRONG_PARAMCOUNT_TO_FUNCTION         ,"42000", "" },
246
170
  { ER_WRONG_PARAMETERS_TO_NATIVE_FCT       ,"42000", "" },
247
 
  { ER_WRONG_PARAMETERS_TO_STORED_FCT       ,"42000", "" },
248
171
  { ER_DUP_ENTRY_WITH_KEY_NAME              ,"23000", "S1009" },
249
172
};
250
173
 
251
 
static bool compare_errno_map(errno_sqlstate_map a,
252
 
                              errno_sqlstate_map b)
 
174
static bool compare_errno_map(sql_state_t a,
 
175
                              sql_state_t b)
253
176
{
254
177
  return (a.drizzle_errno < b.drizzle_errno);
255
178
}
256
179
 
257
 
const char *drizzle_errno_to_sqlstate(uint32_t drizzle_errno)
 
180
const char *convert_to_sqlstate(drizzled::error_t drizzle_errno)
258
181
{
259
182
 
260
 
  errno_sqlstate_map drizzle_err_state= {drizzle_errno, NULL, NULL};
261
 
  errno_sqlstate_map* result=
 
183
  sql_state_t drizzle_err_state= {drizzle_errno, NULL, NULL};
 
184
  sql_state_t* result=
262
185
    lower_bound(&sqlstate_map[0],
263
186
                &sqlstate_map[sizeof(sqlstate_map)/sizeof(*sqlstate_map)],
264
187
                drizzle_err_state, compare_errno_map);
265
188
 
266
189
  if ((*result).drizzle_errno == drizzle_errno)
267
190
    return (*result).odbc_state;
 
191
 
268
192
  /* General error */
269
193
  return "HY000";
270
 
 
271
194
}
272
195
 
 
196
} /* namespace error */
273
197
} /* namespace drizzled */