~drizzle-trunk/drizzle/development

1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
1
/*
2
 * Drizzle Client & Protocol Library
3
 *
4
 * Copyright (C) 2008 Eric Day (eday@oddments.org)
5
 * All rights reserved.
6
 *
1971.2.1 by kalebral at gmail
update files that did not have license or had incorrect license structure
7
 * Redistribution and use in source and binary forms, with or without
8
 * modification, are permitted provided that the following conditions are
9
 * met:
10
 *
11
 *     * Redistributions of source code must retain the above copyright
12
 * notice, this list of conditions and the following disclaimer.
13
 *
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
17
 * distribution.
18
 *
19
 *     * The names of its contributors may not be used to endorse or
20
 * promote products derived from this software without specific prior
21
 * written permission.
22
 *
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.
34
 *
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
35
 */
36
1971.2.1 by kalebral at gmail
update files that did not have license or had incorrect license structure
37
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
38
/**
39
 * @file
40
 * @brief Column definitions
41
 */
42
2449.1.4 by Brian Aker
Complete update of libdrizzle
43
#include <libdrizzle-1.0/common.h>
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
44
45
/*
46
 * Private variables.
47
 */
48
49
static drizzle_column_type_t _column_type_drizzle_map_to[]=
50
{
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
63
};
64
65
static drizzle_column_type_drizzle_t _column_type_drizzle_map_from[]=
66
{
67
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 0 */
2187.3.5 by Monty Taylor
Getting closer.
68
 DRIZZLE_COLUMN_TYPE_DRIZZLE_BOOLEAN,
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
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,
77
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,
88
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,
99
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,
110
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,
121
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,
132
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,
143
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,
154
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,
165
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,
176
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,
187
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,
198
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,
209
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,
220
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,
231
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,
242
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,
253
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,
264
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,
275
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,
286
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,
297
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,
308
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,
319
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,
330
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,
341
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
348
};
349
350
/*
351
 * Common definitions
352
 */
353
354
drizzle_column_st *drizzle_column_create(drizzle_result_st *result,
355
                                         drizzle_column_st *column)
356
{
357
  if (column == NULL)
358
  {
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
359
    column= new (std::nothrow) (drizzle_column_st);
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
360
    if (column == NULL)
361
    {
362
      drizzle_set_error(result->con->drizzle, "drizzle_column_create",
363
                        "malloc");
364
      return NULL;
365
    }
366
1986.2.3 by Monty Taylor
Updated patch from Evan - which passes tests and also seems to be faster for
367
    column->result = result;
368
    /* SET BELOW: column->next */
369
    column->prev = NULL;
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';
377
    column->charset = 0;
378
    column->size = 0;
379
    column->max_size = 0;
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
380
    column->type = drizzle_column_type_t();
381
    column->flags = drizzle_column_flags_t();
1986.2.3 by Monty Taylor
Updated patch from Evan - which passes tests and also seems to be faster for
382
    column->decimals = 0;
383
    /* UNSET: column->default_value */
384
    column->default_value_size = 0;
1986.2.2 by Monty Taylor
Alternate option for clearing the drizzle_column_st.
385
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
386
  }
387
  else
1986.2.1 by Evan Jones
This structure is HUGE (~6636 bytes): memset is too expensive
388
  {
1986.2.3 by Monty Taylor
Updated patch from Evan - which passes tests and also seems to be faster for
389
    column->result = result;
390
    /* SET BELOW: column->next */
391
    column->prev = NULL;
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
392
    column->options= drizzle_column_options_t();
1986.2.3 by Monty Taylor
Updated patch from Evan - which passes tests and also seems to be faster for
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';
399
    column->charset = 0;
400
    column->size = 0;
401
    column->max_size = 0;
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
402
    column->type = drizzle_column_type_t();
403
    column->flags = drizzle_column_flags_t();
1986.2.3 by Monty Taylor
Updated patch from Evan - which passes tests and also seems to be faster for
404
    column->decimals = 0;
405
    /* UNSET: column->default_value */
406
    column->default_value_size = 0;
1986.2.1 by Evan Jones
This structure is HUGE (~6636 bytes): memset is too expensive
407
  }
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
408
409
  column->result= result;
410
411
  if (result->column_list)
412
    result->column_list->prev= column;
413
  column->next= result->column_list;
414
  result->column_list= column;
415
416
  return column;
417
}
418
419
void drizzle_column_free(drizzle_column_st *column)
420
{
421
  if (column->result->column_list == column)
422
    column->result->column_list= column->next;
423
  if (column->prev)
424
    column->prev->next= column->next;
425
  if (column->next)
426
    column->next->prev= column->prev;
427
428
  if (column->options & DRIZZLE_COLUMN_ALLOCATED)
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
429
  {
430
    delete [] column;
431
  }
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
432
}
433
434
drizzle_result_st *drizzle_column_drizzle_result(drizzle_column_st *column)
435
{
436
  return column->result;
437
}
438
439
const char *drizzle_column_catalog(drizzle_column_st *column)
440
{
441
  return column->catalog;
442
}
443
444
const char *drizzle_column_db(drizzle_column_st *column)
445
{
446
  return column->db;
447
}
448
449
const char *drizzle_column_table(drizzle_column_st *column)
450
{
451
  return column->table;
452
}
453
454
const char *drizzle_column_orig_table(drizzle_column_st *column)
455
{
456
  return column->orig_table;
457
}
458
459
const char *drizzle_column_name(drizzle_column_st *column)
460
{
461
  return column->name;
462
}
463
464
const char *drizzle_column_orig_name(drizzle_column_st *column)
465
{
466
  return column->orig_name;
467
}
468
469
drizzle_charset_t drizzle_column_charset(drizzle_column_st *column)
470
{
471
  return column->charset;
472
}
473
474
uint32_t drizzle_column_size(drizzle_column_st *column)
475
{
476
  return column->size;
477
}
478
479
size_t drizzle_column_max_size(drizzle_column_st *column)
480
{
481
  return column->max_size;
482
}
483
484
void drizzle_column_set_max_size(drizzle_column_st *column, size_t size)
485
{
486
  column->max_size= size;
487
}
488
489
drizzle_column_type_t drizzle_column_type(drizzle_column_st *column)
490
{
491
  return column->type;
492
}
493
494
drizzle_column_type_drizzle_t
495
drizzle_column_type_drizzle(drizzle_column_st *column)
496
{
497
  return _column_type_drizzle_map_from[column->type];
498
}
499
1992.6.7 by Monty Taylor
Revert -Wc++-compat change.
500
drizzle_column_flags_t drizzle_column_flags(drizzle_column_st *column)
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
501
{
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
502
  return drizzle_column_flags_t(column->flags);
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
503
}
504
505
uint8_t drizzle_column_decimals(drizzle_column_st *column)
506
{
507
  return column->decimals;
508
}
509
510
const uint8_t *drizzle_column_default_value(drizzle_column_st *column,
511
                                            size_t *size)
512
{
513
  *size= column->default_value_size;
514
  return column->default_value;
515
}
516
517
/*
518
 * Client definitions
519
 */
520
521
drizzle_return_t drizzle_column_skip(drizzle_result_st *result)
522
{
2367.1.2 by Andrew Hutchings
Fixup drizzle_column_skip for Windows
523
  drizzle_return_t ret;
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
524
  if (drizzle_state_none(result->con))
525
  {
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
526
    result->options|= int(DRIZZLE_RESULT_SKIP_COLUMN);
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
527
528
    drizzle_state_push(result->con, drizzle_state_column_read);
529
    drizzle_state_push(result->con, drizzle_state_packet_read);
530
  }
2367.1.2 by Andrew Hutchings
Fixup drizzle_column_skip for Windows
531
  ret= drizzle_state_loop(result->con);
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
532
  result->options&= ~int(DRIZZLE_RESULT_SKIP_COLUMN);
2367.1.1 by Andrew Hutchings
Push drizzle_column_skip fixes upstream
533
  return ret;
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
534
}
535
2411.1.1 by Andrew Hutchings
Add function drizzle_column_skip_all
536
drizzle_return_t drizzle_column_skip_all(drizzle_result_st *result)
537
{
538
  drizzle_return_t ret;
539
  uint16_t it;
540
541
  for (it= 1; it <= result->column_count; it++)
542
  {
543
    ret= drizzle_column_skip(result);
544
    if (ret != DRIZZLE_RETURN_OK)
545
      return ret;
546
  }
547
548
  return DRIZZLE_RETURN_OK;
549
}
550
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
551
drizzle_column_st *drizzle_column_read(drizzle_result_st *result,
552
                                       drizzle_column_st *column,
553
                                       drizzle_return_t *ret_ptr)
554
{
555
  if (drizzle_state_none(result->con))
556
  {
557
    result->column= column;
558
559
    drizzle_state_push(result->con, drizzle_state_column_read);
560
    drizzle_state_push(result->con, drizzle_state_packet_read);
561
  }
562
563
  *ret_ptr= drizzle_state_loop(result->con);
564
  return result->column;
565
}
566
567
drizzle_return_t drizzle_column_buffer(drizzle_result_st *result)
568
{
569
  drizzle_return_t ret;
570
571
  if (result->column_buffer == NULL)
572
  {
573
    if (result->column_count == 0)
574
    {
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
575
      result->options|= int(DRIZZLE_RESULT_BUFFER_COLUMN);
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
576
      return DRIZZLE_RETURN_OK;
577
    }
578
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
579
    result->column_buffer= new (std::nothrow) drizzle_column_st[result->column_count];
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
580
    if (result->column_buffer == NULL)
581
    {
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
582
      drizzle_set_error(result->con->drizzle, __func__, "malloc");
583
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
584
      return DRIZZLE_RETURN_MEMORY;
585
    }
586
  }
587
588
  /* No while body, just keep calling to buffer columns. */
589
  while (drizzle_column_read(result,
590
                             &(result->column_buffer[result->column_current]),
591
                             &ret) != NULL && ret == DRIZZLE_RETURN_OK);
592
  if (ret == DRIZZLE_RETURN_OK)
593
  {
594
    result->column_current= 0;
595
    result->options|= DRIZZLE_RESULT_BUFFER_COLUMN;
596
  }
597
598
  return ret;
599
}
600
601
drizzle_column_st *drizzle_column_next(drizzle_result_st *result)
602
{
603
  if (result->column_current == result->column_count)
604
    return NULL;
605
606
  result->column_current++;
607
  return &(result->column_buffer[result->column_current - 1]);
608
}
609
610
drizzle_column_st *drizzle_column_prev(drizzle_result_st *result)
611
{
612
  if (result->column_current == 0)
613
    return NULL;
614
615
  result->column_current--;
616
  return &(result->column_buffer[result->column_current]);
617
}
618
619
void drizzle_column_seek(drizzle_result_st *result, uint16_t column)
620
{
621
  if (column <= result->column_count)
622
    result->column_current= column;
623
}
624
625
drizzle_column_st *drizzle_column_index(drizzle_result_st *result,
626
                                        uint16_t column)
627
{
628
  if (column >= result->column_count)
629
    return NULL;
630
631
  return &(result->column_buffer[column]);
632
}
633
634
uint16_t drizzle_column_current(drizzle_result_st *result)
635
{
636
  return result->column_current;
637
}
638
639
/*
640
 * Server definitions
641
 */
642
643
drizzle_return_t drizzle_column_write(drizzle_result_st *result,
644
                                      drizzle_column_st *column)
