EMMA Coverage Report (generated Tue Jul 25 07:27:46 CDT 2006)
[all classes][com.mysql.jdbc]

COVERAGE SUMMARY FOR SOURCE FILE [SQLError.java]

nameclass, %method, %block, %line, %
SQLError.java100% (1/1)75%  (9/12)89%  (1817/2040)85%  (272/321)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class SQLError100% (1/1)75%  (9/12)89%  (1817/2040)85%  (272/321)
SQLError (): void 0%   (0/1)0%   (0/3)0%   (0/1)
dumpSqlStatesMappingsAsXml (): void 0%   (0/1)0%   (0/134)0%   (0/28)
mysqlToXOpen (int): String 0%   (0/1)0%   (0/16)0%   (0/4)
mysqlToSqlState (int, boolean): String 100% (1/1)62%  (5/8)67%  (2/3)
createSQLException (String, String, int): SQLException 100% (1/1)67%  (43/64)75%  (9/12)
createSQLException (String, String): SQLException 100% (1/1)69%  (40/58)75%  (9/12)
convertShowWarningsToSQLWarnings (Connection, int, boolean): SQLWarning 100% (1/1)81%  (123/151)80%  (37/46)
<static initializer> 100% (1/1)100% (1575/1575)100% (208/208)
convertShowWarningsToSQLWarnings (Connection): SQLWarning 100% (1/1)100% (5/5)100% (1/1)
createSQLException (String): SQLException 100% (1/1)100% (5/5)100% (1/1)
get (String): String 100% (1/1)100% (5/5)100% (1/1)
mysqlToSql99 (int): String 100% (1/1)100% (16/16)100% (4/4)

