~drizzle-trunk/drizzle/development

2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
1
/*  vim:expandtab:shiftwidth=2:tabstop=2:smarttab: 
2
 *
3
 *  Drizzle Client & Protocol Library
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
4
 *
5
 * Copyright (C) 2008 Eric Day (eday@oddments.org)
6
 * All rights reserved.
7
 *
1971.2.1 by kalebral at gmail
update files that did not have license or had incorrect license structure
8
 * Redistribution and use in source and binary forms, with or without
9
 * modification, are permitted provided that the following conditions are
10
 * met:
11
 *
12
 *     * Redistributions of source code must retain the above copyright
13
 * notice, this list of conditions and the following disclaimer.
14
 *
15
 *     * Redistributions in binary form must reproduce the above
16
 * copyright notice, this list of conditions and the following disclaimer
17
 * in the documentation and/or other materials provided with the
18
 * distribution.
19
 *
20
 *     * The names of its contributors may not be used to endorse or
21
 * promote products derived from this software without specific prior
22
 * written permission.
23
 *
24
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
27
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
28
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
30
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35
 *
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
36
 */
37
1971.2.1 by kalebral at gmail
update files that did not have license or had incorrect license structure
38
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
39
/**
40
 * @file
41
 * @brief Column definitions
42
 */
43
2449.1.4 by Brian Aker
Complete update of libdrizzle
44
#include <libdrizzle-1.0/common.h>
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
45
46
/*
47
 * Private variables.
48
 */
49
50
static drizzle_column_type_t _column_type_drizzle_map_to[]=
51
{
52
 DRIZZLE_COLUMN_TYPE_TINY,
53
 DRIZZLE_COLUMN_TYPE_LONG,
54
 DRIZZLE_COLUMN_TYPE_DOUBLE,
55
 DRIZZLE_COLUMN_TYPE_NULL,
56
 DRIZZLE_COLUMN_TYPE_TIMESTAMP,
57
 DRIZZLE_COLUMN_TYPE_LONGLONG,
58
 DRIZZLE_COLUMN_TYPE_DATETIME,
59
 DRIZZLE_COLUMN_TYPE_NEWDATE,
60
 DRIZZLE_COLUMN_TYPE_VARCHAR,
61
 DRIZZLE_COLUMN_TYPE_NEWDECIMAL,
62
 DRIZZLE_COLUMN_TYPE_ENUM,
63
 DRIZZLE_COLUMN_TYPE_BLOB
64
};
65
66
static drizzle_column_type_drizzle_t _column_type_drizzle_map_from[]=
67
{
68
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 0 */
2187.3.5 by Monty Taylor
Getting closer.
69
 DRIZZLE_COLUMN_TYPE_DRIZZLE_BOOLEAN,
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
70
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
71
 DRIZZLE_COLUMN_TYPE_DRIZZLE_LONG,
72
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
73
 DRIZZLE_COLUMN_TYPE_DRIZZLE_DOUBLE,
74
 DRIZZLE_COLUMN_TYPE_DRIZZLE_NULL,
75
 DRIZZLE_COLUMN_TYPE_DRIZZLE_TIMESTAMP,
76
 DRIZZLE_COLUMN_TYPE_DRIZZLE_LONGLONG,
77
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
78
79
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 10 */
80
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
81
 DRIZZLE_COLUMN_TYPE_DRIZZLE_DATETIME,
82
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
83
 DRIZZLE_COLUMN_TYPE_DRIZZLE_DATE,
84
 DRIZZLE_COLUMN_TYPE_DRIZZLE_VARCHAR,
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
90
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 20 */
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
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
100
101
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 30 */
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
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
111
112
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 40 */
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
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
122
123
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 50 */
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
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
133
134
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 60 */
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
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
144
145
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 70 */
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
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
155
156
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 80 */
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
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
166
167
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 90 */
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
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
177
178
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 100 */
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
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
188
189
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 110 */
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
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
199
200
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 120 */
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
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
210
211
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 130 */
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
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
221
222
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 140 */
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
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
232
233
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 150 */
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
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
243
244
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 160 */
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
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
254
255
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 170 */
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
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
265
266
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 180 */
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
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
276
277
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 190 */
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
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
287
288
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 200 */
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
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
298
299
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 210 */
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
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
309
310
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 220 */
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
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
320
321
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 230 */
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
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
331
332
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 240 */
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_MAX,
338
 DRIZZLE_COLUMN_TYPE_DRIZZLE_NEWDECIMAL,
339
 DRIZZLE_COLUMN_TYPE_DRIZZLE_ENUM,
340
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
341
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
342
343
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX, /* 250 */
344
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
345
 DRIZZLE_COLUMN_TYPE_DRIZZLE_BLOB,
346
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
347
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
348
 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX
349
};
350
351
/*
352
 * Common definitions
353
 */