645
{
646
  if (drizzle_state_none(result->con))
647
  {
648
    result->column= column;
649
650
    drizzle_state_push(result->con, drizzle_state_column_write);
651
  }
652
653
  return drizzle_state_loop(result->con);
654
}
655
656
void drizzle_column_set_catalog(drizzle_column_st *column, const char *catalog)
657
{
658
  if (catalog == NULL)
659
    column->catalog[0]= 0;
660
  else
661
  {
662
    strncpy(column->catalog, catalog, DRIZZLE_MAX_CATALOG_SIZE);
663
    column->catalog[DRIZZLE_MAX_CATALOG_SIZE - 1]= 0;
664
  }
665
}
666
667
void drizzle_column_set_db(drizzle_column_st *column, const char *db)
668
{
669
  if (db == NULL)
670
    column->db[0]= 0;
671
  else
672
  {
673
    strncpy(column->db, db, DRIZZLE_MAX_DB_SIZE);
674
    column->db[DRIZZLE_MAX_DB_SIZE - 1]= 0;
675
  }
676
}
677
678
void drizzle_column_set_table(drizzle_column_st *column, const char *table)
679
{
680
  if (table == NULL)
681
    column->table[0]= 0;
682
  else
683
  {
684
    strncpy(column->table, table, DRIZZLE_MAX_TABLE_SIZE);
685
    column->table[DRIZZLE_MAX_TABLE_SIZE - 1]= 0;
686
  }
687
}
688
689
void drizzle_column_set_orig_table(drizzle_column_st *column,
690
                                   const char *orig_table)
691
{
692
  if (orig_table == NULL)
693
    column->orig_table[0]= 0;
694
  else
695
  {
696
    strncpy(column->orig_table, orig_table, DRIZZLE_MAX_TABLE_SIZE);
697
    column->orig_table[DRIZZLE_MAX_TABLE_SIZE - 1]= 0;
698
  }
699
}
700
701
void drizzle_column_set_name(drizzle_column_st *column, const char *name)
702
{
703
  if (name == NULL)
704
    column->name[0]= 0;
705
  else
706
  {
707
    strncpy(column->name, name, DRIZZLE_MAX_COLUMN_NAME_SIZE);
708
    column->name[DRIZZLE_MAX_COLUMN_NAME_SIZE - 1]= 0;
709
  }
710
}
711
712
void drizzle_column_set_orig_name(drizzle_column_st *column,
713
                                  const char *orig_name)
714
{
715
  if (orig_name == NULL)
716
    column->orig_name[0]= 0;
717
  else
718
  {
719
    strncpy(column->orig_name, orig_name, DRIZZLE_MAX_COLUMN_NAME_SIZE);
720
    column->orig_name[DRIZZLE_MAX_COLUMN_NAME_SIZE - 1]= 0;
721
  }
722
}
723
724
void drizzle_column_set_charset(drizzle_column_st *column,
725
                                drizzle_charset_t charset)
726
{
727
  column->charset= charset;
728
}
729
730
void drizzle_column_set_size(drizzle_column_st *column, uint32_t size)
731
{
732
  column->size= size;
733
}
734
735
void drizzle_column_set_type(drizzle_column_st *column,
736
                             drizzle_column_type_t type)
737
{
738
  column->type= type;
739
}
740
741
void drizzle_column_set_flags(drizzle_column_st *column,
1992.6.7 by Monty Taylor
Revert -Wc++-compat change.
742
                              drizzle_column_flags_t flags)
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
743
{
744
  column->flags= flags;
745
}
746
747
void drizzle_column_set_decimals(drizzle_column_st *column, uint8_t decimals)
748
{
749
  column->decimals= decimals;
750
}
751
752
void drizzle_column_set_default_value(drizzle_column_st *column,
753
                                      const uint8_t *default_value,
754
                                      size_t size)
755
{
756
  if (default_value == NULL)
757
    column->default_value[0]= 0;
758
  else
759
  {
760
    if (size < DRIZZLE_MAX_DEFAULT_VALUE_SIZE)
761
    {
762
      memcpy(column->default_value, default_value, size);
763
      column->default_value[size]= 0;
764
      column->default_value_size= size;
765
    }
766
    else
767
    {
768
      memcpy(column->default_value, default_value,
769
             DRIZZLE_MAX_DEFAULT_VALUE_SIZE - 1);
770
      column->default_value[DRIZZLE_MAX_DEFAULT_VALUE_SIZE - 1]= 0;
771
      column->default_value_size= DRIZZLE_MAX_DEFAULT_VALUE_SIZE;
772
    }
773
  }
774
}
775
776
/*
777
 * Internal state functions.
778
 */
