2
* Drizzle Client & Protocol Library
4
* Copyright (C) 2008 Eric Day (eday@oddments.org)
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions are
11
* * Redistributions of source code must retain the above copyright
12
* notice, this list of conditions and the following disclaimer.
14
* * Redistributions in binary form must reproduce the above
15
* copyright notice, this list of conditions and the following disclaimer
16
* in the documentation and/or other materials provided with the
19
* * The names of its contributors may not be used to endorse or
20
* promote products derived from this software without specific prior
23
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40
* @brief Column definitions
49
static drizzle_column_type_t _column_type_drizzle_map_to[]=
51
DRIZZLE_COLUMN_TYPE_TINY,
52
DRIZZLE_COLUMN_TYPE_LONG,
53
DRIZZLE_COLUMN_TYPE_DOUBLE,
54
DRIZZLE_COLUMN_TYPE_NULL,
55
DRIZZLE_COLUMN_TYPE_TIMESTAMP,
56
DRIZZLE_COLUMN_TYPE_LONGLONG,
57
DRIZZLE_COLUMN_TYPE_DATETIME,
58
DRIZZLE_COLUMN_TYPE_NEWDATE,
59
DRIZZLE_COLUMN_TYPE_VARCHAR,
60
DRIZZLE_COLUMN_TYPE_NEWDECIMAL,
61
DRIZZLE_COLUMN_TYPE_ENUM,
62
DRIZZLE_COLUMN_TYPE_BLOB
65
static drizzle_column_type_drizzle_t _column_type_drizzle_map_from[]=
67
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 0 */
68
DRIZZLE_COLUMN_TYPE_DRIZZLE_BOOLEAN,
69
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
70
DRIZZLE_COLUMN_TYPE_DRIZZLE_LONG,
71
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
72
DRIZZLE_COLUMN_TYPE_DRIZZLE_DOUBLE,
73
DRIZZLE_COLUMN_TYPE_DRIZZLE_NULL,
74
DRIZZLE_COLUMN_TYPE_DRIZZLE_TIMESTAMP,
75
DRIZZLE_COLUMN_TYPE_DRIZZLE_LONGLONG,
76
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
78
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 10 */
79
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
80
DRIZZLE_COLUMN_TYPE_DRIZZLE_DATETIME,
81
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
82
DRIZZLE_COLUMN_TYPE_DRIZZLE_DATE,
83
DRIZZLE_COLUMN_TYPE_DRIZZLE_VARCHAR,
84
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
85
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
86
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
87
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
89
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 20 */
90
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
91
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
92
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
93
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
94
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
95
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
96
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
97
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
98
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
100
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 30 */
101
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
102
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
103
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
104
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
105
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
106
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
107
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
108
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
109
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
111
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 40 */
112
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
113
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
114
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
115
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
116
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
117
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
118
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
119
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
120
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
122
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 50 */
123
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
124
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
125
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
126
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
127
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
128
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
129
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
130
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
131
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
133
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 60 */
134
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
135
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
136
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
137
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
138
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
139
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
140
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
141
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
142
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
144
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 70 */
145
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
146
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
147
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
148
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
149
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
150
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
151
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
152
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
153
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
155
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 80 */
156
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
157
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
158
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
159
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
160
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
161
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
162
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
163
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
164
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
166
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 90 */
167
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
168
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
169
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
170
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
171
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
172
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
173
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
174
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
175
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
177
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 100 */
178
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
179
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
180
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
181
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
182
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
183
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
184
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
185
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
186
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
188
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 110 */
189
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
190
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
191
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
192
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
193
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
194
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
195
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
196
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
197
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
199
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 120 */
200
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
201
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
202
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
203
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
204
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
205
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
206
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
207
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
208
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
210
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 130 */
211
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
212
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
213
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
214
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
215
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
216
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
217
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
218
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
219
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
221
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 140 */
222
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
223
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
224
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
225
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
226
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
227
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
228
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
229
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
230
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
232
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 150 */
233
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
234
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
235
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
236
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
237
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
238
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
239
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
240
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
241
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
243
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 160 */
244
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
245
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
246
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
247
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
248
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
249
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
250
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
251
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
252
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
254
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 170 */
255
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
256
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
257
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
258
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
259
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
260
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
261
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
262
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
263
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
265
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 180 */
266
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
267
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
268
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
269
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
270
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
271
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
272
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
273
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
274
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
276
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 190 */
277
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
278
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
279
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
280
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
281
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
282
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
283
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
284
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
285
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
287
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 200 */
288
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
289
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
290
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
291
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
292
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
293
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
294
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
295
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
296
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
298
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 210 */
299
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
300
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
301
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
302
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
303
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
304
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
305
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
306
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
307
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
309
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 220 */
310
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
311
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
312
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
313
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
314
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
315
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
316
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
317
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
318
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
320
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 230 */
321
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
322
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
323
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
324
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
325
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
326
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
327
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
328
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
329
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
331
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 240 */
332
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
333
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
334
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
335
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
336
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
337
DRIZZLE_COLUMN_TYPE_DRIZZLE_NEWDECIMAL,
338
DRIZZLE_COLUMN_TYPE_DRIZZLE_ENUM,
339
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
340
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
342
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 250 */
343
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
344
DRIZZLE_COLUMN_TYPE_DRIZZLE_BLOB,
345
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
346
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
347
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX
354
drizzle_column_st *drizzle_column_create(drizzle_result_st *result,
355
drizzle_column_st *column)
359
column= malloc(sizeof(drizzle_column_st));
362
drizzle_set_error(result->con->drizzle, "drizzle_column_create",
367
column->result = result;
368
/* SET BELOW: column->next */
370
column->options= DRIZZLE_COLUMN_ALLOCATED;
371
column->catalog[0] = '\0';
372
column->db[0] = '\0';
373
column->table[0] = '\0';
374
column->orig_table[0] = '\0';
375
column->name[0] = '\0';
376
column->orig_name[0] = '\0';
379
column->max_size = 0;
382
column->decimals = 0;
383
/* UNSET: column->default_value */
384
column->default_value_size = 0;
389
column->result = result;
390
/* SET BELOW: column->next */
393
column->catalog[0] = '\0';
394
column->db[0] = '\0';
395
column->table[0] = '\0';
396
column->orig_table[0] = '\0';
397
column->name[0] = '\0';
398
column->orig_name[0] = '\0';
401
column->max_size = 0;
404
column->decimals = 0;
405
/* UNSET: column->default_value */
406
column->default_value_size = 0;
409
column->result= result;
411
if (result->column_list)
412
result->column_list->prev= column;
413
column->next= result->column_list;
414
result->column_list= column;
419
void drizzle_column_free(drizzle_column_st *column)
421
if (column->result->column_list == column)
422
column->result->column_list= column->next;
424
column->prev->next= column->next;
426
column->next->prev= column->prev;
428
if (column->options & DRIZZLE_COLUMN_ALLOCATED)
432
drizzle_result_st *drizzle_column_drizzle_result(drizzle_column_st *column)
434
return column->result;
437
const char *drizzle_column_catalog(drizzle_column_st *column)
439
return column->catalog;
442
const char *drizzle_column_db(drizzle_column_st *column)
447
const char *drizzle_column_table(drizzle_column_st *column)
449
return column->table;
452
const char *drizzle_column_orig_table(drizzle_column_st *column)
454
return column->orig_table;
457
const char *drizzle_column_name(drizzle_column_st *column)
462
const char *drizzle_column_orig_name(drizzle_column_st *column)
464
return column->orig_name;
467
drizzle_charset_t drizzle_column_charset(drizzle_column_st *column)
469
return column->charset;
472
uint32_t drizzle_column_size(drizzle_column_st *column)
477
size_t drizzle_column_max_size(drizzle_column_st *column)
479
return column->max_size;
482
void drizzle_column_set_max_size(drizzle_column_st *column, size_t size)
484
column->max_size= size;
487
drizzle_column_type_t drizzle_column_type(drizzle_column_st *column)
492
drizzle_column_type_drizzle_t
493
drizzle_column_type_drizzle(drizzle_column_st *column)
495
return _column_type_drizzle_map_from[column->type];
498
drizzle_column_flags_t drizzle_column_flags(drizzle_column_st *column)
500
return column->flags;
503
uint8_t drizzle_column_decimals(drizzle_column_st *column)
505
return column->decimals;
508
const uint8_t *drizzle_column_default_value(drizzle_column_st *column,
511
*size= column->default_value_size;
512
return column->default_value;
519
drizzle_return_t drizzle_column_skip(drizzle_result_st *result)
521
drizzle_return_t ret;
522
if (drizzle_state_none(result->con))
524
result->options|= DRIZZLE_RESULT_SKIP_COLUMN;
526
drizzle_state_push(result->con, drizzle_state_column_read);
527
drizzle_state_push(result->con, drizzle_state_packet_read);
529
ret= drizzle_state_loop(result->con);
530
result->options&= ~DRIZZLE_RESULT_SKIP_COLUMN;
534
drizzle_return_t drizzle_column_skip_all(drizzle_result_st *result)
536
drizzle_return_t ret;
539
for (it= 1; it <= result->column_count; it++)
541
ret= drizzle_column_skip(result);
542
if (ret != DRIZZLE_RETURN_OK)
546
return DRIZZLE_RETURN_OK;
549
drizzle_column_st *drizzle_column_read(drizzle_result_st *result,
550
drizzle_column_st *column,
551
drizzle_return_t *ret_ptr)
553
if (drizzle_state_none(result->con))
555
result->column= column;
557
drizzle_state_push(result->con, drizzle_state_column_read);
558
drizzle_state_push(result->con, drizzle_state_packet_read);
561
*ret_ptr= drizzle_state_loop(result->con);
562
return result->column;
565
drizzle_return_t drizzle_column_buffer(drizzle_result_st *result)
567
drizzle_return_t ret;
569
if (result->column_buffer == NULL)
571
if (result->column_count == 0)
573
result->options|= DRIZZLE_RESULT_BUFFER_COLUMN;
574
return DRIZZLE_RETURN_OK;
577
result->column_buffer= malloc(sizeof(drizzle_column_st) *
578
result->column_count);
579
if (result->column_buffer == NULL)
581
drizzle_set_error(result->con->drizzle, "drizzle_column_buffer",
583
return DRIZZLE_RETURN_MEMORY;
587
/* No while body, just keep calling to buffer columns. */
588
while (drizzle_column_read(result,
589
&(result->column_buffer[result->column_current]),
590
&ret) != NULL && ret == DRIZZLE_RETURN_OK);
591
if (ret == DRIZZLE_RETURN_OK)
593
result->column_current= 0;
594
result->options|= DRIZZLE_RESULT_BUFFER_COLUMN;
600
drizzle_column_st *drizzle_column_next(drizzle_result_st *result)
602
if (result->column_current == result->column_count)
605
result->column_current++;
606
return &(result->column_buffer[result->column_current - 1]);
609
drizzle_column_st *drizzle_column_prev(drizzle_result_st *result)
611
if (result->column_current == 0)
614
result->column_current--;
615
return &(result->column_buffer[result->column_current]);
618
void drizzle_column_seek(drizzle_result_st *result, uint16_t column)
620
if (column <= result->column_count)
621
result->column_current= column;
624
drizzle_column_st *drizzle_column_index(drizzle_result_st *result,
627
if (column >= result->column_count)
630
return &(result->column_buffer[column]);
633
uint16_t drizzle_column_current(drizzle_result_st *result)
635
return result->column_current;
642
drizzle_return_t drizzle_column_write(drizzle_result_st *result,
643
drizzle_column_st *column)
645
if (drizzle_state_none(result->con))
647
result->column= column;
649
drizzle_state_push(result->con, drizzle_state_column_write);
652
return drizzle_state_loop(result->con);
655
void drizzle_column_set_catalog(drizzle_column_st *column, const char *catalog)
658
column->catalog[0]= 0;
661
strncpy(column->catalog, catalog, DRIZZLE_MAX_CATALOG_SIZE);
662
column->catalog[DRIZZLE_MAX_CATALOG_SIZE - 1]= 0;
666
void drizzle_column_set_db(drizzle_column_st *column, const char *db)
672
strncpy(column->db, db, DRIZZLE_MAX_DB_SIZE);
673
column->db[DRIZZLE_MAX_DB_SIZE - 1]= 0;
677
void drizzle_column_set_table(drizzle_column_st *column, const char *table)
683
strncpy(column->table, table, DRIZZLE_MAX_TABLE_SIZE);
684
column->table[DRIZZLE_MAX_TABLE_SIZE - 1]= 0;
688
void drizzle_column_set_orig_table(drizzle_column_st *column,
689
const char *orig_table)
691
if (orig_table == NULL)
692
column->orig_table[0]= 0;
695
strncpy(column->orig_table, orig_table, DRIZZLE_MAX_TABLE_SIZE);
696
column->orig_table[DRIZZLE_MAX_TABLE_SIZE - 1]= 0;
700
void drizzle_column_set_name(drizzle_column_st *column, const char *name)
706
strncpy(column->name, name, DRIZZLE_MAX_COLUMN_NAME_SIZE);
707
column->name[DRIZZLE_MAX_COLUMN_NAME_SIZE - 1]= 0;
711
void drizzle_column_set_orig_name(drizzle_column_st *column,
712
const char *orig_name)
714
if (orig_name == NULL)
715
column->orig_name[0]= 0;
718
strncpy(column->orig_name, orig_name, DRIZZLE_MAX_COLUMN_NAME_SIZE);
719
column->orig_name[DRIZZLE_MAX_COLUMN_NAME_SIZE - 1]= 0;
723
void drizzle_column_set_charset(drizzle_column_st *column,
724
drizzle_charset_t charset)
726
column->charset= charset;
729
void drizzle_column_set_size(drizzle_column_st *column, uint32_t size)
734
void drizzle_column_set_type(drizzle_column_st *column,
735
drizzle_column_type_t type)
740
void drizzle_column_set_flags(drizzle_column_st *column,
741
drizzle_column_flags_t flags)
743
column->flags= flags;
746
void drizzle_column_set_decimals(drizzle_column_st *column, uint8_t decimals)
748
column->decimals= decimals;
751
void drizzle_column_set_default_value(drizzle_column_st *column,
752
const uint8_t *default_value,
755
if (default_value == NULL)
756
column->default_value[0]= 0;
759
if (size < DRIZZLE_MAX_DEFAULT_VALUE_SIZE)
761
memcpy(column->default_value, default_value, size);
762
column->default_value[size]= 0;
763
column->default_value_size= size;
767
memcpy(column->default_value, default_value,
768
DRIZZLE_MAX_DEFAULT_VALUE_SIZE - 1);
769
column->default_value[DRIZZLE_MAX_DEFAULT_VALUE_SIZE - 1]= 0;
770
column->default_value_size= DRIZZLE_MAX_DEFAULT_VALUE_SIZE;
776
* Internal state functions.
779
drizzle_return_t drizzle_state_column_read(drizzle_con_st *con)
781
drizzle_column_st *column;
782
drizzle_column_type_drizzle_t drizzle_type;
784
drizzle_log_debug(con->drizzle, "drizzle_state_column_read");
786
/* Assume the entire column packet will fit in the buffer. */
787
if (con->buffer_size < con->packet_size)
789
drizzle_state_push(con, drizzle_state_read);
790
return DRIZZLE_RETURN_OK;
793
if (con->packet_size == 5 && con->buffer_ptr[0] == 254)
795
/* EOF packet marking end of columns. */
796
con->result->column= NULL;
797
con->result->warning_count= drizzle_get_byte2(con->buffer_ptr + 1);
798
con->status= drizzle_get_byte2(con->buffer_ptr + 3);
800
con->buffer_size-= 5;
802
drizzle_state_pop(con);
804
else if (con->result->options & DRIZZLE_RESULT_SKIP_COLUMN)
806
con->buffer_ptr+= con->packet_size;
807
con->buffer_size-= con->packet_size;
809
con->result->column_current++;
811
drizzle_state_pop(con);
815
column= drizzle_column_create(con->result, con->result->column);
817
return DRIZZLE_RETURN_MEMORY;
819
con->result->column= column;
821
/* These functions can only fail if they need to read data, but we know we
822
buffered the entire packet, so ignore returns. */
823
(void)drizzle_unpack_string(con, column->catalog, DRIZZLE_MAX_CATALOG_SIZE);
824
(void)drizzle_unpack_string(con, column->db, DRIZZLE_MAX_DB_SIZE);
825
(void)drizzle_unpack_string(con, column->table, DRIZZLE_MAX_TABLE_SIZE);
826
(void)drizzle_unpack_string(con, column->orig_table,
827
DRIZZLE_MAX_TABLE_SIZE);
828
(void)drizzle_unpack_string(con, column->name,
829
DRIZZLE_MAX_COLUMN_NAME_SIZE);
830
(void)drizzle_unpack_string(con, column->orig_name,
831
DRIZZLE_MAX_COLUMN_NAME_SIZE);
833
/* Skip one filler byte. */
834
column->charset= (drizzle_charset_t)drizzle_get_byte2(con->buffer_ptr + 1);
835
column->size= drizzle_get_byte4(con->buffer_ptr + 3);
837
if (con->options & DRIZZLE_CON_MYSQL)
838
column->type= con->buffer_ptr[7];
841
drizzle_type= con->buffer_ptr[7];
842
if (drizzle_type >= DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX)
843
drizzle_type= DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX;
844
column->type= _column_type_drizzle_map_to[drizzle_type];
847
column->flags= drizzle_get_byte2(con->buffer_ptr + 8);
848
if (column->type <= DRIZZLE_COLUMN_TYPE_INT24 &&
849
column->type != DRIZZLE_COLUMN_TYPE_TIMESTAMP)
851
column->flags|= DRIZZLE_COLUMN_FLAGS_NUM;
854
column->decimals= con->buffer_ptr[10];
855
/* Skip two reserved bytes. */
857
con->buffer_ptr+= 13;
858
con->buffer_size-= 13;
859
con->packet_size-= 13;
861
if (con->packet_size > 0)
863
drizzle_column_set_default_value(column, con->buffer_ptr,
866
con->buffer_ptr+= con->packet_size;
867
con->buffer_size-= con->packet_size;
870
column->default_value[0]= 0;
872
con->result->column_current++;
874
drizzle_state_pop(con);
877
return DRIZZLE_RETURN_OK;
880
drizzle_return_t drizzle_state_column_write(drizzle_con_st *con)
882
uint8_t *start= con->buffer_ptr + con->buffer_size;
884
drizzle_column_st *column= con->result->column;
886
drizzle_log_debug(con->drizzle, "drizzle_state_column_write");
888
/* Calculate max packet size. */
889
con->packet_size= 9 + strlen(column->catalog)
890
+ 9 + strlen(column->db)
891
+ 9 + strlen(column->table)
892
+ 9 + strlen(column->orig_table)
893
+ 9 + strlen(column->name)
894
+ 9 + strlen(column->orig_name)
902
+ column->default_value_size;
904
/* Assume the entire column packet will fit in the buffer. */
905
if ((con->packet_size + 4) > DRIZZLE_MAX_BUFFER_SIZE)
907
drizzle_set_error(con->drizzle, "drizzle_state_column_write",
908
"buffer too small:%zu", con->packet_size + 4);
909
return DRIZZLE_RETURN_INTERNAL_ERROR;
912
/* Flush buffer if there is not enough room. */
913
if (((size_t)DRIZZLE_MAX_BUFFER_SIZE - (size_t)(start - con->buffer)) <
916
drizzle_state_push(con, drizzle_state_write);
917
return DRIZZLE_RETURN_OK;
920
/* Store packet size at the end since it may change. */
922
ptr[3]= con->packet_number;
923
con->packet_number++;
926
ptr= drizzle_pack_string(column->catalog, ptr);
927
ptr= drizzle_pack_string(column->db, ptr);
928
ptr= drizzle_pack_string(column->table, ptr);
929
ptr= drizzle_pack_string(column->orig_table, ptr);
930
ptr= drizzle_pack_string(column->name, ptr);
931
ptr= drizzle_pack_string(column->orig_name, ptr);
933
/* This unused byte is set to 12 for some reason. */
937
drizzle_set_byte2(ptr, column->charset);
940
drizzle_set_byte4(ptr, column->size);
943
if (con->options & DRIZZLE_CON_MYSQL)
944
ptr[0]= column->type;
946
ptr[0]= _column_type_drizzle_map_from[column->type];
949
drizzle_set_byte2(ptr, column->flags);
952
ptr[0]= column->decimals;
958
if (column->default_value_size > 0)
960
memcpy(ptr, column->default_value, column->default_value_size);
961
ptr+= column->default_value_size;
964
con->packet_size= ((size_t)(ptr - start) - 4);
965
con->buffer_size+= (4 + con->packet_size);
967
/* Store packet size now. */
968
drizzle_set_byte3(start, con->packet_size);
970
con->result->column_current++;
972
drizzle_state_pop(con);
974
return DRIZZLE_RETURN_OK;