354
355
drizzle_column_st *drizzle_column_create(drizzle_result_st *result,
356
                                         drizzle_column_st *column)
357
{
358
  if (column == NULL)
359
  {
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
360
    column= new (std::nothrow) (drizzle_column_st);
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
361
    if (column == NULL)
362
    {
363
      drizzle_set_error(result->con->drizzle, "drizzle_column_create",
364
                        "malloc");
365
      return NULL;
366
    }
367
1986.2.3 by Monty Taylor
Updated patch from Evan - which passes tests and also seems to be faster for
368
    column->result = result;
369
    /* SET BELOW: column->next */
370
    column->prev = NULL;
371
    column->options= DRIZZLE_COLUMN_ALLOCATED;
372
    column->catalog[0] = '\0';
373
    column->db[0] = '\0';
374
    column->table[0] = '\0';
375
    column->orig_table[0] = '\0';
376
    column->name[0] = '\0';
377
    column->orig_name[0] = '\0';
378
    column->charset = 0;
379
    column->size = 0;
380
    column->max_size = 0;
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
381
    column->type = drizzle_column_type_t();
382
    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
383
    column->decimals = 0;
384
    /* UNSET: column->default_value */
385
    column->default_value_size = 0;
1986.2.2 by Monty Taylor
Alternate option for clearing the drizzle_column_st.
386
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
387
  }
388
  else
1986.2.1 by Evan Jones
This structure is HUGE (~6636 bytes): memset is too expensive
389
  {
1986.2.3 by Monty Taylor
Updated patch from Evan - which passes tests and also seems to be faster for
390
    column->result = result;
391
    /* SET BELOW: column->next */
392
    column->prev = NULL;
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
393
    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
394
    column->catalog[0] = '\0';
395
    column->db[0] = '\0';
396
    column->table[0] = '\0';
397
    column->orig_table[0] = '\0';
398
    column->name[0] = '\0';
399
    column->orig_name[0] = '\0';
400
    column->charset = 0;
401
    column->size = 0;
402
    column->max_size = 0;
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
403
    column->type = drizzle_column_type_t();
404
    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
405
    column->decimals = 0;
406
    /* UNSET: column->default_value */
407
    column->default_value_size = 0;
1986.2.1 by Evan Jones
This structure is HUGE (~6636 bytes): memset is too expensive
408
  }
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
409
410
  column->result= result;
411
412
  if (result->column_list)
413
    result->column_list->prev= column;
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
414
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
415
  column->next= result->column_list;
416
  result->column_list= column;
417
418
  return column;
419
}
420
421
void drizzle_column_free(drizzle_column_st *column)
422
{
423
  if (column->result->column_list == column)
424
    column->result->column_list= column->next;
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
425
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
426
  if (column->prev)
427
    column->prev->next= column->next;
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
428
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
429
  if (column->next)
430
    column->next->prev= column->prev;
431
432
  if (column->options & DRIZZLE_COLUMN_ALLOCATED)
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
433
  {
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
434
    delete column;
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
435
  }
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
436
}
437
438
drizzle_result_st *drizzle_column_drizzle_result(drizzle_column_st *column)
439
{
440
  return column->result;
441
}
442
443
const char *drizzle_column_catalog(drizzle_column_st *column)
444
{
445
  return column->catalog;
446
}
447
448
const char *drizzle_column_db(drizzle_column_st *column)
449
{
450
  return column->db;
451
}
452
453
const char *drizzle_column_table(drizzle_column_st *column)
454
{
455
  return column->table;
456
}
457
458
const char *drizzle_column_orig_table(drizzle_column_st *column)
459
{
460
  return column->orig_table;
461
}
462
463
const char *drizzle_column_name(drizzle_column_st *column)
464
{
465
  return column->name;
466
}
467
468
const char *drizzle_column_orig_name(drizzle_column_st *column)
469
{
470
  return column->orig_name;
471
}
472
473
drizzle_charset_t drizzle_column_charset(drizzle_column_st *column)
474
{
475
  return column->charset;
476
}
477
478
uint32_t drizzle_column_size(drizzle_column_st *column)
479
{
480
  return column->size;
481
}
482
483
size_t drizzle_column_max_size(drizzle_column_st *column)
484
{
485
  return column->max_size;
486
}
487
488
void drizzle_column_set_max_size(drizzle_column_st *column, size_t size)
489
{
490
  column->max_size= size;
491
}
492
493
drizzle_column_type_t drizzle_column_type(drizzle_column_st *column)
494
{
495
  return column->type;
496
}
497
498
drizzle_column_type_drizzle_t
499
drizzle_column_type_drizzle(drizzle_column_st *column)
500
{
501
  return _column_type_drizzle_map_from[column->type];
502
}
503
1992.6.7 by Monty Taylor
Revert -Wc++-compat change.
504
drizzle_column_flags_t drizzle_column_flags(drizzle_column_st *column)
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
505
{
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
506
  return drizzle_column_flags_t(column->flags);
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
507
}
508
509
uint8_t drizzle_column_decimals(drizzle_column_st *column)
510
{
511
  return column->decimals;
512
}
513
514
const uint8_t *drizzle_column_default_value(drizzle_column_st *column,
515
                                            size_t *size)