779
780
drizzle_return_t drizzle_state_column_read(drizzle_con_st *con)
781
{
782
  drizzle_column_st *column;
783
  drizzle_column_type_drizzle_t drizzle_type;
784
785
  drizzle_log_debug(con->drizzle, "drizzle_state_column_read");
786
787
  /* Assume the entire column packet will fit in the buffer. */
788
  if (con->buffer_size < con->packet_size)
789
  {
790
    drizzle_state_push(con, drizzle_state_read);
791
    return DRIZZLE_RETURN_OK;
792
  }
793
794
  if (con->packet_size == 5 && con->buffer_ptr[0] == 254)
795
  {
796
    /* EOF packet marking end of columns. */
797
    con->result->column= NULL;
798
    con->result->warning_count= drizzle_get_byte2(con->buffer_ptr + 1);
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
799
    con->status= drizzle_con_status_t(drizzle_get_byte2(con->buffer_ptr + 3));
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
800
    con->buffer_ptr+= 5;
801
    con->buffer_size-= 5;
802
803
    drizzle_state_pop(con);
804
  }
805
  else if (con->result->options & DRIZZLE_RESULT_SKIP_COLUMN)
806
  {
807
    con->buffer_ptr+= con->packet_size;
808
    con->buffer_size-= con->packet_size;
809
    con->packet_size= 0;
2411.1.1 by Andrew Hutchings
Add function drizzle_column_skip_all
810
    con->result->column_current++;
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
811
2367.1.1 by Andrew Hutchings
Push drizzle_column_skip fixes upstream
812
    drizzle_state_pop(con);
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
813
  }
814
  else
815
  {
816
    column= drizzle_column_create(con->result, con->result->column);
817
    if (column == NULL)
818
      return DRIZZLE_RETURN_MEMORY;
819
820
    con->result->column= column;
821
822
    /* These functions can only fail if they need to read data, but we know we
823
       buffered the entire packet, so ignore returns. */
824
    (void)drizzle_unpack_string(con, column->catalog, DRIZZLE_MAX_CATALOG_SIZE);
825
    (void)drizzle_unpack_string(con, column->db, DRIZZLE_MAX_DB_SIZE);
826
    (void)drizzle_unpack_string(con, column->table, DRIZZLE_MAX_TABLE_SIZE);
827
    (void)drizzle_unpack_string(con, column->orig_table,
828
                                DRIZZLE_MAX_TABLE_SIZE);
829
    (void)drizzle_unpack_string(con, column->name,
830
                                DRIZZLE_MAX_COLUMN_NAME_SIZE);
831
    (void)drizzle_unpack_string(con, column->orig_name,
832
                                DRIZZLE_MAX_COLUMN_NAME_SIZE);
833
834
    /* Skip one filler byte. */
835
    column->charset= (drizzle_charset_t)drizzle_get_byte2(con->buffer_ptr + 1);
836
    column->size= drizzle_get_byte4(con->buffer_ptr + 3);
837
838
    if (con->options & DRIZZLE_CON_MYSQL)
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
839
    {
840
      column->type= drizzle_column_type_t(con->buffer_ptr[7]);
841
    }
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
842
    else
843
    {
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
844
      drizzle_type= drizzle_column_type_drizzle_t(con->buffer_ptr[7]);
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
845
      if (drizzle_type >= DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX)
846
        drizzle_type= DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX;
847
      column->type= _column_type_drizzle_map_to[drizzle_type];
848
    }
849
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
850
    column->flags= drizzle_column_flags_t(drizzle_get_byte2(con->buffer_ptr + 8));
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
851
    if (column->type <= DRIZZLE_COLUMN_TYPE_INT24 &&
852
        column->type != DRIZZLE_COLUMN_TYPE_TIMESTAMP)
853
    {
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
854
      column->flags|= int(DRIZZLE_COLUMN_FLAGS_NUM);
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
855
    }
856
857
    column->decimals= con->buffer_ptr[10];
858
    /* Skip two reserved bytes. */
859
860
    con->buffer_ptr+= 13;
861
    con->buffer_size-= 13;
862
    con->packet_size-= 13;
863
864
    if (con->packet_size > 0)
865
    {
866
      drizzle_column_set_default_value(column, con->buffer_ptr,
867
                                       con->packet_size);
868
869
      con->buffer_ptr+= con->packet_size;
870
      con->buffer_size-= con->packet_size;
871
    }
872
    else
873
      column->default_value[0]= 0;
874
875
    con->result->column_current++;
876
877
    drizzle_state_pop(con);
878
  }
879
880
  return DRIZZLE_RETURN_OK;
881
}
882
883
drizzle_return_t drizzle_state_column_write(drizzle_con_st *con)
884
{
885
  uint8_t *start= con->buffer_ptr + con->buffer_size;
886
  uint8_t *ptr;
887
  drizzle_column_st *column= con->result->column;
888
889
  drizzle_log_debug(con->drizzle, "drizzle_state_column_write");
890
891
  /* Calculate max packet size. */
892
  con->packet_size= 9 + strlen(column->catalog)
893
                  + 9 + strlen(column->db)
894
                  + 9 + strlen(column->table)
895
                  + 9 + strlen(column->orig_table)
896
                  + 9 + strlen(column->name)
897
                  + 9 + strlen(column->orig_name)
898
                  + 1   /* Unused */
899
                  + 2   /* Charset */
900
                  + 4   /* Size */
901
                  + 1   /* Type */
902
                  + 2   /* Flags */
903
                  + 1   /* Decimals */
904
                  + 2   /* Unused */
905
                  + column->default_value_size;
906
907
  /* Assume the entire column packet will fit in the buffer. */
908
  if ((con->packet_size + 4) > DRIZZLE_MAX_BUFFER_SIZE)
909
  {
910
    drizzle_set_error(con->drizzle, "drizzle_state_column_write",
911
                      "buffer too small:%zu", con->packet_size + 4);
912
    return DRIZZLE_RETURN_INTERNAL_ERROR;
913
  }
914
915
  /* Flush buffer if there is not enough room. */
916
  if (((size_t)DRIZZLE_MAX_BUFFER_SIZE - (size_t)(start - con->buffer)) <
917
      con->packet_size)
918
  {
919
    drizzle_state_push(con, drizzle_state_write);
920
    return DRIZZLE_RETURN_OK;
921
  }
922
923
  /* Store packet size at the end since it may change. */
924
  ptr= start;
925
  ptr[3]= con->packet_number;
926
  con->packet_number++;
927
  ptr+= 4;
928
929
  ptr= drizzle_pack_string(column->catalog, ptr);
930
  ptr= drizzle_pack_string(column->db, ptr);
931
  ptr= drizzle_pack_string(column->table, ptr);
932
  ptr= drizzle_pack_string(column->orig_table, ptr);
933
  ptr= drizzle_pack_string(column->name, ptr);
934
  ptr= drizzle_pack_string(column->orig_name, ptr);
935
936
  /* This unused byte is set to 12 for some reason. */
937
  ptr[0]= 12;
938
  ptr++;
939
940
  drizzle_set_byte2(ptr, column->charset);
941
  ptr+= 2;
942
943
  drizzle_set_byte4(ptr, column->size);
944
  ptr+= 4;
945
946
  if (con->options & DRIZZLE_CON_MYSQL)
947
    ptr[0]= column->type;
948
  else
949
    ptr[0]= _column_type_drizzle_map_from[column->type];
950
  ptr++;
951
952
  drizzle_set_byte2(ptr, column->flags);
953
  ptr+= 2;
954
955
  ptr[0]= column->decimals;
956
  ptr++;
957
958
  memset(ptr, 0, 2);
959
  ptr+= 2;
960
961
  if (column->default_value_size > 0)
962
  {
963
    memcpy(ptr, column->default_value, column->default_value_size);
964
    ptr+= column->default_value_size;
965
  }
966
967
  con->packet_size= ((size_t)(ptr - start) - 4);
968
  con->buffer_size+= (4 + con->packet_size);
969
970
  /* Store packet size now. */
971
  drizzle_set_byte3(start, con->packet_size);
972
973
  con->result->column_current++;
974
975
  drizzle_state_pop(con);
976
977
  return DRIZZLE_RETURN_OK;
978
}