PageRenderTime 28ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/project/mysql-connector/src/com/mysql/jdbc/SQLError.java

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