516
{
517
  *size= column->default_value_size;
518
  return column->default_value;
519
}
520
521
/*
522
 * Client definitions
523
 */
524
525
drizzle_return_t drizzle_column_skip(drizzle_result_st *result)
526
{
2367.1.2 by Andrew Hutchings
Fixup drizzle_column_skip for Windows
527
  drizzle_return_t ret;
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
528
  if (drizzle_state_none(result->con))
529
  {
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
530
    result->options|= int(DRIZZLE_RESULT_SKIP_COLUMN);
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
531
532
    drizzle_state_push(result->con, drizzle_state_column_read);
533
    drizzle_state_push(result->con, drizzle_state_packet_read);
534
  }
2367.1.2 by Andrew Hutchings
Fixup drizzle_column_skip for Windows
535
  ret= drizzle_state_loop(result->con);
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
536
  result->options&= ~int(DRIZZLE_RESULT_SKIP_COLUMN);
2367.1.1 by Andrew Hutchings
Push drizzle_column_skip fixes upstream
537
  return ret;
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
538
}
539
2411.1.1 by Andrew Hutchings
Add function drizzle_column_skip_all
540
drizzle_return_t drizzle_column_skip_all(drizzle_result_st *result)
541
{
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
542
  for (uint16_t it= 1; it <= result->column_count; it++)
543
  {
544
    drizzle_return_t ret= drizzle_column_skip(result);
2411.1.1 by Andrew Hutchings
Add function drizzle_column_skip_all
545
546
    if (ret != DRIZZLE_RETURN_OK)
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
547
    {
2411.1.1 by Andrew Hutchings
Add function drizzle_column_skip_all
548
      return ret;
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
549
    }
2411.1.1 by Andrew Hutchings
Add function drizzle_column_skip_all
550
  }
551
552
  return DRIZZLE_RETURN_OK;
553
}
554
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
555
drizzle_column_st *drizzle_column_read(drizzle_result_st *result,
556
                                       drizzle_column_st *column,
557
                                       drizzle_return_t *ret_ptr)
