Mercurial > p > mysql-python > mysqldb-2
annotate _mysql_fields.c @ 48:f4fd8c20511c MySQLdb
Read a default file in the test setUp. Since Python 2.4, int() will return longs if needed so make all long references int as in Python 3.0 there is no more long due to int/long unification (new ints are old longs).
author | adustman |
---|---|
date | Sun, 22 Feb 2009 20:01:31 +0000 |
parents | 28e9be1ca559 |
children |
rev | line source |
---|---|
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
1 /* -*- mode: C; indent-tabs-mode: t; c-basic-offset: 8; -*- */ |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
2 |
19 | 3 #include "_mysql.h" |
4 | |
5 static char _mysql_FieldObject__doc__[] = | |
6 ""; | |
7 | |
8 int | |
9 _mysql_FieldObject_Initialize( | |
10 _mysql_FieldObject *self, | |
11 PyObject *args, | |
12 PyObject *kwargs) | |
13 { | |
14 static char *kwlist[] = {"result", "index", NULL}; | |
15 _mysql_ResultObject *result=NULL; | |
16 MYSQL_FIELD *field; | |
17 unsigned int index; | |
18 if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Oi", kwlist, | |
19 &result, &index)) | |
20 return -1; | |
45 | 21 |
19 | 22 self->index = index; |
23 field = mysql_fetch_field_direct(result->result, index); | |
24 if (!field) return -1; | |
25 self->field = *field; | |
26 self->result = (PyObject *) result; | |
27 Py_INCREF(result); | |
28 return 0; | |
29 } | |
30 | |
45 | 31 static int |
32 _mysql_FieldObject_traverse( | |
19 | 33 _mysql_FieldObject *self, |
34 visitproc visit, | |
35 void *arg) | |
36 { | |
37 if (self->result) | |
38 return visit(self->result, arg); | |
39 return 0; | |
40 } | |
41 | |
45 | 42 static int |
43 _mysql_FieldObject_clear( | |
19 | 44 _mysql_FieldObject *self) |
45 { | |
46 Py_XDECREF(self->result); | |
47 self->result = NULL; | |
48 return 0; | |
49 } | |
45 | 50 |
19 | 51 static void |
52 _mysql_FieldObject_dealloc( | |
53 _mysql_FieldObject *self) | |
54 { | |
55 PyObject_GC_UnTrack((PyObject *)self); | |
56 _mysql_FieldObject_clear(self); | |
57 MyFree(self); | |
58 } | |
59 | |
60 static PyObject * | |
61 _mysql_FieldObject_repr( | |
62 _mysql_FieldObject *self) | |
63 { | |
64 char buf[300]; | |
65 snprintf(buf, 300, "<_mysql.field object at %lx>", (long)self); | |
66 return PyString_FromString(buf); | |
67 } | |
68 | |
69 static PyMethodDef _mysql_FieldObject_methods[] = { | |
70 {NULL, NULL} /* sentinel */ | |
71 }; | |
72 | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
73 static struct PyMemberDef _mysql_FieldObject_memberlist[] = { |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
74 { |
19 | 75 "result", |
76 T_OBJECT, | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
77 offsetof(_mysql_FieldObject, result), |
19 | 78 RO, |
79 "Result set" | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
80 }, |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
81 { |
19 | 82 "name", |
83 T_STRING, | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
84 offsetof(_mysql_FieldObject, field.name), |
19 | 85 RO, |
86 "The name of the field. If the field was given\n\ | |
87 an alias with an AS clause, the value of name is the alias." | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
88 }, |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
89 { |
19 | 90 "org_name", |
91 T_STRING, | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
92 offsetof(_mysql_FieldObject, field.org_name), |
19 | 93 RO, |
94 "The name of the field. Aliases are ignored." | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
95 }, |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
96 { |
19 | 97 "table", |
98 T_STRING, | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
99 offsetof(_mysql_FieldObject, field.table), |
19 | 100 RO, |
101 "The name of the table containing this field,\n\ | |
102 if it isn't a calculated field. For calculated fields,\n\ | |
103 the table value is an empty string. If the column is selected from a view,\n\ | |
104 table names the view. If the table or view was given an alias with an AS clause,\n\ | |
105 the value of table is the alias.\n" | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
106 }, |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
107 { |
19 | 108 "org_table", |
109 T_STRING, | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
110 offsetof(_mysql_FieldObject, field.org_table), |
19 | 111 RO, |
112 "The name of the table. Aliases are ignored.\n\ | |
113 If the column is selected from a view, org_table names the underlying table.\n" | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
114 }, |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
115 { |
19 | 116 "db", |
117 T_STRING, | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
118 offsetof(_mysql_FieldObject, field.db), |
19 | 119 RO, |
120 "The name of the database that the field comes from.\n\ | |
121 If the field is a calculated field, db is an empty string." | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
122 }, |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
123 { |
19 | 124 "catalog", |
125 T_STRING, | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
126 offsetof(_mysql_FieldObject, field.catalog), |
19 | 127 RO, |
128 "The catalog name. This value is always \"def\"." | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
129 }, |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
130 { |
19 | 131 "length", |
132 T_ULONG, | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
133 offsetof(_mysql_FieldObject, field.length), |
19 | 134 RO, |
135 "The width of the field.\n\ | |
136 as specified in the table definition.\n" | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
137 }, |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
138 { |
19 | 139 "max_length", |
140 T_ULONG, | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
141 offsetof(_mysql_FieldObject, field.max_length), |
19 | 142 RO, |
143 "The maximum width of the field for the result set\n\ | |
144 (the length of the longest field value for the rows actually in the\n\ | |
145 result set). If you use conn.store_result(), this contains the\n\ | |
146 maximum length for the field. If you use conn.use_result(),\n\ | |
147 the value of this variable is zero.\n" | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
148 }, |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
149 { |
19 | 150 "decimals", |
151 T_UINT, | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
152 offsetof(_mysql_FieldObject, field.decimals), |
19 | 153 RO, |
154 "The number of decimals for numeric fields.\n" | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
155 }, |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
156 { |
19 | 157 "charsetnr", |
158 T_UINT, | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
159 offsetof(_mysql_FieldObject, field.charsetnr), |
19 | 160 RO, |
161 "The character set number for the field." | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
162 }, |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
163 { |
19 | 164 "flags", |
165 T_UINT, | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
166 offsetof(_mysql_FieldObject, field.flags), |
19 | 167 RO, |
168 "Different bit-flags for the field.\n\ | |
169 The bits are enumerated in MySQLdb.constants.FLAG.\n\ | |
170 The flags value may have zero or more of these bits set.\n" | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
171 }, |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
172 { |
19 | 173 "type", |
174 T_UINT, | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
175 offsetof(_mysql_FieldObject, field.type), |
19 | 176 RO, |
177 "The type of the field. The type values\n\ | |
178 are enumerated in MySQLdb.constants.FIELD_TYPE.\n" | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
179 }, |
19 | 180 {NULL} /* Sentinel */ |
181 }; | |
182 | |
183 static PyObject * | |
184 _mysql_FieldObject_getattr( | |
185 _mysql_FieldObject *self, | |
186 char *name) | |
187 { | |
188 PyObject *res; | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
189 struct PyMemberDef *l; |
19 | 190 |
191 res = Py_FindMethod(_mysql_FieldObject_methods, (PyObject *)self, name); | |
192 if (res != NULL) | |
193 return res; | |
194 PyErr_Clear(); | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
195 |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
196 for (l = _mysql_FieldObject_memberlist; l->name != NULL; l++) { |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
197 if (strcmp(l->name, name) == 0) |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
198 return PyMember_GetOne((char *)self, l); |
19 | 199 } |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
200 |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
201 PyErr_SetString(PyExc_AttributeError, name); |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
202 return NULL; |
19 | 203 } |
204 | |
205 static int | |
206 _mysql_FieldObject_setattr( | |
207 _mysql_FieldObject *self, | |
208 char *name, | |
209 PyObject *v) | |
210 { | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
211 struct PyMemberDef *l; |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
212 |
19 | 213 if (v == NULL) { |
214 PyErr_SetString(PyExc_AttributeError, | |
215 "can't delete attributes"); | |
216 return -1; | |
217 } | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
218 |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
219 |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
220 for (l = _mysql_FieldObject_memberlist; l->name != NULL; l++) |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
221 if (strcmp(l->name, name) == 0) |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
222 return PyMember_SetOne((char *)self, l, v); |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
223 |
19 | 224 PyErr_SetString(PyExc_AttributeError, name); |
225 return -1; | |
226 } | |
227 | |
228 PyTypeObject _mysql_FieldObject_Type = { | |
229 PyObject_HEAD_INIT(NULL) | |
230 0, | |
231 "_mysql.field", | |
232 sizeof(_mysql_FieldObject), | |
233 0, | |
234 (destructor)_mysql_FieldObject_dealloc, /* tp_dealloc */ | |
235 0, /*tp_print*/ | |
236 (getattrfunc)_mysql_FieldObject_getattr, /* tp_getattr */ | |
237 (setattrfunc)_mysql_FieldObject_setattr, /* tp_setattr */ | |
238 0, /*tp_compare*/ | |
239 (reprfunc)_mysql_FieldObject_repr, /* tp_repr */ | |
45 | 240 |
19 | 241 /* Method suites for standard classes */ |
45 | 242 |
19 | 243 0, /* (PyNumberMethods *) tp_as_number */ |
244 0, /* (PySequenceMethods *) tp_as_sequence */ | |
245 0, /* (PyMappingMethods *) tp_as_mapping */ | |
45 | 246 |
19 | 247 /* More standard operations (here for binary compatibility) */ |
45 | 248 |
19 | 249 0, /* (hashfunc) tp_hash */ |
250 0, /* (ternaryfunc) tp_call */ | |
251 0, /* (reprfunc) tp_str */ | |
252 0, /* (getattrofunc) tp_getattro */ | |
253 0, /* (setattrofunc) tp_setattro */ | |
45 | 254 |
19 | 255 /* Functions to access object as input/output buffer */ |
256 0, /* (PyBufferProcs *) tp_as_buffer */ | |
45 | 257 |
19 | 258 /* Flags to define presence of optional/expanded features */ |
259 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, | |
45 | 260 |
19 | 261 _mysql_FieldObject__doc__, /* (char *) tp_doc Documentation string */ |
45 | 262 |
19 | 263 /* call function for all accessible objects */ |
45 | 264 (traverseproc)_mysql_FieldObject_traverse, /* tp_traverse */ |
265 | |
19 | 266 /* delete references to contained objects */ |
45 | 267 (inquiry)_mysql_FieldObject_clear, /* tp_clear */ |
268 | |
19 | 269 /* rich comparisons */ |
270 0, /* (richcmpfunc) tp_richcompare */ | |
45 | 271 |
19 | 272 /* weak reference enabler */ |
273 0, /* (long) tp_weaklistoffset */ | |
45 | 274 |
19 | 275 /* Iterators */ |
276 0, /* (getiterfunc) tp_iter */ | |
277 0, /* (iternextfunc) tp_iternext */ | |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
278 |
19 | 279 /* Attribute descriptor and subclassing stuff */ |
43
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
280 (struct PyMethodDef *)_mysql_FieldObject_methods, /* tp_methods */ |
e36420b7ae6e
Member stuff is stable post py2.2, so remove the MyMember* workarounds
kylev
parents:
19
diff
changeset
|
281 (struct PyMemberDef *)_mysql_FieldObject_memberlist, /*tp_members */ |
19 | 282 0, /* (struct getsetlist *) tp_getset; */ |
283 0, /* (struct _typeobject *) tp_base; */ | |
284 0, /* (PyObject *) tp_dict */ | |
285 0, /* (descrgetfunc) tp_descr_get */ | |
286 0, /* (descrsetfunc) tp_descr_set */ | |
287 0, /* (long) tp_dictoffset */ | |
288 (initproc)_mysql_FieldObject_Initialize, /* tp_init */ | |
289 NULL, /* tp_alloc */ | |
290 NULL, /* tp_new */ | |
291 NULL, /* tp_free Low-level free-memory routine */ | |
292 0, /* (PyObject *) tp_bases */ | |
293 0, /* (PyObject *) tp_mro method resolution order */ | |
294 0, /* (PyObject *) tp_defined */ | |
295 }; |