~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to libdrizzle/column.c

Added libdrizzle to the tree.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Drizzle Client & Protocol Library
 
3
 *
 
4
 * Copyright (C) 2008 Eric Day (eday@oddments.org)
 
5
 * All rights reserved.
 
6
 *
 
7
 * Use and distribution licensed under the BSD license.  See
 
8
 * the COPYING file in this directory for full text.
 
9
 */
 
10
 
 
11
/**
 
12
 * @file
 
13
 * @brief Column definitions
 
14
 */
 
15
 
 
16
#include "common.h"
 
17
 
 
18
/*
 
19
 * Private variables.
 
20
 */
 
21
 
 
22
static drizzle_column_type_t _column_type_drizzle_map_to[]=
 
23
{
 
24
 DRIZZLE_COLUMN_TYPE_TINY,
 
25
 DRIZZLE_COLUMN_TYPE_LONG,
 
26
 DRIZZLE_COLUMN_TYPE_DOUBLE,
 
27
 DRIZZLE_COLUMN_TYPE_NULL,
 
28
 DRIZZLE_COLUMN_TYPE_TIMESTAMP,
 
29
 DRIZZLE_COLUMN_TYPE_LONGLONG,
 
30
 DRIZZLE_COLUMN_TYPE_DATETIME,
 
31
 DRIZZLE_COLUMN_TYPE_NEWDATE,
 
32
 DRIZZLE_COLUMN_TYPE_VARCHAR,
 
33
 DRIZZLE_COLUMN_TYPE_NEWDECIMAL,
 
34
 DRIZZLE_COLUMN_TYPE_ENUM,
 
35
 DRIZZLE_COLUMN_TYPE_BLOB
 
36
};
 
37
 
 
38
static drizzle_column_type_drizzle_t _column_type_drizzle_map_from[]=
 
39
{
 
40
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 0 */
 
41
 DRIZZLE_COLUMN_TYPE_DRIZZLE_TINY,
 
42
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
43
 DRIZZLE_COLUMN_TYPE_DRIZZLE_LONG,
 
44
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
45
 DRIZZLE_COLUMN_TYPE_DRIZZLE_DOUBLE,
 
46
 DRIZZLE_COLUMN_TYPE_DRIZZLE_NULL,
 
47
 DRIZZLE_COLUMN_TYPE_DRIZZLE_TIMESTAMP,
 
48
 DRIZZLE_COLUMN_TYPE_DRIZZLE_LONGLONG,
 
49
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
50
 
 
51
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 10 */
 
52
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
53
 DRIZZLE_COLUMN_TYPE_DRIZZLE_DATETIME,
 
54
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
55
 DRIZZLE_COLUMN_TYPE_DRIZZLE_DATE,
 
56
 DRIZZLE_COLUMN_TYPE_DRIZZLE_VARCHAR,
 
57
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
58
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
59
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
60
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
61
 
 
62
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 20 */
 
63
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
64
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
65
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
66
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
67
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
68
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
69
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
70
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
71
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
72
 
 
73
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 30 */
 
74
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
75
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
76
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
77
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
78
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
79
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
80
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
81
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
82
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
83
 
 
84
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 40 */
 
85
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
86
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
87
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
88
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
89
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
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
 
 
95
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 50 */
 
96
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
97
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
98
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
99
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
100
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
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
 
 
106
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 60 */
 
107
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
108
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
109
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
110
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
111
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
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
 
 
117
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 70 */
 
118
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
119
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
120
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
121
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
122
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
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
 
 
128
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 80 */
 
129
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
130
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
131
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
132
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
133
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
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
 
 
139
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 90 */
 
140
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
141
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
142
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
143
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
144
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
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
 
 
150
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 100 */
 
151
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
152
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
153
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
154
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
155
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
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
 
 
161
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 110 */
 
162
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
163
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
164
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
165
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
166
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
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
 
 
172
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 120 */
 
173
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
174
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
175
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
176
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
177
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
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
 
 
183
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 130 */
 
184
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
185
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
186
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
187
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
188
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
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
 
 
194
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 140 */
 
195
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
196
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
197
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
198
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
199
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
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
 
 
205
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 150 */
 
206
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
207
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
208
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
209
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
210
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
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
 
 
216
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 160 */
 
217
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
218
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
219
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
220
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
221
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
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
 
 
227
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 170 */
 
228
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
229
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
230
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
231
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
232
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
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
 
 
238
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 180 */
 
239
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
240
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
241
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
242
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
243
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
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
 
 
249
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 190 */
 
250
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
251
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
252
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
253
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
254
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
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
 
 
260
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 200 */
 
261
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
262
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
263
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
264
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
265
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
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
 
 
271
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 210 */
 
272
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
273
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
274
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
275
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
276
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
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
 
 
282
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 220 */
 
283
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
284
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
285
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
286
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
287
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
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
 
 
293
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 230 */
 
294
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
295
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
296
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
297
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
298
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
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
 
 
304
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 240 */
 
305
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
306
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
307
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
308
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
309
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
310
 DRIZZLE_COLUMN_TYPE_DRIZZLE_NEWDECIMAL,
 
311
 DRIZZLE_COLUMN_TYPE_DRIZZLE_ENUM,
 
312
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
313
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
314
 
 
315
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 250 */
 
316
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
317
 DRIZZLE_COLUMN_TYPE_DRIZZLE_BLOB,
 
318
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
319
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
 
320
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX
 
321
};
 
322
 
 
323
/*
 
324
 * Common definitions
 
325
 */
 
326
 
 
327
drizzle_column_st *drizzle_column_create(drizzle_result_st *result,
 
328
                                         drizzle_column_st *column)
 
329
{
 
330
  if (column == NULL)
 
331
  {
 
332
    column= malloc(sizeof(drizzle_column_st));
 
333
    if (column == NULL)
 
334
    {
 
335
      drizzle_set_error(result->con->drizzle, "drizzle_column_create",
 
336
                        "malloc");
 
337
      return NULL;
 
338
    }
 
339
 
 
340
    memset(column, 0, sizeof(drizzle_column_st));
 
341
    column->options|= DRIZZLE_COLUMN_ALLOCATED;
 
342
  }
 
343
  else
 
344
    memset(column, 0, sizeof(drizzle_column_st));
 
345
 
 
346
  column->result= result;
 
347
 
 
348
  if (result->column_list)
 
349
    result->column_list->prev= column;
 
350
  column->next= result->column_list;
 
351
  result->column_list= column;
 
352
 
 
353
  return column;
 
354
}
 
355
 
 
356
void drizzle_column_free(drizzle_column_st *column)
 
357
{
 
358
  if (column->result->column_list == column)
 
359
    column->result->column_list= column->next;
 
360
  if (column->prev)
 
361
    column->prev->next= column->next;
 
362
  if (column->next)
 
363
    column->next->prev= column->prev;
 
364
 
 
365
  if (column->options & DRIZZLE_COLUMN_ALLOCATED)
 
366
    free(column);
 
367
}
 
368
 
 
369
drizzle_result_st *drizzle_column_drizzle_result(drizzle_column_st *column)
 
370
{
 
371
  return column->result;
 
372
}
 
373
 
 
374
const char *drizzle_column_catalog(drizzle_column_st *column)
 
375
{
 
376
  return column->catalog;
 
377
}
 
378
 
 
379
const char *drizzle_column_db(drizzle_column_st *column)
 
380
{
 
381
  return column->db;
 
382
}
 
383
 
 
384
const char *drizzle_column_table(drizzle_column_st *column)
 
385
{
 
386
  return column->table;
 
387
}
 
388
 
 
389
const char *drizzle_column_orig_table(drizzle_column_st *column)
 
390
{
 
391
  return column->orig_table;
 
392
}
 
393
 
 
394
const char *drizzle_column_name(drizzle_column_st *column)
 
395
{
 
396
  return column->name;
 
397
}
 
398
 
 
399
const char *drizzle_column_orig_name(drizzle_column_st *column)
 
400
{
 
401
  return column->orig_name;
 
402
}
 
