comparison _mysql.c @ 8:fa8974a41c76 MySQLdb

New error handling code, plus some small fixes from 1.2
author adustman
date Sun, 11 Feb 2007 21:36:29 +0000
parents b70cce9bd065
children d55bfb1a4701
comparison
equal deleted inserted replaced
7:b1e508854b27 8:fa8974a41c76
28 PyTuple_SET_ITEM(t, 1, PyString_FromString("error totally whack")); 28 PyTuple_SET_ITEM(t, 1, PyString_FromString("error totally whack"));
29 PyErr_SetObject(_mysql_InterfaceError, t); 29 PyErr_SetObject(_mysql_InterfaceError, t);
30 Py_DECREF(t); 30 Py_DECREF(t);
31 return NULL; 31 return NULL;
32 } 32 }
33 else switch (merr) { 33 else {
34 case CR_COMMANDS_OUT_OF_SYNC: 34 PyObject *py_merr = PyInt_FromLong(merr);
35 case ER_DB_CREATE_EXISTS: 35 e = PyDict_GetItem(_mysql_error_map, py_merr);
36 case ER_SYNTAX_ERROR: 36 Py_DECREF(py_merr);
37 case ER_PARSE_ERROR: 37 if (!e) {
38 case ER_NO_SUCH_TABLE: 38 if (merr < 1000) e = _mysql_InternalError;
39 case ER_WRONG_DB_NAME: 39 else e = _mysql_OperationalError;
40 case ER_WRONG_TABLE_NAME: 40 }
41 case ER_FIELD_SPECIFIED_TWICE:
42 case ER_INVALID_GROUP_FUNC_USE:
43 case ER_UNSUPPORTED_EXTENSION:
44 case ER_TABLE_MUST_HAVE_COLUMNS:
45 #ifdef ER_CANT_DO_THIS_DURING_AN_TRANSACTION
46 case ER_CANT_DO_THIS_DURING_AN_TRANSACTION:
47 #endif
48 e = _mysql_ProgrammingError;
49 break;
50 #ifdef WARN_DATA_TRUNCATED
51 case WARN_DATA_TRUNCATED:
52 #ifdef WARN_NULL_TO_NOTNULL
53 case WARN_NULL_TO_NOTNULL:
54 #endif
55 #ifdef ER_WARN_DATA_OUT_OF_RANGE
56 case ER_WARN_DATA_OUT_OF_RANGE:
57 #endif
58 #ifdef ER_NO_DEFAULT
59 case ER_NO_DEFAULT:
60 #endif
61 #ifdef ER_PRIMARY_CANT_HAVE_NULL
62 case ER_PRIMARY_CANT_HAVE_NULL:
63 #endif
64 #ifdef ER_DATA_TOO_LONG
65 case ER_DATA_TOO_LONG:
66 #endif
67 #ifdef ER_DATETIME_FUNCTION_OVERFLOW
68 case ER_DATETIME_FUNCTION_OVERFLOW:
69 #endif
70 e = _mysql_DataError;
71 break;
72 #endif
73 case ER_DUP_ENTRY:
74 #ifdef ER_DUP_UNIQUE
75 case ER_DUP_UNIQUE:
76 #endif
77 #ifdef ER_NO_REFERENCED_ROW
78 case ER_NO_REFERENCED_ROW:
79 #endif
80 #ifdef ER_NO_REFERENCED_ROW_2
81 case ER_NO_REFERENCED_ROW_2:
82 #endif
83 #ifdef ER_ROW_IS_REFERENCED
84 case ER_ROW_IS_REFERENCED:
85 #endif
86 #ifdef ER_ROW_IS_REFERENCED_2
87 case ER_ROW_IS_REFERENCED_2:
88 #endif
89 #ifdef ER_CANNOT_ADD_FOREIGN
90 case ER_CANNOT_ADD_FOREIGN:
91 #endif
92 e = _mysql_IntegrityError;
93 break;
94 #ifdef ER_WARNING_NOT_COMPLETE_ROLLBACK
95 case ER_WARNING_NOT_COMPLETE_ROLLBACK:
96 #endif
97 #ifdef ER_NOT_SUPPORTED_YET
98 case ER_NOT_SUPPORTED_YET:
99 #endif
100 #ifdef ER_FEATURE_DISABLED
101 case ER_FEATURE_DISABLED:
102 #endif
103 #ifdef ER_UNKNOWN_STORAGE_ENGINE
104 case ER_UNKNOWN_STORAGE_ENGINE:
105 #endif
106 e = _mysql_NotSupportedError;
107 break;
108 default:
109 if (merr < 1000)
110 e = _mysql_InternalError;
111 else
112 e = _mysql_OperationalError;
113 break;
114 } 41 }
115 PyTuple_SET_ITEM(t, 0, PyInt_FromLong((long)merr)); 42 PyTuple_SET_ITEM(t, 0, PyInt_FromLong((long)merr));
116 PyTuple_SET_ITEM(t, 1, PyString_FromString(mysql_error(&(c->connection)))); 43 PyTuple_SET_ITEM(t, 1, PyString_FromString(mysql_error(&(c->connection))));
117 PyErr_SetObject(e, t); 44 PyErr_SetObject(e, t);
118 Py_DECREF(t); 45 Py_DECREF(t);
571 _mysql_NewException(dict, edict, "ProgrammingError"))) 498 _mysql_NewException(dict, edict, "ProgrammingError")))
572 goto error; 499 goto error;
573 if (!(_mysql_NotSupportedError = 500 if (!(_mysql_NotSupportedError =
574 _mysql_NewException(dict, edict, "NotSupportedError"))) 501 _mysql_NewException(dict, edict, "NotSupportedError")))
575 goto error; 502 goto error;
503 if (!(_mysql_error_map = PyDict_GetItemString(edict, "error_map")))
504 goto error;
576 Py_DECREF(emod); 505 Py_DECREF(emod);
577 if (!(_mysql_NULL = PyString_FromString("NULL"))) 506 if (!(_mysql_NULL = PyString_FromString("NULL")))
578 goto error; 507 goto error;
579 if (PyDict_SetItemString(dict, "NULL", _mysql_NULL)) goto error; 508 if (PyDict_SetItemString(dict, "NULL", _mysql_NULL)) goto error;
580 error: 509 error: