Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: com/mysql/jdbc/SQLError.java


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   
9    There are special exceptions to the terms and conditions of the GPL 
10   as it is applied to this software. View the full text of the 
11   exception exception in file EXCEPTIONS-CONNECTOR-J in the directory of this 
12   software distribution.
13  
14   This program is distributed in the hope that it will be useful,
15   but WITHOUT ANY WARRANTY; without even the implied warranty of
16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   GNU General Public License for more details.
18  
19   You should have received a copy of the GNU General Public License
20   along with this program; if not, write to the Free Software
21   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
22  
23   */
24  package com.mysql.jdbc;
25  
26  import java.util.Hashtable;
27  
28  
29  /**
30   * SQLError is a utility class that maps MySQL error codes to X/Open error
31   * codes as is required by the JDBC spec.
32   *
33   * @author Mark Matthews
34   * @version $Id: SQLError.java,v 1.6.2.7 2004/08/09 22:15:11 mmatthew Exp $
35   */
36  public class SQLError {
37      
38      public static final String SQL_STATE_TIMEOUT_EXPIRED = "S1T00";
39  
40      public static final String SQL_STATE_DRIVER_NOT_CAPABLE = "S1C00";
41  
42      public static final String SQL_STATE_ILLEGAL_ARGUMENT = "S1009";
43  
44      public static final String SQL_STATE_INVALID_COLUMN_NUMBER = "S1002";
45  
46      public static final String SQL_STATE_MEMORY_ALLOCATION_FAILURE = "S1001";
47  
48      public static final String SQL_STATE_GENERAL_ERROR = "S1000";
49  
50      public static final String SQL_STATE_NO_DEFAULT_FOR_COLUMN = "S0023";
51  
52      public static final String SQL_STATE_COLUMN_NOT_FOUND = "S0022";
53  
54      public static final String SQL_STATE_COLUMN_ALREADY_EXISTS = "S0021";
55  
56      public static final String SQL_STATE_INDEX_NOT_FOUND = "S0012";
57  
58      public static final String SQL_STATE_INDEX_ALREADY_EXISTS = "S0011";
59  
60      public static final String SQL_STATE_BASE_TABLE_NOT_FOUND = "S0002";
61  
62      public static final String SQL_STATE_BASE_TABLE_OR_VIEW_ALREADY_EXISTS = "S0001";
63  
64      public static final String SQL_STATE_BASE_TABLE_OR_VIEW_NOT_FOUND = "42S02";
65  
66      public static final String SQL_STATE_SYNTAX_ERROR = "42000";
67  
68      public static final String SQL_STATE_DATETIME_FIELD_OVERFLOW = "22008";
69  
70      public static final String SQL_STATE_NUMERIC_VALUE_OUT_OF_RANGE = "22003";
71  
72      public static final String SQL_STATE_INSERT_VALUE_LIST_NO_MATCH_COL_LIST = "21S01";
73  
74      public static final String SQL_STATE_DIVISION_BY_ZERO = "22012";
75  
76      public static final String SQL_STATE_INVALID_AUTH_SPEC = "28000";
77  
78      public static final String SQL_STATE_DEADLOCK = "41000";
79  
80      public static final String SQL_STATE_CONNECTION_FAIL_DURING_TX = "08007";
81  
82      public static final String SQL_STATE_CONNECTION_REJECTED = "08004";
83  
84      public static final String SQL_STATE_UNABLE_TO_CONNECT_TO_DATASOURCE = "08001";
85  
86      public static final String SQL_STATE_CONNECTION_IN_USE = "08002";
87  
88      public static final String SQL_STATE_CONNECTION_NOT_OPEN = "08003";
89  
90      public static final String SQL_STATE_WRONG_NO_OF_PARAMETERS = "07001";
91  
92      public static final String SQL_STATE_MORE_THAN_ONE_ROW_UPDATED_OR_DELETED = "01S04";
93  
94      public static final String SQL_STATE_NO_ROWS_UPDATED_OR_DELETED = "01S03";
95  
96      public static final String SQL_STATE_ERROR_IN_ROW = "01S01";
97  
98      public static final String SQL_STATE_COMMUNICATION_LINK_FAILURE = "08S01";
99  
100     public static final String SQL_STATE_INVALID_CONNECTION_ATTRIBUTE = "01S00";
101 
102     public static final String SQL_STATE_PRIVILEGE_NOT_REVOKED = "01006";
103 
104     public static final String SQL_STATE_DATE_TRUNCATED = "01004";
105 
106     public static final String SQL_STATE_DISCONNECT_ERROR = "01002";
107     
108     public static final String SQL_STATE_INTEGRITY_CONSTRAINT_VIOLATION = "23000";
109     
110     private static Hashtable mysqlToSqlState;
111     private static Hashtable sqlStateMessages;
112 
113     static {
114         sqlStateMessages = new Hashtable();
115         sqlStateMessages.put(SQL_STATE_DISCONNECT_ERROR, "Disconnect error");
116         sqlStateMessages.put(SQL_STATE_DATE_TRUNCATED, "Data truncated");
117         sqlStateMessages.put(SQL_STATE_PRIVILEGE_NOT_REVOKED,
118             "Privilege not revoked");
119         sqlStateMessages.put(SQL_STATE_INVALID_CONNECTION_ATTRIBUTE,
120             "Invalid connection string attribute");
121         sqlStateMessages.put(SQL_STATE_ERROR_IN_ROW, "Error in row");
122         sqlStateMessages.put(SQL_STATE_NO_ROWS_UPDATED_OR_DELETED,
123             "No rows updated or deleted");
124         sqlStateMessages.put(SQL_STATE_MORE_THAN_ONE_ROW_UPDATED_OR_DELETED,
125             "More than one row updated or deleted");
126         sqlStateMessages.put(SQL_STATE_WRONG_NO_OF_PARAMETERS,
127             "Wrong number of parameters");
128         sqlStateMessages.put(SQL_STATE_UNABLE_TO_CONNECT_TO_DATASOURCE,
129             "Unable to connect to data source");
130         sqlStateMessages.put(SQL_STATE_CONNECTION_IN_USE, "Connection in use");
131         sqlStateMessages.put(SQL_STATE_CONNECTION_NOT_OPEN,
132             "Connection not open");
133         sqlStateMessages.put(SQL_STATE_CONNECTION_REJECTED,
134             "Data source rejected establishment of connection");
135         sqlStateMessages.put(SQL_STATE_CONNECTION_FAIL_DURING_TX,
136             "Connection failure during transaction");
137         sqlStateMessages.put(SQL_STATE_COMMUNICATION_LINK_FAILURE,
138             "Communication link failure");
139         sqlStateMessages.put(SQL_STATE_INSERT_VALUE_LIST_NO_MATCH_COL_LIST,
140             "Insert value list does not match column list");
141         sqlStateMessages.put(SQL_STATE_NUMERIC_VALUE_OUT_OF_RANGE,
142             "Numeric value out of range");
143         sqlStateMessages.put(SQL_STATE_DATETIME_FIELD_OVERFLOW,
144             "Datetime field overflow");
145         sqlStateMessages.put(SQL_STATE_DIVISION_BY_ZERO, "Division by zero");
146         sqlStateMessages.put(SQL_STATE_DEADLOCK,
147             "Deadlock found when trying to get lock; Try restarting transaction");
148         sqlStateMessages.put(SQL_STATE_INVALID_AUTH_SPEC,
149             "Invalid authorization specification");
150         sqlStateMessages.put(SQL_STATE_SYNTAX_ERROR,
151             "Syntax error or access violation");
152         sqlStateMessages.put(SQL_STATE_BASE_TABLE_OR_VIEW_NOT_FOUND,
153             "Base table or view not found");
154         sqlStateMessages.put(SQL_STATE_BASE_TABLE_OR_VIEW_ALREADY_EXISTS,
155             "Base table or view already exists");
156         sqlStateMessages.put(SQL_STATE_BASE_TABLE_NOT_FOUND,
157             "Base table not found");
158         sqlStateMessages.put(SQL_STATE_INDEX_ALREADY_EXISTS,
159             "Index already exists");
160         sqlStateMessages.put(SQL_STATE_INDEX_NOT_FOUND, "Index not found");
161         sqlStateMessages.put(SQL_STATE_COLUMN_ALREADY_EXISTS,
162             "Column already exists");
163         sqlStateMessages.put(SQL_STATE_COLUMN_NOT_FOUND, "Column not found");
164         sqlStateMessages.put(SQL_STATE_NO_DEFAULT_FOR_COLUMN,
165             "No default for column");
166         sqlStateMessages.put(SQL_STATE_GENERAL_ERROR, "General error");
167         sqlStateMessages.put(SQL_STATE_MEMORY_ALLOCATION_FAILURE,
168             "Memory allocation failure");
169         sqlStateMessages.put(SQL_STATE_INVALID_COLUMN_NUMBER,
170             "Invalid column number");
171         sqlStateMessages.put(SQL_STATE_ILLEGAL_ARGUMENT,
172             "Invalid argument value");
173         sqlStateMessages.put(SQL_STATE_DRIVER_NOT_CAPABLE, "Driver not capable");
174         sqlStateMessages.put(SQL_STATE_TIMEOUT_EXPIRED, "Timeout expired");
175         sqlStateMessages.put(SQL_STATE_INTEGRITY_CONSTRAINT_VIOLATION, "Duplicate key or integrity constraint violation");
176         
177         //
178         // Map MySQL error codes to X/Open error codes
179         //
180         mysqlToSqlState = new Hashtable();
181 
182         //
183         // Communications Errors
184         //
185         //    ER_CON_COUNT_ERROR 1040
186         // ER_BAD_HOST_ERROR 1042
187         // ER_HANDSHAKE_ERROR 1043
188         // ER_UNKNOWN_COM_ERROR 1047
189         // ER_IPSOCK_ERROR 1081
190         //
191         mysqlToSqlState.put(new Integer(1040), SQL_STATE_CONNECTION_REJECTED);
192         mysqlToSqlState.put(new Integer(1042), SQL_STATE_CONNECTION_REJECTED);
193         mysqlToSqlState.put(new Integer(1043), SQL_STATE_CONNECTION_REJECTED);
194         mysqlToSqlState.put(new Integer(1047),
195             SQL_STATE_COMMUNICATION_LINK_FAILURE);
196         mysqlToSqlState.put(new Integer(1081),
197             SQL_STATE_COMMUNICATION_LINK_FAILURE);
198 
199         // ER_HOST_IS_BLOCKED 1129
200         // ER_HOST_NOT_PRIVILEGED 1130
201         mysqlToSqlState.put(new Integer(1129), SQL_STATE_CONNECTION_REJECTED);
202         mysqlToSqlState.put(new Integer(1130), SQL_STATE_CONNECTION_REJECTED);
203 
204         //
205         // Authentication Errors
206         //
207         // ER_ACCESS_DENIED_ERROR 1045
208         //
209         mysqlToSqlState.put(new Integer(1045), SQL_STATE_INVALID_AUTH_SPEC);
210 
211         //
212         // Resource errors
213         //
214         // ER_CANT_CREATE_FILE 1004
215         // ER_CANT_CREATE_TABLE 1005
216         // ER_CANT_LOCK 1015
217         // ER_DISK_FULL 1021
218         // ER_OUT_OF_RESOURCES 1041
219         //
220         // Out-of-memory errors
221         //
222         // ER_OUTOFMEMORY 1037
223         // ER_OUT_OF_SORTMEMORY 1038
224         //
225         mysqlToSqlState.put(new Integer(1037),
226             SQL_STATE_MEMORY_ALLOCATION_FAILURE);
227         mysqlToSqlState.put(new Integer(1038),
228             SQL_STATE_MEMORY_ALLOCATION_FAILURE);
229 
230         //
231         // Syntax Errors
232         //
233         // ER_PARSE_ERROR 1064
234         // ER_EMPTY_QUERY 1065
235         //
236         mysqlToSqlState.put(new Integer(1064), SQL_STATE_SYNTAX_ERROR);
237         mysqlToSqlState.put(new Integer(1065), SQL_STATE_SYNTAX_ERROR);
238 
239         //
240         // Invalid argument errors
241         //
242         // ER_WRONG_FIELD_WITH_GROUP 1055
243         // ER_WRONG_GROUP_FIELD 1056
244         // ER_WRONG_SUM_SELECT 1057
245         // ER_TOO_LONG_IDENT 1059
246         // ER_DUP_FIELDNAME 1060
247         // ER_DUP_KEYNAME 1061
248         // ER_DUP_ENTRY 1062
249         // ER_WRONG_FIELD_SPEC 1063
250         // ER_NONUNIQ_TABLE 1066
251         // ER_INVALID_DEFAULT 1067
252         // ER_MULTIPLE_PRI_KEY 1068
253         // ER_TOO_MANY_KEYS 1069
254         // ER_TOO_MANY_KEY_PARTS 1070
255         // ER_TOO_LONG_KEY 1071
256         // ER_KEY_COLUMN_DOES_NOT_EXIST 1072
257         // ER_BLOB_USED_AS_KEY 1073
258         // ER_TOO_BIG_FIELDLENGTH 1074
259         // ER_WRONG_AUTO_KEY 1075
260         // ER_NO_SUCH_INDEX 1082
261         // ER_WRONG_FIELD_TERMINATORS 1083
262         // ER_BLOBS_AND_NO_TERMINATED 1084
263         //
264         mysqlToSqlState.put(new Integer(1055), SQL_STATE_ILLEGAL_ARGUMENT);
265         mysqlToSqlState.put(new Integer(1056), SQL_STATE_ILLEGAL_ARGUMENT);
266         mysqlToSqlState.put(new Integer(1057), SQL_STATE_ILLEGAL_ARGUMENT);
267         mysqlToSqlState.put(new Integer(1059), SQL_STATE_ILLEGAL_ARGUMENT);
268         mysqlToSqlState.put(new Integer(1060), SQL_STATE_ILLEGAL_ARGUMENT);
269         mysqlToSqlState.put(new Integer(1061), SQL_STATE_ILLEGAL_ARGUMENT);
270         
271         mysqlToSqlState.put(new Integer(1062), SQL_STATE_INTEGRITY_CONSTRAINT_VIOLATION);
272         
273         mysqlToSqlState.put(new Integer(1063), SQL_STATE_ILLEGAL_ARGUMENT);
274         mysqlToSqlState.put(new Integer(1066), SQL_STATE_ILLEGAL_ARGUMENT);
275         mysqlToSqlState.put(new Integer(1067), SQL_STATE_ILLEGAL_ARGUMENT);
276         mysqlToSqlState.put(new Integer(1068), SQL_STATE_ILLEGAL_ARGUMENT);
277         mysqlToSqlState.put(new Integer(1069), SQL_STATE_ILLEGAL_ARGUMENT);
278         mysqlToSqlState.put(new Integer(1070), SQL_STATE_ILLEGAL_ARGUMENT);
279         mysqlToSqlState.put(new Integer(1071), SQL_STATE_ILLEGAL_ARGUMENT);
280         mysqlToSqlState.put(new Integer(1072), SQL_STATE_ILLEGAL_ARGUMENT);
281         mysqlToSqlState.put(new Integer(1073), SQL_STATE_ILLEGAL_ARGUMENT);
282         mysqlToSqlState.put(new Integer(1074), SQL_STATE_ILLEGAL_ARGUMENT);
283         mysqlToSqlState.put(new Integer(1075), SQL_STATE_ILLEGAL_ARGUMENT);
284         mysqlToSqlState.put(new Integer(1082), SQL_STATE_ILLEGAL_ARGUMENT);
285         mysqlToSqlState.put(new Integer(1083), SQL_STATE_ILLEGAL_ARGUMENT);
286         mysqlToSqlState.put(new Integer(1084), SQL_STATE_ILLEGAL_ARGUMENT);
287 
288         //
289         // ER_WRONG_VALUE_COUNT 1058
290         //
291         mysqlToSqlState.put(new Integer(1058),
292             SQL_STATE_INSERT_VALUE_LIST_NO_MATCH_COL_LIST);
293 
294         // ER_CANT_CREATE_DB 1006
295         // ER_DB_CREATE_EXISTS 1007
296         // ER_DB_DROP_EXISTS 1008
297         // ER_DB_DROP_DELETE 1009
298         // ER_DB_DROP_RMDIR 1010
299         // ER_CANT_DELETE_FILE 1011
300         // ER_CANT_FIND_SYSTEM_REC 1012
301         // ER_CANT_GET_STAT 1013
302         // ER_CANT_GET_WD 1014
303         // ER_UNEXPECTED_EOF 1039
304         // ER_CANT_OPEN_FILE 1016
305         // ER_FILE_NOT_FOUND 1017
306         // ER_CANT_READ_DIR 1018
307         // ER_CANT_SET_WD 1019
308         // ER_CHECKREAD 1020
309         // ER_DUP_KEY 1022
310         // ER_ERROR_ON_CLOSE 1023
311         // ER_ERROR_ON_READ 1024
312         // ER_ERROR_ON_RENAME 1025
313         // ER_ERROR_ON_WRITE 1026
314         // ER_FILE_USED 1027
315         // ER_FILSORT_ABORT 1028
316         // ER_FORM_NOT_FOUND 1029
317         // ER_GET_ERRNO 1030
318         // ER_ILLEGAL_HA 1031
319         // ER_KEY_NOT_FOUND 1032
320         // ER_NOT_FORM_FILE 1033
321         // ER_DBACCESS_DENIED_ERROR 1044
322         // ER_NO_DB_ERROR 1046
323         // ER_BAD_NULL_ERROR 1048
324         // ER_BAD_DB_ERROR 1049
325         // ER_TABLE_EXISTS_ERROR 1050
326         // ER_BAD_TABLE_ERROR 1051
327         mysqlToSqlState.put(new Integer(1051),
328             SQL_STATE_BASE_TABLE_OR_VIEW_NOT_FOUND);
329 
330         // ER_NON_UNIQ_ERROR 1052
331         // ER_BAD_FIELD_ERROR 1054
332         mysqlToSqlState.put(new Integer(1054), SQL_STATE_COLUMN_NOT_FOUND);
333 
334         // ER_TEXTFILE_NOT_READABLE 1085
335         // ER_FILE_EXISTS_ERROR 1086
336         // ER_LOAD_INFO 1087
337         // ER_ALTER_INFO 1088
338         // ER_WRONG_SUB_KEY 1089
339         // ER_CANT_REMOVE_ALL_FIELDS 1090
340         // ER_CANT_DROP_FIELD_OR_KEY 1091
341         // ER_INSERT_INFO 1092
342         // ER_INSERT_TABLE_USED 1093
343         // ER_LOCK_DEADLOCK 1213
344         mysqlToSqlState.put(new Integer(1205), SQL_STATE_DEADLOCK);
345         mysqlToSqlState.put(new Integer(1213), SQL_STATE_DEADLOCK);
346         
347         // ER_DUP_UNIQUE 1169
348         // ER_NO_ROW_IS_REFERENCED 1216
349         // ER_ROW_IS_REFERENCED 1217
350         // 
351         
352         mysqlToSqlState.put(new Integer(1169), SQL_STATE_INTEGRITY_CONSTRAINT_VIOLATION);
353         mysqlToSqlState.put(new Integer(1216), SQL_STATE_INTEGRITY_CONSTRAINT_VIOLATION);
354     mysqlToSqlState.put(new Integer(1217), SQL_STATE_INTEGRITY_CONSTRAINT_VIOLATION);
355     }
356 
357     static String get(String stateCode) {
358         return (String) sqlStateMessages.get(stateCode);
359     }
360 
361     /**
362      * Map MySQL error codes to X/Open error codes
363      *
364      * @param errno the MySQL error code
365      *
366      * @return the corresponding X/Open error code
367      */
368     static String mysqlToXOpen(int errno) {
369         Integer err = new Integer(errno);
370 
371         if (mysqlToSqlState.containsKey(err)) {
372             return (String) mysqlToSqlState.get(err);
373         } else {
374             return SQL_STATE_GENERAL_ERROR;
375         }
376     }
377 }