403
 
 
404
drizzle_charset_t drizzle_column_charset(drizzle_column_st *column)
 
405
{
 
406
  return column->charset;
 
407
}
 
408
 
 
409
uint32_t drizzle_column_size(drizzle_column_st *column)
 
410
{
 
411
  return column->size;
 
412
}
 
413
 
 
414
size_t drizzle_column_max_size(drizzle_column_st *column)
 
415
{
 
416
  return column->max_size;
 
417
}
 
418
 
 
419
void drizzle_column_set_max_size(drizzle_column_st *column, size_t size)
 
420
{
 
421
  column->max_size= size;
 
422
}
 
423
 
 
424
drizzle_column_type_t drizzle_column_type(drizzle_column_st *column)
 
425
{
 
426
  return column->type;
 
427
}
 
428
 
 
429
drizzle_column_type_drizzle_t
 
430
drizzle_column_type_drizzle(drizzle_column_st *column)
 
431
{
 
432
  return _column_type_drizzle_map_from[column->type];
 
433
}
 
434
 
 
435
drizzle_column_flags_t drizzle_column_flags(drizzle_column_st *column)
 
436
{
 
437
  return column->flags;
 
438
}
 
439
 
 
440
uint8_t drizzle_column_decimals(drizzle_column_st *column)
 
441
{
 
442
  return column->decimals;
 
443
}
 
444
 
 
445
const uint8_t *drizzle_column_default_value(drizzle_column_st *column,
 
446
                                            size_t *size)
 
447
{
 
448
  *size= column->default_value_size;
 
449
  return column->default_value;
 
450
}
 
451
 
 
452
/*
 
453
 * Client definitions
 
454
 */
 
455
 
 
456
drizzle_return_t drizzle_column_skip(drizzle_result_st *result)
 
457
{
 
458
  if (drizzle_state_none(result->con))
 
459
  {
 
460
    result->options|= DRIZZLE_RESULT_SKIP_COLUMN;
 
461
 
 
462
    drizzle_state_push(result->con, drizzle_state_column_read);
 
463
    drizzle_state_push(result->con, drizzle_state_packet_read);
 
464
  }
 
465
 
 
466
  return drizzle_state_loop(result->con);
 
467
}
 
468
 
 
469
drizzle_column_st *drizzle_column_read(drizzle_result_st *result,
 
470
                                       drizzle_column_st *column,
 
471
                                       drizzle_return_t *ret_ptr)
 
472
{
 
473
  if (drizzle_state_none(result->con))
 
474
  {
 
475
    result->column= column;
 
476
 
 
477
    drizzle_state_push(result->con, drizzle_state_column_read);
 
478
    drizzle_state_push(result->con, drizzle_state_packet_read);
 
479
  }
 
480
 
 
481
  *ret_ptr= drizzle_state_loop(result->con);
 
482
  return result->column;
 
483
}
 
484
 
 
485
drizzle_return_t drizzle_column_buffer(drizzle_result_st *result)
 
486
{
 
487
  drizzle_return_t ret;
 
488
 
 
489
  if (result->column_buffer == NULL)
 
490
  {
 
491
    if (result->column_count == 0)
 
492
    {
 
493
      result->options|= DRIZZLE_RESULT_BUFFER_COLUMN;
 
494
      return DRIZZLE_RETURN_OK;
 
495
    }
 
496
 
 
497
    result->column_buffer= malloc(sizeof(drizzle_column_st) *
 
498
                                  result->column_count);
 
499
    if (result->column_buffer == NULL)
 
500
    {
 
501
      drizzle_set_error(result->con->drizzle, "drizzle_column_buffer",
 
502
                        "malloc");
 
503
      return DRIZZLE_RETURN_MEMORY;
 
504
    }
 
505
  }
 
506
 
 
507
  /* No while body, just keep calling to buffer columns. */
 
508
  while (drizzle_column_read(result,
 
509
                             &(result->column_buffer[result->column_current]),
 
510
                             &ret) != NULL && ret == DRIZZLE_RETURN_OK);
 
511
  if (ret == DRIZZLE_RETURN_OK)
 
512
  {
 
513
    result->column_current= 0;
 
514
    result->options|= DRIZZLE_RESULT_BUFFER_COLUMN;
 
515
  }
 
516
 
 
517
  return ret;
 
518
}
 