558
{
559
  if (drizzle_state_none(result->con))
560
  {
561
    result->column= column;
562
563
    drizzle_state_push(result->con, drizzle_state_column_read);
564
    drizzle_state_push(result->con, drizzle_state_packet_read);
565
  }
566
567
  *ret_ptr= drizzle_state_loop(result->con);
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
568
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
569
  return result->column;
570
}
571
572
drizzle_return_t drizzle_column_buffer(drizzle_result_st *result)
573
{
574
  drizzle_return_t ret;
575
576
  if (result->column_buffer == NULL)
577
  {
578
    if (result->column_count == 0)
579
    {
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
580
      result->options|= int(DRIZZLE_RESULT_BUFFER_COLUMN);
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
581
      return DRIZZLE_RETURN_OK;
582
    }
583
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
584
    result->column_buffer= new (std::nothrow) drizzle_column_st[result->column_count];
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
585
    if (result->column_buffer == NULL)
586
    {
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
587
      drizzle_set_error(result->con->drizzle, __func__, "malloc");
588
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
589
      return DRIZZLE_RETURN_MEMORY;
590
    }
591
  }
592
593
  /* No while body, just keep calling to buffer columns. */
594
  while (drizzle_column_read(result,
595
                             &(result->column_buffer[result->column_current]),
596
                             &ret) != NULL && ret == DRIZZLE_RETURN_OK);
597
  if (ret == DRIZZLE_RETURN_OK)
598
  {
599
    result->column_current= 0;
600
    result->options|= DRIZZLE_RESULT_BUFFER_COLUMN;
601
  }
602
603
  return ret;
604
}
605
606
drizzle_column_st *drizzle_column_next(drizzle_result_st *result)
607
{
608
  if (result->column_current == result->column_count)
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
609
  {
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
610
    return NULL;
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
611
  }
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
612
613
  result->column_current++;
614
  return &(result->column_buffer[result->column_current - 1]);
615
}
616
617
drizzle_column_st *drizzle_column_prev(drizzle_result_st *result)
618
{
619
  if (result->column_current == 0)
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
620
  {
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
621
    return NULL;
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
622
  }
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
623
624
  result->column_current--;
625
  return &(result->column_buffer[result->column_current]);
626
}
627
628
void drizzle_column_seek(drizzle_result_st *result, uint16_t column)
629
{
630
  if (column <= result->column_count)
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
631
  {
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
632
    result->column_current= column;
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
633
  }
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
634
}
635
636
drizzle_column_st *drizzle_column_index(drizzle_result_st *result,
637
                                        uint16_t column)
638
{
639
  if (column >= result->column_count)
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
640
  {
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
641
    return NULL;
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
642
  }
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
643
644
  return &(result->column_buffer[column]);
645
}
646
647
uint16_t drizzle_column_current(drizzle_result_st *result)
648
{
649
  return result->column_current;
650
}
651
652
/*
653
 * Server definitions
654
 */
655
656
drizzle_return_t drizzle_column_write(drizzle_result_st *result,
657
                                      drizzle_column_st *column)
658
{
659
  if (drizzle_state_none(result->con))
660
  {
661
    result->column= column;
662
663
    drizzle_state_push(result->con, drizzle_state_column_write);
664
  }
665
666
  return drizzle_state_loop(result->con);
667
}
668
669
void drizzle_column_set_catalog(drizzle_column_st *column, const char *catalog)
670
{
671
  if (catalog == NULL)
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
672
  {
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
673
    column->catalog[0]= 0;
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
674
  }
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
675
  else
676
  {
677
    strncpy(column->catalog, catalog, DRIZZLE_MAX_CATALOG_SIZE);
678
    column->catalog[DRIZZLE_MAX_CATALOG_SIZE - 1]= 0;
679
  }
680
}
681
682
void drizzle_column_set_db(drizzle_column_st *column, const char *db)
683
{
684
  if (db == NULL)
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
685
  {
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
686
    column->db[0]= 0;
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
687
  }
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
688
  else
689
  {
690
    strncpy(column->db, db, DRIZZLE_MAX_DB_SIZE);
691
    column->db[DRIZZLE_MAX_DB_SIZE - 1]= 0;
692
  }
693
}
694
695
void drizzle_column_set_table(drizzle_column_st *column, const char *table)
696
{
697
  if (table == NULL)
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
698
  {
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
699
    column->table[0]= 0;
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
700
  }
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
701
  else
702
  {
703
    strncpy(column->table, table, DRIZZLE_MAX_TABLE_SIZE);
704
    column->table[DRIZZLE_MAX_TABLE_SIZE - 1]= 0;
705
  }
706
}
707
708
void drizzle_column_set_orig_table(drizzle_column_st *column,
709
                                   const char *orig_table)
710
{
711
  if (orig_table == NULL)
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
712
  {
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
713
    column->orig_table[0]= 0;
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
714
  }
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
715
  else
716
  {
717
    strncpy(column->orig_table, orig_table, DRIZZLE_MAX_TABLE_SIZE);
718
    column->orig_table[DRIZZLE_MAX_TABLE_SIZE - 1]= 0;
719
  }
720
}
721
722
void drizzle_column_set_name(drizzle_column_st *column, const char *name)
723
{
724
  if (name == NULL)
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
725
  {
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
726
    column->name[0]= 0;
2472.1.1 by Brian Aker
Formatting, and valgrind cleanups (just mismatch of free/delete).
727
  }
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
728
  else
729
  {
730
    strncpy(column->name, name, DRIZZLE_MAX_COLUMN_NAME_SIZE);
731
    column->name[DRIZZLE_MAX_COLUMN_NAME_SIZE - 1]= 0;
732
  }
733
}
734
735
void drizzle_column_set_orig_name(drizzle_column_st *column,
736
                                  const char *orig_name)
737
{
738
  if (orig_name == NULL)
739
    column->orig_name[0]= 0;
740
  else
741
  {
742
    strncpy(column->orig_name, orig_name, DRIZZLE_MAX_COLUMN_NAME_SIZE);
743
    column->orig_name[DRIZZLE_MAX_COLUMN_NAME_SIZE - 1]= 0;
744
  }
745
}
746
747
void drizzle_column_set_charset(drizzle_column_st *column,
748
                                drizzle_charset_t charset)
749
{
750
  column->charset= charset;
751
}
752
753
void drizzle_column_set_size(drizzle_column_st *column, uint32_t size)
754
{
755
  column->size= size;
756
}
757
758
void drizzle_column_set_type(drizzle_column_st *column,
759
                             drizzle_column_type_t type)
760
{
761
  column->type= type;
762
}
763
764
void drizzle_column_set_flags(drizzle_column_st *column,
1992.6.7 by Monty Taylor
Revert -Wc++-compat change.
765
                              drizzle_column_flags_t flags)
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
766
{
767
  column->flags= flags;
768
}
769
770
void drizzle_column_set_decimals(drizzle_column_st *column, uint8_t decimals)
771
{
772
  column->decimals= decimals;
773
}
774
775
void drizzle_column_set_default_value(drizzle_column_st *column,
776
                                      const uint8_t *default_value,
777
                                      size_t size)
778
{
779
  if (default_value == NULL)
780
    column->default_value[0]= 0;
781
  else
782
  {
783
    if (size < DRIZZLE_MAX_DEFAULT_VALUE_SIZE)
784
    {
785
      memcpy(column->default_value, default_value, size);
786
      column->default_value[size]= 0;
787
      column->default_value_size= size;
788
    }
789
    else
790
    {
791
      memcpy(column->default_value, default_value,
792
             DRIZZLE_MAX_DEFAULT_VALUE_SIZE - 1);
793
      column->default_value[DRIZZLE_MAX_DEFAULT_VALUE_SIZE - 1]= 0;
794
      column->default_value_size= DRIZZLE_MAX_DEFAULT_VALUE_SIZE;
795
    }
796
  }
797
}
798
799
/*
800
 * Internal state functions.
801
 */