1/*
2 Copyright (C) 2002-2004 MySQL AB
3 
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of version 2 of the GNU General Public License as 
6 published by the Free Software Foundation.
7 
8 There are special exceptions to the terms and conditions of the GPL 
9 as it is applied to this software. View the full text of the 
10 exception in file EXCEPTIONS-CONNECTOR-J in the directory of this 
11 software distribution.
12 
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17 
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21 
22 
23 
24 */
25package com.mysql.jdbc;
26 
27import java.sql.DataTruncation;
28import java.sql.SQLException;
29import java.sql.SQLWarning;
30 
31import java.util.HashMap;
32import java.util.Hashtable;
33import java.util.Iterator;
34import java.util.Map;
35import java.util.TreeMap;
36 
37import com.mysql.jdbc.exceptions.MySQLDataException;
38import com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException;
39import com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException;
40import com.mysql.jdbc.exceptions.MySQLSyntaxErrorException;
41import com.mysql.jdbc.exceptions.MySQLTransactionRollbackException;
42 
43/**
44 * SQLError is a utility class that maps MySQL error codes to X/Open error codes
45 * as is required by the JDBC spec.
46 * 
47 * @author Mark Matthews <mmatthew_at_worldserver.com>
48 * @version $Id: SQLError.java 5122 2006-04-03 10:37:11 -0500 (Mon, 03 Apr 2006) mmatthews $
49 */
50public class SQLError {
51        static final int ER_WARNING_NOT_COMPLETE_ROLLBACK = 1196;
52 
53        private static Map mysqlToSql99State;
54 
55        private static Map mysqlToSqlState;
56 
57        public static final String SQL_STATE_BASE_TABLE_NOT_FOUND = "S0002"; //$NON-NLS-1$
58 
59        public static final String SQL_STATE_BASE_TABLE_OR_VIEW_ALREADY_EXISTS = "S0001"; //$NON-NLS-1$
60 
61        public static final String SQL_STATE_BASE_TABLE_OR_VIEW_NOT_FOUND = "42S02"; //$NON-NLS-1$
62 
63        public static final String SQL_STATE_COLUMN_ALREADY_EXISTS = "S0021"; //$NON-NLS-1$
64 
65        public static final String SQL_STATE_COLUMN_NOT_FOUND = "S0022"; //$NON-NLS-1$
66 
67        public static final String SQL_STATE_COMMUNICATION_LINK_FAILURE = "08S01"; //$NON-NLS-1$
68 
69        public static final String SQL_STATE_CONNECTION_FAIL_DURING_TX = "08007"; //$NON-NLS-1$
70 
71        public static final String SQL_STATE_CONNECTION_IN_USE = "08002"; //$NON-NLS-1$
72 
73        public static final String SQL_STATE_CONNECTION_NOT_OPEN = "08003"; //$NON-NLS-1$
74 
75        public static final String SQL_STATE_CONNECTION_REJECTED = "08004"; //$NON-NLS-1$
76 
77        public static final String SQL_STATE_DATE_TRUNCATED = "01004"; //$NON-NLS-1$
78 
79        public static final String SQL_STATE_DATETIME_FIELD_OVERFLOW = "22008"; //$NON-NLS-1$
80 
81        public static final String SQL_STATE_DEADLOCK = "41000"; //$NON-NLS-1$
82 
83        public static final String SQL_STATE_DISCONNECT_ERROR = "01002"; //$NON-NLS-1$
84 
85        public static final String SQL_STATE_DIVISION_BY_ZERO = "22012"; //$NON-NLS-1$
86 
87        public static final String SQL_STATE_DRIVER_NOT_CAPABLE = "S1C00"; //$NON-NLS-1$
88 
89        public static final String SQL_STATE_ERROR_IN_ROW = "01S01"; //$NON-NLS-1$
90 
91        public static final String SQL_STATE_GENERAL_ERROR = "S1000"; //$NON-NLS-1$
92 
93        public static final String SQL_STATE_ILLEGAL_ARGUMENT = "S1009"; //$NON-NLS-1$
94 
95        public static final String SQL_STATE_INDEX_ALREADY_EXISTS = "S0011"; //$NON-NLS-1$
96 
97        public static final String SQL_STATE_INDEX_NOT_FOUND = "S0012"; //$NON-NLS-1$
98 
99        public static final String SQL_STATE_INSERT_VALUE_LIST_NO_MATCH_COL_LIST = "21S01"; //$NON-NLS-1$
100 
101        public static final String SQL_STATE_INVALID_AUTH_SPEC = "28000"; //$NON-NLS-1$
102 
103        public static final String SQL_STATE_INVALID_CHARACTER_VALUE_FOR_CAST = "22018"; // $NON_NLS-1$
104 
105        public static final String SQL_STATE_INVALID_COLUMN_NUMBER = "S1002"; //$NON-NLS-1$
106 
107        public static final String SQL_STATE_INVALID_CONNECTION_ATTRIBUTE = "01S00"; //$NON-NLS-1$
108 
109        public static final String SQL_STATE_MEMORY_ALLOCATION_FAILURE = "S1001"; //$NON-NLS-1$
110 
111        public static final String SQL_STATE_MORE_THAN_ONE_ROW_UPDATED_OR_DELETED = "01S04"; //$NON-NLS-1$
112 
113        public static final String SQL_STATE_NO_DEFAULT_FOR_COLUMN = "S0023"; //$NON-NLS-1$
114 
115        public static final String SQL_STATE_NO_ROWS_UPDATED_OR_DELETED = "01S03"; //$NON-NLS-1$
116 
117        public static final String SQL_STATE_NUMERIC_VALUE_OUT_OF_RANGE = "22003"; //$NON-NLS-1$
118 
119        public static final String SQL_STATE_PRIVILEGE_NOT_REVOKED = "01006"; //$NON-NLS-1$
120 
121        public static final String SQL_STATE_SYNTAX_ERROR = "42000"; //$NON-NLS-1$
122 
123        public static final String SQL_STATE_TIMEOUT_EXPIRED = "S1T00"; //$NON-NLS-1$
124 
125        public static final String SQL_STATE_TRANSACTION_RESOLUTION_UNKNOWN = "08007"; // $NON_NLS-1$
126 
127        public static final String SQL_STATE_UNABLE_TO_CONNECT_TO_DATASOURCE = "08001"; //$NON-NLS-1$
128 
129        public static final String SQL_STATE_WRONG_NO_OF_PARAMETERS = "07001"; //$NON-NLS-1$
130        
131        public static final String SQL_STATE_INVALID_TRANSACTION_TERMINATION = "2D000"; //$NON_NLS-1$
132 
133        private static Map sqlStateMessages;
134 
135        static {
136                sqlStateMessages = new HashMap();
137                sqlStateMessages.put(SQL_STATE_DISCONNECT_ERROR, Messages
138                                .getString("SQLError.35")); //$NON-NLS-1$
139                sqlStateMessages.put(SQL_STATE_DATE_TRUNCATED, Messages
140                                .getString("SQLError.36")); //$NON-NLS-1$
141                sqlStateMessages.put(SQL_STATE_PRIVILEGE_NOT_REVOKED, Messages
142                                .getString("SQLError.37")); //$NON-NLS-1$
143                sqlStateMessages.put(SQL_STATE_INVALID_CONNECTION_ATTRIBUTE, Messages
144                                .getString("SQLError.38")); //$NON-NLS-1$
145                sqlStateMessages.put(SQL_STATE_ERROR_IN_ROW, Messages
146                                .getString("SQLError.39")); //$NON-NLS-1$
147                sqlStateMessages.put(SQL_STATE_NO_ROWS_UPDATED_OR_DELETED, Messages
148                                .getString("SQLError.40")); //$NON-NLS-1$
149                sqlStateMessages.put(SQL_STATE_MORE_THAN_ONE_ROW_UPDATED_OR_DELETED,
150                                Messages.getString("SQLError.41")); //$NON-NLS-1$
151                sqlStateMessages.put(SQL_STATE_WRONG_NO_OF_PARAMETERS, Messages
152                                .getString("SQLError.42")); //$NON-NLS-1$
153                sqlStateMessages.put(SQL_STATE_UNABLE_TO_CONNECT_TO_DATASOURCE,
154                                Messages.getString("SQLError.43")); //$NON-NLS-1$
155                sqlStateMessages.put(SQL_STATE_CONNECTION_IN_USE, Messages
156                                .getString("SQLError.44")); //$NON-NLS-1$
157                sqlStateMessages.put(SQL_STATE_CONNECTION_NOT_OPEN, Messages
158                                .getString("SQLError.45")); //$NON-NLS-1$
159                sqlStateMessages.put(SQL_STATE_CONNECTION_REJECTED, Messages
160                                .getString("SQLError.46")); //$NON-NLS-1$
161                sqlStateMessages.put(SQL_STATE_CONNECTION_FAIL_DURING_TX, Messages
162                                .getString("SQLError.47")); //$NON-NLS-1$
163                sqlStateMessages.put(SQL_STATE_COMMUNICATION_LINK_FAILURE, Messages
164                                .getString("SQLError.48")); //$NON-NLS-1$
165                sqlStateMessages.put(SQL_STATE_INSERT_VALUE_LIST_NO_MATCH_COL_LIST,
166                                Messages.getString("SQLError.49")); //$NON-NLS-1$
167                sqlStateMessages.put(SQL_STATE_NUMERIC_VALUE_OUT_OF_RANGE, Messages
168                                .getString("SQLError.50")); //$NON-NLS-1$
169                sqlStateMessages.put(SQL_STATE_DATETIME_FIELD_OVERFLOW, Messages
170                                .getString("SQLError.51")); //$NON-NLS-1$
171                sqlStateMessages.put(SQL_STATE_DIVISION_BY_ZERO, Messages
172                                .getString("SQLError.52")); //$NON-NLS-1$
173                sqlStateMessages.put(SQL_STATE_DEADLOCK, Messages
174                                .getString("SQLError.53")); //$NON-NLS-1$
175                sqlStateMessages.put(SQL_STATE_INVALID_AUTH_SPEC, Messages
176                                .getString("SQLError.54")); //$NON-NLS-1$
177                sqlStateMessages.put(SQL_STATE_SYNTAX_ERROR, Messages
178                                .getString("SQLError.55")); //$NON-NLS-1$
179                sqlStateMessages.put(SQL_STATE_BASE_TABLE_OR_VIEW_NOT_FOUND, Messages
180                                .getString("SQLError.56")); //$NON-NLS-1$
181                sqlStateMessages.put(SQL_STATE_BASE_TABLE_OR_VIEW_ALREADY_EXISTS,
182                                Messages.getString("SQLError.57")); //$NON-NLS-1$
183                sqlStateMessages.put(SQL_STATE_BASE_TABLE_NOT_FOUND, Messages
184                                .getString("SQLError.58")); //$NON-NLS-1$
185                sqlStateMessages.put(SQL_STATE_INDEX_ALREADY_EXISTS, Messages
186                                .getString("SQLError.59")); //$NON-NLS-1$
187                sqlStateMessages.put(SQL_STATE_INDEX_NOT_FOUND, Messages
188                                .getString("SQLError.60")); //$NON-NLS-1$
189                sqlStateMessages.put(SQL_STATE_COLUMN_ALREADY_EXISTS, Messages
190                                .getString("SQLError.61")); //$NON-NLS-1$
191                sqlStateMessages.put(SQL_STATE_COLUMN_NOT_FOUND, Messages
192                                .getString("SQLError.62")); //$NON-NLS-1$
193                sqlStateMessages.put(SQL_STATE_NO_DEFAULT_FOR_COLUMN, Messages
194                                .getString("SQLError.63")); //$NON-NLS-1$
195                sqlStateMessages.put(SQL_STATE_GENERAL_ERROR, Messages
196                                .getString("SQLError.64")); //$NON-NLS-1$
197                sqlStateMessages.put(SQL_STATE_MEMORY_ALLOCATION_FAILURE, Messages
198                                .getString("SQLError.65")); //$NON-NLS-1$
199                sqlStateMessages.put(SQL_STATE_INVALID_COLUMN_NUMBER, Messages
200                                .getString("SQLError.66")); //$NON-NLS-1$
201                sqlStateMessages.put(SQL_STATE_ILLEGAL_ARGUMENT, Messages
202                                .getString("SQLError.67")); //$NON-NLS-1$
203                sqlStateMessages.put(SQL_STATE_DRIVER_NOT_CAPABLE, Messages
204                                .getString("SQLError.68")); //$NON-NLS-1$
205                sqlStateMessages.put(SQL_STATE_TIMEOUT_EXPIRED, Messages
206                                .getString("SQLError.69")); //$NON-NLS-1$
207 
208                mysqlToSqlState = new Hashtable();
209 
210                //
211                // Communications Errors
212                //
213                // ER_CON_COUNT_ERROR 1040
214                // ER_BAD_HOST_ERROR 1042
215                // ER_HANDSHAKE_ERROR 1043
216                // ER_UNKNOWN_COM_ERROR 1047
217                // ER_IPSOCK_ERROR 1081
218                //
219                mysqlToSqlState.put(new Integer(1040), SQL_STATE_CONNECTION_REJECTED);
220                mysqlToSqlState.put(new Integer(1042), SQL_STATE_CONNECTION_REJECTED);
221                mysqlToSqlState.put(new Integer(1043), SQL_STATE_CONNECTION_REJECTED);
222                mysqlToSqlState.put(new Integer(1047),
223                                SQL_STATE_COMMUNICATION_LINK_FAILURE);
224                mysqlToSqlState.put(new Integer(1081),
225                                SQL_STATE_COMMUNICATION_LINK_FAILURE);
226 
227                // ER_HOST_IS_BLOCKED 1129
228                // ER_HOST_NOT_PRIVILEGED 1130
229                mysqlToSqlState.put(new Integer(1129), SQL_STATE_CONNECTION_REJECTED);
230                mysqlToSqlState.put(new Integer(1130), SQL_STATE_CONNECTION_REJECTED);
231 
232                //
233                // Authentication Errors
234                //
235                // ER_ACCESS_DENIED_ERROR 1045
236                //
237                mysqlToSqlState.put(new Integer(1045), SQL_STATE_INVALID_AUTH_SPEC);
238 
239                //
240                // Resource errors
241                //
242                // ER_CANT_CREATE_FILE 1004
243                // ER_CANT_CREATE_TABLE 1005
244                // ER_CANT_LOCK 1015
245                // ER_DISK_FULL 1021
246                // ER_CON_COUNT_ERROR 1040
247                // ER_OUT_OF_RESOURCES 1041
248                //
249                // Out-of-memory errors
250                //
251                // ER_OUTOFMEMORY 1037
252                // ER_OUT_OF_SORTMEMORY 1038
253                //
254                mysqlToSqlState.put(new Integer(1037),
255                                SQL_STATE_MEMORY_ALLOCATION_FAILURE);
256                mysqlToSqlState.put(new Integer(1038),
257                                SQL_STATE_MEMORY_ALLOCATION_FAILURE);
258 
259                //
260                // Syntax Errors
261                //
262                // ER_PARSE_ERROR 1064
263                // ER_EMPTY_QUERY 1065
264                //
265                mysqlToSqlState.put(new Integer(1064), SQL_STATE_SYNTAX_ERROR);
266                mysqlToSqlState.put(new Integer(1065), SQL_STATE_SYNTAX_ERROR);
267 
268                //
269                // Invalid argument errors
270                //
271                // ER_WRONG_FIELD_WITH_GROUP 1055
272                // ER_WRONG_GROUP_FIELD 1056
273                // ER_WRONG_SUM_SELECT 1057
274                // ER_TOO_LONG_IDENT 1059
275                // ER_DUP_FIELDNAME 1060
276                // ER_DUP_KEYNAME 1061
277                // ER_DUP_ENTRY 1062
278                // ER_WRONG_FIELD_SPEC 1063
279                // ER_NONUNIQ_TABLE 1066
280                // ER_INVALID_DEFAULT 1067
281                // ER_MULTIPLE_PRI_KEY 1068
282                // ER_TOO_MANY_KEYS 1069
283                // ER_TOO_MANY_KEY_PARTS 1070
284                // ER_TOO_LONG_KEY 1071
285                // ER_KEY_COLUMN_DOES_NOT_EXIST 1072
286                // ER_BLOB_USED_AS_KEY 1073
287                // ER_TOO_BIG_FIELDLENGTH 1074
288                // ER_WRONG_AUTO_KEY 1075
289                // ER_NO_SUCH_INDEX 1082
290                // ER_WRONG_FIELD_TERMINATORS 1083
291                // ER_BLOBS_AND_NO_TERMINATED 1084
292                //
293                mysqlToSqlState.put(new Integer(1055), SQL_STATE_ILLEGAL_ARGUMENT);
294                mysqlToSqlState.put(new Integer(1056), SQL_STATE_ILLEGAL_ARGUMENT);
295                mysqlToSqlState.put(new Integer(1057), SQL_STATE_ILLEGAL_ARGUMENT);
296                mysqlToSqlState.put(new Integer(1059), SQL_STATE_ILLEGAL_ARGUMENT);
297                mysqlToSqlState.put(new Integer(1060), SQL_STATE_ILLEGAL_ARGUMENT);
298                mysqlToSqlState.put(new Integer(1061), SQL_STATE_ILLEGAL_ARGUMENT);
299                mysqlToSqlState.put(new Integer(1062), SQL_STATE_ILLEGAL_ARGUMENT);
300                mysqlToSqlState.put(new Integer(1063), SQL_STATE_ILLEGAL_ARGUMENT);
301                mysqlToSqlState.put(new Integer(1066), SQL_STATE_ILLEGAL_ARGUMENT);
302                mysqlToSqlState.put(new Integer(1067), SQL_STATE_ILLEGAL_ARGUMENT);
303                mysqlToSqlState.put(new Integer(1068), SQL_STATE_ILLEGAL_ARGUMENT);
304                mysqlToSqlState.put(new Integer(1069), SQL_STATE_ILLEGAL_ARGUMENT);
305                mysqlToSqlState.put(new Integer(1070), SQL_STATE_ILLEGAL_ARGUMENT);
306                mysqlToSqlState.put(new Integer(1071), SQL_STATE_ILLEGAL_ARGUMENT);
307                mysqlToSqlState.put(new Integer(1072), SQL_STATE_ILLEGAL_ARGUMENT);
308                mysqlToSqlState.put(new Integer(1073), SQL_STATE_ILLEGAL_ARGUMENT);
309                mysqlToSqlState.put(new Integer(1074), SQL_STATE_ILLEGAL_ARGUMENT);
310                mysqlToSqlState.put(new Integer(1075), SQL_STATE_ILLEGAL_ARGUMENT);
311                mysqlToSqlState.put(new Integer(1082), SQL_STATE_ILLEGAL_ARGUMENT);
312                mysqlToSqlState.put(new Integer(1083), SQL_STATE_ILLEGAL_ARGUMENT);
313                mysqlToSqlState.put(new Integer(1084), SQL_STATE_ILLEGAL_ARGUMENT);
314 
315                //
316                // ER_WRONG_VALUE_COUNT 1058
317                //
318                mysqlToSqlState.put(new Integer(1058),
319                                SQL_STATE_INSERT_VALUE_LIST_NO_MATCH_COL_LIST);
320 
321                // ER_CANT_CREATE_DB 1006
322                // ER_DB_CREATE_EXISTS 1007
323                // ER_DB_DROP_EXISTS 1008
324                // ER_DB_DROP_DELETE 1009
325                // ER_DB_DROP_RMDIR 1010
326                // ER_CANT_DELETE_FILE 1011
327                // ER_CANT_FIND_SYSTEM_REC 1012
328                // ER_CANT_GET_STAT 1013
329                // ER_CANT_GET_WD 1014
330                // ER_UNEXPECTED_EOF 1039
331                // ER_CANT_OPEN_FILE 1016
332                // ER_FILE_NOT_FOUND 1017
333                // ER_CANT_READ_DIR 1018
334                // ER_CANT_SET_WD 1019
335                // ER_CHECKREAD 1020
336                // ER_DUP_KEY 1022
337                // ER_ERROR_ON_CLOSE 1023
338                // ER_ERROR_ON_READ 1024
339                // ER_ERROR_ON_RENAME 1025
340                // ER_ERROR_ON_WRITE 1026
341                // ER_FILE_USED 1027
342                // ER_FILSORT_ABORT 1028
343                // ER_FORM_NOT_FOUND 1029
344                // ER_GET_ERRNO 1030
345                // ER_ILLEGAL_HA 1031
346                // ER_KEY_NOT_FOUND 1032
347                // ER_NOT_FORM_FILE 1033
348                // ER_DBACCESS_DENIED_ERROR 1044
349                // ER_NO_DB_ERROR 1046
350                // ER_BAD_NULL_ERROR 1048
351                // ER_BAD_DB_ERROR 1049
352                // ER_TABLE_EXISTS_ERROR 1050
353                // ER_BAD_TABLE_ERROR 1051
354                mysqlToSqlState.put(new Integer(1051),
355                                SQL_STATE_BASE_TABLE_OR_VIEW_NOT_FOUND);
356 
357                // ER_NON_UNIQ_ERROR 1052
358                // ER_BAD_FIELD_ERROR 1054
359                mysqlToSqlState.put(new Integer(1054), SQL_STATE_COLUMN_NOT_FOUND);
360 
361                // ER_TEXTFILE_NOT_READABLE 1085
362                // ER_FILE_EXISTS_ERROR 1086
363                // ER_LOAD_INFO 1087
364                // ER_ALTER_INFO 1088
365                // ER_WRONG_SUB_KEY 1089
366                // ER_CANT_REMOVE_ALL_FIELDS 1090
367                // ER_CANT_DROP_FIELD_OR_KEY 1091
368                // ER_INSERT_INFO 1092
369                // ER_INSERT_TABLE_USED 1093
370                // ER_LOCK_DEADLOCK 1213
371                mysqlToSqlState.put(new Integer(1205), SQL_STATE_DEADLOCK);
372                mysqlToSqlState.put(new Integer(1213), SQL_STATE_DEADLOCK);
373 
374                mysqlToSql99State = new HashMap();
375 
376                mysqlToSql99State.put(new Integer(1205), SQL_STATE_DEADLOCK);
377                mysqlToSql99State.put(new Integer(1213), SQL_STATE_DEADLOCK);
378                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_DUP_KEY),
379                                "23000");
380                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_OUTOFMEMORY),
381                                "HY001");
382                mysqlToSql99State.put(new Integer(
383                                MysqlErrorNumbers.ER_OUT_OF_SORTMEMORY), "HY001");
384                mysqlToSql99State.put(
385                                new Integer(MysqlErrorNumbers.ER_CON_COUNT_ERROR), "08004");
386                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_BAD_HOST_ERROR),
387                                "08S01");
388                mysqlToSql99State.put(
389                                new Integer(MysqlErrorNumbers.ER_HANDSHAKE_ERROR), "08S01");
390                mysqlToSql99State.put(new Integer(
391                                MysqlErrorNumbers.ER_DBACCESS_DENIED_ERROR), "42000");
392                mysqlToSql99State.put(new Integer(
393                                MysqlErrorNumbers.ER_ACCESS_DENIED_ERROR), "28000");
394                mysqlToSql99State.put(new Integer(
395                                MysqlErrorNumbers.ER_TABLE_EXISTS_ERROR), "42S01");
396                mysqlToSql99State.put(
397                                new Integer(MysqlErrorNumbers.ER_BAD_TABLE_ERROR), "42S02");
398                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_NON_UNIQ_ERROR),
399                                "23000");
400                mysqlToSql99State.put(
401                                new Integer(MysqlErrorNumbers.ER_SERVER_SHUTDOWN), "08S01");
402                mysqlToSql99State.put(
403                                new Integer(MysqlErrorNumbers.ER_BAD_FIELD_ERROR), "42S22");
404                mysqlToSql99State.put(new Integer(
405                                MysqlErrorNumbers.ER_WRONG_FIELD_WITH_GROUP), "42000");
406                mysqlToSql99State.put(new Integer(
407                                MysqlErrorNumbers.ER_WRONG_GROUP_FIELD), "42000");
408                mysqlToSql99State.put(
409                                new Integer(MysqlErrorNumbers.ER_WRONG_SUM_SELECT), "42000");
410                mysqlToSql99State.put(new Integer(
411                                MysqlErrorNumbers.ER_WRONG_VALUE_COUNT), "21S01");
412                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_TOO_LONG_IDENT),
413                                "42000");
414                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_DUP_FIELDNAME),
415                                "42S21");
416                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_DUP_KEYNAME),
417                                "42000");
418                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_DUP_ENTRY),
419                                "23000");
420                mysqlToSql99State.put(
421                                new Integer(MysqlErrorNumbers.ER_WRONG_FIELD_SPEC), "42000");
422                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_PARSE_ERROR),
423                                "42000");
424                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_EMPTY_QUERY),
425                                "42000");
426                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_NONUNIQ_TABLE),
427                                "42000");
428                mysqlToSql99State.put(
429                                new Integer(MysqlErrorNumbers.ER_INVALID_DEFAULT), "42000");
430                mysqlToSql99State.put(
431                                new Integer(MysqlErrorNumbers.ER_MULTIPLE_PRI_KEY), "42000");
432                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_TOO_MANY_KEYS),
433                                "42000");
434                mysqlToSql99State.put(new Integer(
435                                MysqlErrorNumbers.ER_TOO_MANY_KEY_PARTS), "42000");
436                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_TOO_LONG_KEY),
437                                "42000");
438                mysqlToSql99State.put(new Integer(
439                                MysqlErrorNumbers.ER_KEY_COLUMN_DOES_NOT_EXITS), "42000");
440                mysqlToSql99State.put(
441                                new Integer(MysqlErrorNumbers.ER_BLOB_USED_AS_KEY), "42000");
442                mysqlToSql99State.put(new Integer(
443                                MysqlErrorNumbers.ER_TOO_BIG_FIELDLENGTH), "42000");
444                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_WRONG_AUTO_KEY),
445                                "42000");
446                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_FORCING_CLOSE),
447                                "08S01");
448                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_IPSOCK_ERROR),
449                                "08S01");
450                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_NO_SUCH_INDEX),
451                                "42S12");
452                mysqlToSql99State.put(new Integer(
453                                MysqlErrorNumbers.ER_WRONG_FIELD_TERMINATORS), "42000");
454                mysqlToSql99State.put(new Integer(
455                                MysqlErrorNumbers.ER_BLOBS_AND_NO_TERMINATED), "42000");
456                mysqlToSql99State.put(new Integer(
457                                MysqlErrorNumbers.ER_CANT_REMOVE_ALL_FIELDS), "42000");
458                mysqlToSql99State.put(new Integer(
459                                MysqlErrorNumbers.ER_CANT_DROP_FIELD_OR_KEY), "42000");
460                mysqlToSql99State.put(new Integer(
461                                MysqlErrorNumbers.ER_BLOB_CANT_HAVE_DEFAULT), "42000");
462                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_WRONG_DB_NAME),
463                                "42000");
464                mysqlToSql99State.put(
465                                new Integer(MysqlErrorNumbers.ER_WRONG_TABLE_NAME), "42000");
466                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_TOO_BIG_SELECT),
467                                "42000");
468                mysqlToSql99State.put(new Integer(
469                                MysqlErrorNumbers.ER_UNKNOWN_PROCEDURE), "42000");
470                mysqlToSql99State.put(new Integer(
471                                MysqlErrorNumbers.ER_WRONG_PARAMCOUNT_TO_PROCEDURE), "42000");
472                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_UNKNOWN_TABLE),
473                                "42S02");
474                mysqlToSql99State.put(new Integer(
475                                MysqlErrorNumbers.ER_FIELD_SPECIFIED_TWICE), "42000");
476                mysqlToSql99State.put(new Integer(
477                                MysqlErrorNumbers.ER_UNSUPPORTED_EXTENSION), "42000");
478                mysqlToSql99State.put(new Integer(
479                                MysqlErrorNumbers.ER_TABLE_MUST_HAVE_COLUMNS), "42000");
480                mysqlToSql99State.put(new Integer(
481                                MysqlErrorNumbers.ER_UNKNOWN_CHARACTER_SET), "42000");
482                mysqlToSql99State.put(
483                                new Integer(MysqlErrorNumbers.ER_TOO_BIG_ROWSIZE), "42000");
484                mysqlToSql99State.put(
485                                new Integer(MysqlErrorNumbers.ER_WRONG_OUTER_JOIN), "42000");
486                mysqlToSql99State.put(new Integer(
487                                MysqlErrorNumbers.ER_NULL_COLUMN_IN_INDEX), "42000");
488                mysqlToSql99State.put(new Integer(
489                                MysqlErrorNumbers.ER_PASSWORD_ANONYMOUS_USER), "42000");
490                mysqlToSql99State.put(new Integer(
491                                MysqlErrorNumbers.ER_PASSWORD_NOT_ALLOWED), "42000");
492                mysqlToSql99State.put(new Integer(
493                                MysqlErrorNumbers.ER_PASSWORD_NO_MATCH), "42000");
494                mysqlToSql99State.put(new Integer(
495                                MysqlErrorNumbers.ER_WRONG_VALUE_COUNT_ON_ROW), "21S01");
496                mysqlToSql99State.put(new Integer(
497                                MysqlErrorNumbers.ER_INVALID_USE_OF_NULL), "42000");
498                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_REGEXP_ERROR),
499                                "42000");
500                mysqlToSql99State.put(new Integer(
501                                MysqlErrorNumbers.ER_MIX_OF_GROUP_FUNC_AND_FIELDS), "42000");
502                mysqlToSql99State.put(new Integer(
503                                MysqlErrorNumbers.ER_NONEXISTING_GRANT), "42000");
504                mysqlToSql99State.put(new Integer(
505                                MysqlErrorNumbers.ER_TABLEACCESS_DENIED_ERROR), "42000");
506                mysqlToSql99State.put(new Integer(
507                                MysqlErrorNumbers.ER_COLUMNACCESS_DENIED_ERROR), "42000");
508                mysqlToSql99State.put(new Integer(
509                                MysqlErrorNumbers.ER_ILLEGAL_GRANT_FOR_TABLE), "42000");
510                mysqlToSql99State.put(new Integer(
511                                MysqlErrorNumbers.ER_GRANT_WRONG_HOST_OR_USER), "42000");
512                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_NO_SUCH_TABLE),
513                                "42S02");
514                mysqlToSql99State.put(new Integer(
515                                MysqlErrorNumbers.ER_NONEXISTING_TABLE_GRANT), "42000");
516                mysqlToSql99State.put(new Integer(
517                                MysqlErrorNumbers.ER_NOT_ALLOWED_COMMAND), "42000");
518                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_SYNTAX_ERROR),
519                                "42000");
520                mysqlToSql99State.put(new Integer(
521                                MysqlErrorNumbers.ER_ABORTING_CONNECTION), "08S01");
522                mysqlToSql99State.put(new Integer(
523                                MysqlErrorNumbers.ER_NET_PACKET_TOO_LARGE), "08S01");
524                mysqlToSql99State.put(new Integer(
525                                MysqlErrorNumbers.ER_NET_READ_ERROR_FROM_PIPE), "08S01");
526                mysqlToSql99State.put(
527                                new Integer(MysqlErrorNumbers.ER_NET_FCNTL_ERROR), "08S01");
528                mysqlToSql99State.put(new Integer(
529                                MysqlErrorNumbers.ER_NET_PACKETS_OUT_OF_ORDER), "08S01");
530                mysqlToSql99State.put(new Integer(
531                                MysqlErrorNumbers.ER_NET_UNCOMPRESS_ERROR), "08S01");
532                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_NET_READ_ERROR),
533                                "08S01");
534                mysqlToSql99State.put(new Integer(
535                                MysqlErrorNumbers.ER_NET_READ_INTERRUPTED), "08S01");
536                mysqlToSql99State.put(new Integer(
537                                MysqlErrorNumbers.ER_NET_ERROR_ON_WRITE), "08S01");
538                mysqlToSql99State.put(new Integer(
539                                MysqlErrorNumbers.ER_NET_WRITE_INTERRUPTED), "08S01");
540                mysqlToSql99State.put(
541                                new Integer(MysqlErrorNumbers.ER_TOO_LONG_STRING), "42000");
542                mysqlToSql99State.put(new Integer(
543                                MysqlErrorNumbers.ER_TABLE_CANT_HANDLE_BLOB), "42000");
544                mysqlToSql99State
545                                .put(new Integer(
546                                                MysqlErrorNumbers.ER_TABLE_CANT_HANDLE_AUTO_INCREMENT),
547                                                "42000");
548                mysqlToSql99State.put(new Integer(
549                                MysqlErrorNumbers.ER_WRONG_COLUMN_NAME), "42000");
550                mysqlToSql99State.put(
551                                new Integer(MysqlErrorNumbers.ER_WRONG_KEY_COLUMN), "42000");
552                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_DUP_UNIQUE),
553                                "23000");
554                mysqlToSql99State.put(new Integer(
555                                MysqlErrorNumbers.ER_BLOB_KEY_WITHOUT_LENGTH), "42000");
556                mysqlToSql99State.put(new Integer(
557                                MysqlErrorNumbers.ER_PRIMARY_CANT_HAVE_NULL), "42000");
558                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_TOO_MANY_ROWS),
559                                "42000");
560                mysqlToSql99State.put(new Integer(
561                                MysqlErrorNumbers.ER_REQUIRES_PRIMARY_KEY), "42000");
562                mysqlToSql99State.put(new Integer(
563                                MysqlErrorNumbers.ER_CHECK_NO_SUCH_TABLE), "42000");
564                mysqlToSql99State.put(new Integer(
565                                MysqlErrorNumbers.ER_CHECK_NOT_IMPLEMENTED), "42000");
566                mysqlToSql99State.put(new Integer(
567                                MysqlErrorNumbers.ER_CANT_DO_THIS_DURING_AN_TRANSACTION),
568                                "25000");
569                mysqlToSql99State.put(new Integer(
570                                MysqlErrorNumbers.ER_NEW_ABORTING_CONNECTION), "08S01");
571                mysqlToSql99State.put(
572                                new Integer(MysqlErrorNumbers.ER_MASTER_NET_READ), "08S01");
573                mysqlToSql99State.put(
574                                new Integer(MysqlErrorNumbers.ER_MASTER_NET_WRITE), "08S01");
575                mysqlToSql99State.put(new Integer(
576                                MysqlErrorNumbers.ER_TOO_MANY_USER_CONNECTIONS), "42000");
577                mysqlToSql99State.put(new Integer(
578                                MysqlErrorNumbers.ER_READ_ONLY_TRANSACTION), "25000");
579                mysqlToSql99State.put(new Integer(
580                                MysqlErrorNumbers.ER_NO_PERMISSION_TO_CREATE_USER), "42000");
581                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_LOCK_DEADLOCK),
582                                "40001");
583                mysqlToSql99State.put(new Integer(
584                                MysqlErrorNumbers.ER_NO_REFERENCED_ROW), "23000");
585                mysqlToSql99State.put(new Integer(
586                                MysqlErrorNumbers.ER_ROW_IS_REFERENCED), "23000");
587                mysqlToSql99State.put(new Integer(
588                                MysqlErrorNumbers.ER_CONNECT_TO_MASTER), "08S01");
589                mysqlToSql99State.put(new Integer(
590                                MysqlErrorNumbers.ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT),
591                                "21000");
592                mysqlToSql99State.put(new Integer(
593                                MysqlErrorNumbers.ER_USER_LIMIT_REACHED), "42000");
594                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_NO_DEFAULT),
595                                "42000");
596                mysqlToSql99State.put(new Integer(
597                                MysqlErrorNumbers.ER_WRONG_VALUE_FOR_VAR), "42000");
598                mysqlToSql99State.put(new Integer(
599                                MysqlErrorNumbers.ER_WRONG_TYPE_FOR_VAR), "42000");
600                mysqlToSql99State.put(new Integer(
601                                MysqlErrorNumbers.ER_CANT_USE_OPTION_HERE), "42000");
602                mysqlToSql99State.put(new Integer(
603                                MysqlErrorNumbers.ER_NOT_SUPPORTED_YET), "42000");
604                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_WRONG_FK_DEF),
605                                "42000");
606                mysqlToSql99State.put(
607                                new Integer(MysqlErrorNumbers.ER_OPERAND_COLUMNS), "21000");
608                mysqlToSql99State.put(new Integer(
609                                MysqlErrorNumbers.ER_SUBQUERY_NO_1_ROW), "21000");
610                mysqlToSql99State.put(new Integer(
611                                MysqlErrorNumbers.ER_ILLEGAL_REFERENCE), "42S22");
612                mysqlToSql99State.put(new Integer(
613                                MysqlErrorNumbers.ER_DERIVED_MUST_HAVE_ALIAS), "42000");
614                mysqlToSql99State.put(new Integer(MysqlErrorNumbers.ER_SELECT_REDUCED),
615                                "01000");
616                mysqlToSql99State.put(new Integer(
617                                MysqlErrorNumbers.ER_TABLENAME_NOT_ALLOWED_HERE), "42000");
618                mysqlToSql99State.put(new Integer(
619                                MysqlErrorNumbers.ER_NOT_SUPPORTED_AUTH_MODE), "08004");
620                mysqlToSql99State.put(new Integer(
621                                MysqlErrorNumbers.ER_SPATIAL_CANT_HAVE_NULL), "42000");
622                mysqlToSql99State.put(new Integer(
623                                MysqlErrorNumbers.ER_COLLATION_CHARSET_MISMATCH), "42000");
624                mysqlToSql99State.put(new Integer(
625                                MysqlErrorNumbers.ER_WARN_TOO_FEW_RECORDS), "01000");
626                mysqlToSql99State.put(new Integer(
627                                MysqlErrorNumbers.ER_WARN_TOO_MANY_RECORDS), "01000");
628                mysqlToSql99State.put(new Integer(
629                                MysqlErrorNumbers.ER_WARN_NULL_TO_NOTNULL), "01000");
630                mysqlToSql99State.put(new Integer(
631                                MysqlErrorNumbers.ER_WARN_DATA_OUT_OF_RANGE), "01000");
632                mysqlToSql99State.put(new Integer(
633                                MysqlErrorNumbers.ER_WARN_DATA_TRUNCATED), "01000");
634                mysqlToSql99State.put(new Integer(
635                                MysqlErrorNumbers.ER_WRONG_NAME_FOR_INDEX), "42000");
636                mysqlToSql99State.put(new Integer(
637                                MysqlErrorNumbers.ER_WRONG_NAME_FOR_CATALOG), "42000");
638                mysqlToSql99State.put(new Integer(
639                                MysqlErrorNumbers.ER_UNKNOWN_STORAGE_ENGINE), "42000");
640        }
641 
642        /**
643         * Turns output of 'SHOW WARNINGS' into JDBC SQLWarning instances.
644         * 
645         * If 'forTruncationOnly' is true, only looks for truncation warnings, and
646         * actually throws DataTruncation as an exception.
647         * 
648         * @param connection
649         *            the connection to use for getting warnings.
650         * 
651         * @return the SQLWarning chain (or null if no warnings)
652         * 
653         * @throws SQLException
654         *             if the warnings could not be retrieved
655         */
656        static SQLWarning convertShowWarningsToSQLWarnings(Connection connection)
657                        throws SQLException {
658                return convertShowWarningsToSQLWarnings(connection, 0, false);
659        }
660 
661        /**
662         * Turns output of 'SHOW WARNINGS' into JDBC SQLWarning instances.
663         * 
664         * If 'forTruncationOnly' is true, only looks for truncation warnings, and
665         * actually throws DataTruncation as an exception.
666         * 
667         * @param connection
668         *            the connection to use for getting warnings.
669         * @param warningCountIfKnown
670         *            the warning count (if known), otherwise set it to 0.
671         * @param forTruncationOnly
672         *            if this method should only scan for data truncation warnings
673         * 
674         * @return the SQLWarning chain (or null if no warnings)
675         * 
676         * @throws SQLException
677         *             if the warnings could not be retrieved, or if data truncation
678         *             is being scanned for and truncations were found.
679         */
680        static SQLWarning convertShowWarningsToSQLWarnings(Connection connection,
681                        int warningCountIfKnown, boolean forTruncationOnly)
682                        throws SQLException {
683                java.sql.Statement stmt = null;
684                java.sql.ResultSet warnRs = null;
685 
686                SQLWarning currentWarning = null;
687 
688                try {
689                        if (warningCountIfKnown < 100) {
690                                stmt = connection.createStatement();
691 
692                                if (stmt.getMaxRows() != 0) {
693                                        stmt.setMaxRows(0);
694                                }
695                        } else {
696                                // stream large warning counts
697                                stmt = connection.createStatement(
698                                                java.sql.ResultSet.TYPE_FORWARD_ONLY,
699                                                java.sql.ResultSet.CONCUR_READ_ONLY);
700                                stmt.setFetchSize(Integer.MIN_VALUE);
701                        }
702 
703                        /*
704                         * +---------+------+---------------------------------------------+ |
705                         * Level | Code | Message |
706                         * +---------+------+---------------------------------------------+ |
707                         * Warning | 1265 | Data truncated for column 'field1' at row 1 |
708                         * +---------+------+---------------------------------------------+
709                         */
710                        warnRs = stmt.executeQuery("SHOW WARNINGS"); //$NON-NLS-1$
711 
712                        while (warnRs.next()) {
713                                int code = warnRs.getInt("Code"); //$NON-NLS-1$
714 
715                                if (forTruncationOnly) {
716                                        if (code == 1265 || code == 1264) {
717                                                DataTruncation newTruncation = new MysqlDataTruncation(
718                                                                warnRs.getString("Message"), 0, false, false, 0, 0); //$NON-NLS-1$
719 
720                                                if (currentWarning == null) {
721                                                        currentWarning = newTruncation;
722                                                } else {
723                                                        currentWarning.setNextWarning(newTruncation);
724                                                }
725                                        }
726                                } else {
727                                        String level = warnRs.getString("Level"); //$NON-NLS-1$
728                                        String message = warnRs.getString("Message"); //$NON-NLS-1$
729 
730                                        SQLWarning newWarning = new SQLWarning(message, SQLError
731                                                        .mysqlToSqlState(code, connection
732                                                                        .getUseSqlStateCodes()), code);
733 
734                                        if (currentWarning == null) {
735                                                currentWarning = newWarning;
736                                        } else {
737                                                currentWarning.setNextWarning(newWarning);
738                                        }
739                                }
740                        }
741 
742                        if (forTruncationOnly && (currentWarning != null)) {
743                                throw currentWarning;
744                        }
745 
746                        return currentWarning;
747                } finally {
748                        SQLException reThrow = null;
749 
750                        if (warnRs != null) {
751                                try {
752                                        warnRs.close();
753                                } catch (SQLException sqlEx) {
754                                        reThrow = sqlEx;
755                                }
756                        }
757 
758                        if (stmt != null) {
759                                try {
760                                        stmt.close();
761                                } catch (SQLException sqlEx) {
762                                        // ideally, we'd use chained exceptions here,
763                                        // but we still support JDK-1.2.x with this driver
764                                        // which doesn't have them....
765                                        reThrow = sqlEx;
766                                }
767                        }
768 
769                        if (reThrow != null) {
770                                throw reThrow;
771                        }
772                }
773        }
774 
775        public static void dumpSqlStatesMappingsAsXml() throws Exception {
776                TreeMap allErrorNumbers = new TreeMap();
777                Map mysqlErrorNumbersToNames = new HashMap();
778 
779                Integer errorNumber = null;
780 
781                // 
782                // First create a list of all 'known' error numbers that
783                // are mapped.
784                //
785                for (Iterator mysqlErrorNumbers = mysqlToSql99State.keySet().iterator(); mysqlErrorNumbers
786                                .hasNext();) {
787                        errorNumber = (Integer) mysqlErrorNumbers.next();
788                        allErrorNumbers.put(errorNumber, errorNumber);
789                }
790 
791                for (Iterator mysqlErrorNumbers = mysqlToSqlState.keySet().iterator(); mysqlErrorNumbers
792                                .hasNext();) {
793                        errorNumber = (Integer) mysqlErrorNumbers.next();
794                        allErrorNumbers.put(errorNumber, errorNumber);
795                }
796 
797                //
798                // Now create a list of the actual MySQL error numbers we know about
799                //
800                java.lang.reflect.Field[] possibleFields = MysqlErrorNumbers.class
801                                .getDeclaredFields();
802 
803                for (int i = 0; i < possibleFields.length; i++) {
804                        String fieldName = possibleFields[i].getName();
805 
806                        if (fieldName.startsWith("ER_")) {
807                                mysqlErrorNumbersToNames.put(possibleFields[i].get(null),
808                                                fieldName);
809                        }
810                }
811 
812                System.out.println("<ErrorMappings>");
813 
814                for (Iterator allErrorNumbersIter = allErrorNumbers.keySet().iterator(); allErrorNumbersIter
815                                .hasNext();) {
816                        errorNumber = (Integer) allErrorNumbersIter.next();
817 
818                        String sql92State = mysqlToSql99(errorNumber.intValue());
819                        String oldSqlState = mysqlToXOpen(errorNumber.intValue());
820 
821                        System.out.println("   <ErrorMapping mysqlErrorNumber=\""
822                                        + errorNumber + "\" mysqlErrorName=\""
823                                        + mysqlErrorNumbersToNames.get(errorNumber)
824                                        + "\" legacySqlState=\""
825                                        + ((oldSqlState == null) ? "" : oldSqlState)
826                                        + "\" sql92SqlState=\""
827                                        + ((sql92State == null) ? "" : sql92State) + "\"/>");
828                }
829 
830                System.out.println("</ErrorMappings>");
831        }
832 
833        static String get(String stateCode) {
834                return (String) sqlStateMessages.get(stateCode);
835        }
836 
837        private static String mysqlToSql99(int errno) {
838                Integer err = new Integer(errno);
839 
840                if (mysqlToSql99State.containsKey(err)) {
841                        return (String) mysqlToSql99State.get(err);
842                }
843 
844                return "HY000";
845        }
846 
847        /**
848         * Map MySQL error codes to X/Open or SQL-92 error codes
849         * 
850         * @param errno
851         *            the MySQL error code
852         * 
853         * @return the corresponding X/Open or SQL-92 error code
854         */
855        static String mysqlToSqlState(int errno, boolean useSql92States) {
856                if (useSql92States) {
857                        return mysqlToSql99(errno);
858                }
859 
860                return mysqlToXOpen(errno);
861        }
862 
863        private static String mysqlToXOpen(int errno) {
864                Integer err = new Integer(errno);
865 
866                if (mysqlToSqlState.containsKey(err)) {
867                        return (String) mysqlToSqlState.get(err);
868                }
869 
870                return SQL_STATE_GENERAL_ERROR;
871        }
872 
873        /*
874         * SQL State Class SQLNonTransientException Subclass 08
875         * SQLNonTransientConnectionException 22 SQLDataException 23
876         * SQLIntegrityConstraintViolationException N/A
877         * SQLInvalidAuthorizationException 42 SQLSyntaxErrorException
878         * 
879         * SQL State Class SQLTransientException Subclass 08
880         * SQLTransientConnectionException 40 SQLTransactionRollbackException N/A
881         * SQLTimeoutException
882         */
883 
884        public static SQLException createSQLException(String message,
885                        String sqlState) {
886                if (sqlState != null) {
887                        if (sqlState.startsWith("08")) {
888                                return new MySQLNonTransientConnectionException(message,
889                                                sqlState);
890                        }
891 
892                        if (sqlState.startsWith("22")) {
893                                return new MySQLDataException(message, sqlState);
894                        }
895 
896                        if (sqlState.startsWith("23")) {
897                                return new MySQLIntegrityConstraintViolationException(message,
898                                                sqlState);
899                        }
900 
901                        if (sqlState.startsWith("42")) {
902                                return new MySQLSyntaxErrorException(message, sqlState);
903                        }
904 
905                        if (sqlState.startsWith("40")) {
906                                return new MySQLTransactionRollbackException(message, sqlState);
907                        }
908                }
909 
910                return new SQLException(message, sqlState);
911        }
912 
913        public static SQLException createSQLException(String message) {
914                return new SQLException(message);
915        }
916 
917        public static SQLException createSQLException(String message,
918                        String sqlState, int vendorErrorCode) {
919                if (sqlState != null) {
920                        if (sqlState.startsWith("08")) {
921                                return new MySQLNonTransientConnectionException(message,
922                                                sqlState, vendorErrorCode);
923                        }
924 
925                        if (sqlState.startsWith("22")) {
926                                return new MySQLDataException(message, sqlState,
927                                                vendorErrorCode);
928                        }
929 
930                        if (sqlState.startsWith("23")) {
931                                return new MySQLIntegrityConstraintViolationException(message,
932                                                sqlState, vendorErrorCode);
933                        }
934 
935                        if (sqlState.startsWith("42")) {
936                                return new MySQLSyntaxErrorException(message, sqlState,
937                                                vendorErrorCode);
938                        }
939 
940                        if (sqlState.startsWith("40")) {
941                                return new MySQLTransactionRollbackException(message, sqlState,
942                                                vendorErrorCode);
943                        }
944                }
945 
946                return new SQLException(message, sqlState, vendorErrorCode);
947        }
948}

[all classes][com.mysql.jdbc]
EMMA 2.0.4217 (C) Vladimir Roubtsov