519
 
 
520
drizzle_column_st *drizzle_column_next(drizzle_result_st *result)
 
521
{
 
522
  if (result->column_current == result->column_count)
 
523
    return NULL;
 
524
 
 
525
  result->column_current++;
 
526
  return &(result->column_buffer[result->column_current - 1]);
 
527
}
 
528
 
 
529
drizzle_column_st *drizzle_column_prev(drizzle_result_st *result)
 
530
{
 
531
  if (result->column_current == 0)
 
532
    return NULL;
 
533
 
 
534
  result->column_current--;
 
535
  return &(result->column_buffer[result->column_current]);
 
536
}
 
537
 
 
538
void drizzle_column_seek(drizzle_result_st *result, uint16_t column)
 
539
{
 
540
  if (column <= result->column_count)
 
541
    result->column_current= column;
 
542
}
 
543
 
 
544
drizzle_column_st *drizzle_column_index(drizzle_result_st *result,
 
545
                                        uint16_t column)
 
546
{
 
547
  if (column >= result->column_count)
 
548
    return NULL;
 
549
 
 
550
  return &(result->column_buffer[column]);
 
551
}
 
552
 
 
553
uint16_t drizzle_column_current(drizzle_result_st *result)
 
554
{
 
555
  return result->column_current;
 
556
}
 
557
 
 
558
/*
 
559
 * Server definitions
 
560
 */
 
561
 
 
562
drizzle_return_t drizzle_column_write(drizzle_result_st *result,
 
563
                                      drizzle_column_st *column)
 
564
{
 
565
  if (drizzle_state_none(result->con))
 
566
  {
 
567
    result->column= column;
 
568
 
 
569
    drizzle_state_push(result->con, drizzle_state_column_write);
 
570
  }
 
571
 
 
572
  return drizzle_state_loop(result->con);
 
573
}
 
574
 
 
575
void drizzle_column_set_catalog(drizzle_column_st *column, const char *catalog)
 
576
{
 
577
  if (catalog == NULL)
 
578
    column->catalog[0]= 0;
 
579
  else
 
580
  {
 
581
    strncpy(column->catalog, catalog, DRIZZLE_MAX_CATALOG_SIZE);
 
582
    column->catalog[DRIZZLE_MAX_CATALOG_SIZE - 1]= 0;
 
583
  }
 
584
}
 
585
 
 
586
void drizzle_column_set_db(drizzle_column_st *column, const char *db)
 
587
{
 
588
  if (db == NULL)
 
589
    column->db[0]= 0;
 
590
  else
 
591
  {
 
592
    strncpy(column->db, db, DRIZZLE_MAX_DB_SIZE);
 
593
    column->db[DRIZZLE_MAX_DB_SIZE - 1]= 0;
 
594
  }
 
595
}
 
596
 
 
597
void drizzle_column_set_table(drizzle_column_st *column, const char *table)
 
598
{
 
599
  if (table == NULL)
 
600
    column->table[0]= 0;
 
601
  else
 
602
  {
 
603
    strncpy(column->table, table, DRIZZLE_MAX_TABLE_SIZE);
 
604
    column->table[DRIZZLE_MAX_TABLE_SIZE - 1]= 0;
 
605
  }
 
606
}
 
607
 
 
608
void drizzle_column_set_orig_table(drizzle_column_st *column,
 
609
                                   const char *orig_table)
 
610
{
 
611
  if (orig_table == NULL)
 
612
    column->orig_table[0]= 0;
 
613
  else
 
614
  {
 
615
    strncpy(column->orig_table, orig_table, DRIZZLE_MAX_TABLE_SIZE);
 
616
    column->orig_table[DRIZZLE_MAX_TABLE_SIZE - 1]= 0;
 
617
  }
 
618
}
 