802
803
drizzle_return_t drizzle_state_column_read(drizzle_con_st *con)
804
{
805
  drizzle_column_st *column;
806
  drizzle_column_type_drizzle_t drizzle_type;
807
808
  drizzle_log_debug(con->drizzle, "drizzle_state_column_read");
809
810
  /* Assume the entire column packet will fit in the buffer. */
811
  if (con->buffer_size < con->packet_size)
812
  {
813
    drizzle_state_push(con, drizzle_state_read);
814
    return DRIZZLE_RETURN_OK;
815
  }
816
817
  if (con->packet_size == 5 && con->buffer_ptr[0] == 254)
818
  {
819
    /* EOF packet marking end of columns. */
820
    con->result->column= NULL;
821
    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.
822
    con->status= drizzle_con_status_t(drizzle_get_byte2(con->buffer_ptr + 3));
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
823
    con->buffer_ptr+= 5;
824
    con->buffer_size-= 5;
825
826
    drizzle_state_pop(con);
827
  }
828
  else if (con->result->options & DRIZZLE_RESULT_SKIP_COLUMN)
829
  {
830
    con->buffer_ptr+= con->packet_size;
831
    con->buffer_size-= con->packet_size;
832
    con->packet_size= 0;
2411.1.1 by Andrew Hutchings
Add function drizzle_column_skip_all
833
    con->result->column_current++;
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
834
2367.1.1 by Andrew Hutchings
Push drizzle_column_skip fixes upstream
835
    drizzle_state_pop(con);
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
836
  }
837
  else
838
  {
839
    column= drizzle_column_create(con->result, con->result->column);
840
    if (column == NULL)
841
      return DRIZZLE_RETURN_MEMORY;
842
843
    con->result->column= column;
844
845
    /* These functions can only fail if they need to read data, but we know we
846
       buffered the entire packet, so ignore returns. */
847
    (void)drizzle_unpack_string(con, column->catalog, DRIZZLE_MAX_CATALOG_SIZE);
848
    (void)drizzle_unpack_string(con, column->db, DRIZZLE_MAX_DB_SIZE);
849
    (void)drizzle_unpack_string(con, column->table, DRIZZLE_MAX_TABLE_SIZE);
850
    (void)drizzle_unpack_string(con, column->orig_table,
851
                                DRIZZLE_MAX_TABLE_SIZE);
852
    (void)drizzle_unpack_string(con, column->name,
853
                                DRIZZLE_MAX_COLUMN_NAME_SIZE);
854
    (void)drizzle_unpack_string(con, column->orig_name,
855
                                DRIZZLE_MAX_COLUMN_NAME_SIZE);
856
857
    /* Skip one filler byte. */
858
    column->charset= (drizzle_charset_t)drizzle_get_byte2(con->buffer_ptr + 1);
859
    column->size= drizzle_get_byte4(con->buffer_ptr + 3);
860
861
    if (con->options & DRIZZLE_CON_MYSQL)
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
862
    {
863
      column->type= drizzle_column_type_t(con->buffer_ptr[7]);
864
    }
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
865
    else
866
    {
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
867
      drizzle_type= drizzle_column_type_drizzle_t(con->buffer_ptr[7]);
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
868
      if (drizzle_type >= DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX)
869
        drizzle_type= DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX;
870
      column->type= _column_type_drizzle_map_to[drizzle_type];
871
    }
872
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
873
    column->flags= drizzle_column_flags_t(drizzle_get_byte2(con->buffer_ptr + 8));
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
874
    if (column->type <= DRIZZLE_COLUMN_TYPE_INT24 &&
875
        column->type != DRIZZLE_COLUMN_TYPE_TIMESTAMP)
876
    {
2464.1.2 by Brian Aker
Fix compiling issues for 1.0, and cleanup header files.
877
      column->flags|= int(DRIZZLE_COLUMN_FLAGS_NUM);
1712.1.1 by Monty Taylor
Merged libdrizzle directly into tree.
878
    }
879
880
    column->decimals= con->buffer_ptr[10];
881
    /* Skip two reserved bytes. */
882
883
    con->buffer_ptr+= 13;
884
    con->buffer_size-= 13;
885
    con->packet_size-= 13;
886
887
    if (con->packet_size > 0)
888
    {
889
      drizzle_column_set_default_value(column, con->buffer_ptr,
890
                                       con->packet_size);
891
892
      con->buffer_ptr+= con->packet_size;
893
      con->buffer_size-= con->packet_size;
894
    }
895
    else
896
      column->default_value[0]= 0;
897
898
    con->result->column_current++;
899
900
    drizzle_state_pop(con);
901
  }
902
903
  return DRIZZLE_RETURN_OK;
904
}
905
906
drizzle_return_t drizzle_state_column_write(drizzle_con_st *con)
907
{
908
  uint8_t *start= con->buffer_ptr + con->buffer_size;
909
  uint8_t *ptr;
910
  drizzle_column_st *column= con->result->column;
911
912
  drizzle_log_debug(con->drizzle, "drizzle_state_column_write");
913
914
  /* Calculate max packet size. */
915
  con->packet_size= 9 + strlen(column->catalog)
916
                  + 9 + strlen(column->db)
917
                  + 9 + strlen(column->table)
918
                  + 9 + strlen(column->orig_table)
919
                  + 9 + strlen(column->name)
920
                  + 9 + strlen(column->orig_name)
921
                  + 1   /* Unused */
922
                  + 2   /* Charset */
923
                  + 4   /* Size */
924
                  + 1   /* Type */
925
                  + 2   /* Flags */
926
                  + 1   /* Decimals */
927
                  + 2   /* Unused */
928
                  + column->default_value_size;
929
930
  /* Assume the entire column packet will fit in the buffer. */
931
  if ((con->packet_size + 4) > DRIZZLE_MAX_BUFFER_SIZE)
932
  {
933
    drizzle_set_error(con->drizzle, "drizzle_state_column_write",
934
                      "buffer too small:%zu", con->packet_size + 4);
935
    return DRIZZLE_RETURN_INTERNAL_ERROR;
936
  }
937
938
  /* Flush buffer if there is not enough room. */
939
  if (((size_t)DRIZZLE_MAX_BUFFER_SIZE - (size_t)(start - con->buffer)) <
940
      con->packet_size)
941
  {
942
    drizzle_state_push(con, drizzle_state_write);
943
    return DRIZZLE_RETURN_OK;
944
  }
945
946
  /* Store packet size at the end since it may change. */
947
  ptr= start;
948
  ptr[3]= con->packet_number;
949
  con->packet_number++;
950
  ptr+= 4;
951
952
  ptr= drizzle_pack_string(column->catalog, ptr);
953
  ptr= drizzle_pack_string(column->db, ptr);
954
  ptr= drizzle_pack_string(column->table, ptr);
955
  ptr= drizzle_pack_string(column->orig_table, ptr);
956
  ptr= drizzle_pack_string(column->name, ptr);
957
  ptr= drizzle_pack_string(column->orig_name, ptr);
958
959
  /* This unused byte is set to 12 for some reason. */
960
  ptr[0]= 12;
961
  ptr++;
962
963
  drizzle_set_byte2(ptr, column->charset);
964
  ptr+= 2;
965
966
  drizzle_set_byte4(ptr, column->size);
967
  ptr+= 4;
968
969
  if (con->options & DRIZZLE_CON_MYSQL)
970
    ptr[0]= column->type;
971
  else
972
    ptr[0]= _column_type_drizzle_map_from[column->type];
973
  ptr++;
974
975
  drizzle_set_byte2(ptr, column->flags);
976
  ptr+= 2;
977
978
  ptr[0]= column->decimals;
979
  ptr++;
980
981
  memset(ptr, 0, 2);
982
  ptr+= 2;
983
984
  if (column->default_value_size > 0)
985
  {
986
    memcpy(ptr, column->default_value, column->default_value_size);
987
    ptr+= column->default_value_size;
988
  }
989
990
  con->packet_size= ((size_t)(ptr - start) - 4);
991
  con->buffer_size+= (4 + con->packet_size);
992
993
  /* Store packet size now. */
994
  drizzle_set_byte3(start, con->packet_size);
995
996
  con->result->column_current++;
997
998
  drizzle_state_pop(con);
999
1000
  return DRIZZLE_RETURN_OK;
1001
}