619
 
 
620
void drizzle_column_set_name(drizzle_column_st *column, const char *name)
 
621
{
 
622
  if (name == NULL)
 
623
    column->name[0]= 0;
 
624
  else
 
625
  {
 
626
    strncpy(column->name, name, DRIZZLE_MAX_COLUMN_NAME_SIZE);
 
627
    column->name[DRIZZLE_MAX_COLUMN_NAME_SIZE - 1]= 0;
 
628
  }
 
629
}
 
630
 
 
631
void drizzle_column_set_orig_name(drizzle_column_st *column,
 
632
                                  const char *orig_name)
 
633
{
 
634
  if (orig_name == NULL)
 
635
    column->orig_name[0]= 0;
 
636
  else
 
637
  {
 
638
    strncpy(column->orig_name, orig_name, DRIZZLE_MAX_COLUMN_NAME_SIZE);
 
639
    column->orig_name[DRIZZLE_MAX_COLUMN_NAME_SIZE - 1]= 0;
 
640
  }
 
641
}
 
642
 
 
643
void drizzle_column_set_charset(drizzle_column_st *column,
 
644
                                drizzle_charset_t charset)
 
645
{
 
646
  column->charset= charset;
 
647
}
 
648
 
 
649
void drizzle_column_set_size(drizzle_column_st *column, uint32_t size)
 
650
{
 
651
  column->size= size;
 
652
}
 
653
 
 
654
void drizzle_column_set_type(drizzle_column_st *column,
 
655
                             drizzle_column_type_t type)
 
656
{
 
657
  column->type= type;
 
658
}
 
659
 
 
660
void drizzle_column_set_flags(drizzle_column_st *column,
 
661
                              drizzle_column_flags_t flags)
 
662
{
 
663
  column->flags= flags;
 
664
}
 
665
 
 
666
void drizzle_column_set_decimals(drizzle_column_st *column, uint8_t decimals)
 
667
{
 
668
  column->decimals= decimals;
 
669
}
 
670
 
 
671
void drizzle_column_set_default_value(drizzle_column_st *column,
 
672
                                      const uint8_t *default_value,
 
673
                                      size_t size)
 
674
{
 
675
  if (default_value == NULL)
 
676
    column->default_value[0]= 0;
 
677
  else
 
678
  {
 
679
    if (size < DRIZZLE_MAX_DEFAULT_VALUE_SIZE)
 
680
    {
 
681
      memcpy(column->default_value, default_value, size);
 
682
      column->default_value[size]= 0;
 
683
      column->default_value_size= size;
 
684
    }
 
685
    else
 
686
    {
 
687
      memcpy(column->default_value, default_value,
 
688
             DRIZZLE_MAX_DEFAULT_VALUE_SIZE - 1);
 
689
      column->default_value[DRIZZLE_MAX_DEFAULT_VALUE_SIZE - 1]= 0;
 
690
      column->default_value_size= DRIZZLE_MAX_DEFAULT_VALUE_SIZE;
 
691
    }
 
692
  }
 
693
}
 
694
 
 
695
/*
 
696
 * Internal state functions.
 
697
 */
 
698
 
 
699
drizzle_return_t drizzle_state_column_read(drizzle_con_st *con)
 
700
{
 
701
  drizzle_column_st *column;
 
702
  drizzle_column_type_drizzle_t drizzle_type;
 
703
 
 
704
  drizzle_log_debug(con->drizzle, "drizzle_state_column_read");
 
705
 
 
706
  /* Assume the entire column packet will fit in the buffer. */
 
707
  if (con->buffer_size < con->packet_size)
 
708
  {
 
709
    drizzle_state_push(con, drizzle_state_read);
 
710
    return DRIZZLE_RETURN_OK;
 
711
  }
 
712
 
 
713
  if (con->packet_size == 5 && con->buffer_ptr[0] == 254)
 
714
  {
 
715
    /* EOF packet marking end of columns. */
 
716
    con->result->column= NULL;
 
717
    con->result->warning_count= drizzle_get_byte2(con->buffer_ptr + 1);
 
718
    con->status= drizzle_get_byte2(con->buffer_ptr + 3);
 
719
    con->buffer_ptr+= 5;
 
720
    con->buffer_size-= 5;
 
721
 
 
722
    drizzle_state_pop(con);
 
723
  }
 
724
  else if (con->result->options & DRIZZLE_RESULT_SKIP_COLUMN)
 
725
  {
 
726
    con->buffer_ptr+= con->packet_size;
 
727
    con->buffer_size-= con->packet_size;
 
728
    con->packet_size= 0;
 
729
 
 
730
    drizzle_state_push(con, drizzle_state_packet_read);
 
731
  }
 
732
  else
 
733
  {
 
734
    column= drizzle_column_create(con->result, con->result->column);
 
735
    if (column == NULL)
 
736
      return DRIZZLE_RETURN_MEMORY;
 
737
 
 
738
    con->result->column= column;
 
739
 
 
740
    /* These functions can only fail if they need to read data, but we know we
 
741
       buffered the entire packet, so ignore returns. */
 
742
    (void)drizzle_unpack_string(con, column->catalog, DRIZZLE_MAX_CATALOG_SIZE);
 
743
    (void)drizzle_unpack_string(con, column->db, DRIZZLE_MAX_DB_SIZE);
 
744
    (void)drizzle_unpack_string(con, column->table, DRIZZLE_MAX_TABLE_SIZE);
 
745
    (void)drizzle_unpack_string(con, column->orig_table,
 
746
                                DRIZZLE_MAX_TABLE_SIZE);
 
747
    (void)drizzle_unpack_string(con, column->name,
 
748
                                DRIZZLE_MAX_COLUMN_NAME_SIZE);
 
749
    (void)drizzle_unpack_string(con, column->orig_name,
 
750
                                DRIZZLE_MAX_COLUMN_NAME_SIZE);
 
751
 
 
752
    /* Skip one filler byte. */
 
753
    column->charset= (drizzle_charset_t)drizzle_get_byte2(con->buffer_ptr + 1);
 
754
    column->size= drizzle_get_byte4(con->buffer_ptr + 3);
 
755
 
 
756
    if (con->options & DRIZZLE_CON_MYSQL)
 
757
      column->type= con->buffer_ptr[7];
 
758
    else
 
759
    {
 
760
      drizzle_type= con->buffer_ptr[7];
 
761
      if (drizzle_type >= DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX)
 
762
        drizzle_type= DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX;
 
763
      column->type= _column_type_drizzle_map_to[drizzle_type];
 
764
    }
 
765
 
 
766
    column->flags= drizzle_get_byte2(con->buffer_ptr + 8);
 
767
    if (column->type <= DRIZZLE_COLUMN_TYPE_INT24 &&
 
768
        column->type != DRIZZLE_COLUMN_TYPE_TIMESTAMP)
 
769
    {
 
770
      column->flags|= DRIZZLE_COLUMN_FLAGS_NUM;
 
771
    }
 
772
 
 
773
    column->decimals= con->buffer_ptr[10];
 
774
    /* Skip two reserved bytes. */
 
775
 
 
776
    con->buffer_ptr+= 13;
 
777
    con->buffer_size-= 13;
 
778
    con->packet_size-= 13;
 
779
 
 
780
    if (con->packet_size > 0)
 
781
    {
 
782
      drizzle_column_set_default_value(column, con->buffer_ptr,
 
783
                                       con->packet_size);
 
784
 
 
785
      con->buffer_ptr+= con->packet_size;
 
786
      con->buffer_size-= con->packet_size;
 
787
    }
 
788
    else
 
789
      column->default_value[0]= 0;
 
790
 
 
791
    con->result->column_current++;
 
792
 
 
793
    drizzle_state_pop(con);
 
794
  }
 
795
 
 
796
  return DRIZZLE_RETURN_OK;
 
797
}
 
798
 
 
799
drizzle_return_t drizzle_state_column_write(drizzle_con_st *con)
 
800
{
 
801
  uint8_t *start= con->buffer_ptr + con->buffer_size;
 
802
  uint8_t *ptr;
 
803
  drizzle_column_st *column= con->result->column;
 
804
 
 
805
  drizzle_log_debug(con->drizzle, "drizzle_state_column_write");
 
806
 
 
807
  /* Calculate max packet size. */
 
808
  con->packet_size= 9 + strlen(column->catalog)
 
809
                  + 9 + strlen(column->db)
 
810
                  + 9 + strlen(column->table)
 
811
                  + 9 + strlen(column->orig_table)
 
812
                  + 9 + strlen(column->name)
 
813
                  + 9 + strlen(column->orig_name)
 
814
                  + 1   /* Unused */
 
815
                  + 2   /* Charset */
 
816
                  + 4   /* Size */
 
817
                  + 1   /* Type */
 
818
                  + 2   /* Flags */
 
819
                  + 1   /* Decimals */
 
820
                  + 2   /* Unused */
 
821
                  + column->default_value_size;
 
822
 
 
823
  /* Assume the entire column packet will fit in the buffer. */
 
824
  if ((con->packet_size + 4) > DRIZZLE_MAX_BUFFER_SIZE)
 
825
  {
 
826
    drizzle_set_error(con->drizzle, "drizzle_state_column_write",
 
827
                      "buffer too small:%zu", con->packet_size + 4);
 
828
    return DRIZZLE_RETURN_INTERNAL_ERROR;
 
829
  }
 
830
 
 
831
  /* Flush buffer if there is not enough room. */
 
832
  if (((size_t)DRIZZLE_MAX_BUFFER_SIZE - (size_t)(start - con->buffer)) <
 
833
      con->packet_size)
 
834
  {
 
835
    drizzle_state_push(con, drizzle_state_write);
 
836
    return DRIZZLE_RETURN_OK;
 
837
  }
 
838
 
 
839
  /* Store packet size at the end since it may change. */
 
840
  ptr= start;
 
841
  ptr[3]= con->packet_number;
 
842
  con->packet_number++;
 
843
  ptr+= 4;
 
844
 
 
845
  ptr= drizzle_pack_string(column->catalog, ptr);
 
846
  ptr= drizzle_pack_string(column->db, ptr);
 
847
  ptr= drizzle_pack_string(column->table, ptr);
 
848
  ptr= drizzle_pack_string(column->orig_table, ptr);
 
849
  ptr= drizzle_pack_string(column->name, ptr);
 
850
  ptr= drizzle_pack_string(column->orig_name, ptr);
 
851
 
 
852
  /* This unused byte is set to 12 for some reason. */
 
853
  ptr[0]= 12;
 
854
  ptr++;
 
855
 
 
856
  drizzle_set_byte2(ptr, column->charset);
 
857
  ptr+= 2;
 
858
 
 
859
  drizzle_set_byte4(ptr, column->size);
 
860
  ptr+= 4;
 
861
 
 
862
  if (con->options & DRIZZLE_CON_MYSQL)
 
863
    ptr[0]= column->type;
 
864
  else
 
865
    ptr[0]= _column_type_drizzle_map_from[column->type];
 
866
  ptr++;
 
867
 
 
868
  drizzle_set_byte2(ptr, column->flags);
 
869
  ptr+= 2;
 
870
 
 
871
  ptr[0]= column->decimals;
 
872
  ptr++;
 
873
 
 
874
  memset(ptr, 0, 2);
 
875
  ptr+= 2;
 
876
 
 
877
  if (column->default_value_size > 0)
 
878
  {
 
879
    memcpy(ptr, column->default_value, column->default_value_size);
 
880
    ptr+= column->default_value_size;
 
881
  }
 
882
 
 
883
  con->packet_size= ((size_t)(ptr - start) - 4);
 
884
  con->buffer_size+= (4 + con->packet_size);
 
885
 
 
886
  /* Store packet size now. */
 
887
  drizzle_set_byte3(start, con->packet_size);
 
888
 
 
889
  con->result->column_current++;
 
890
 
 
891
  drizzle_state_pop(con);
 
892
 
 
893
  return DRIZZLE_RETURN_OK;
 
894
}