00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00044 #include <libdrizzle/common.h>
00045
00046
00047
00048
00049
00050 static drizzle_column_type_t _column_type_drizzle_map_to[]=
00051 {
00052 DRIZZLE_COLUMN_TYPE_TINY,
00053 DRIZZLE_COLUMN_TYPE_LONG,
00054 DRIZZLE_COLUMN_TYPE_DOUBLE,
00055 DRIZZLE_COLUMN_TYPE_NULL,
00056 DRIZZLE_COLUMN_TYPE_TIMESTAMP,
00057 DRIZZLE_COLUMN_TYPE_LONGLONG,
00058 DRIZZLE_COLUMN_TYPE_DATETIME,
00059 DRIZZLE_COLUMN_TYPE_NEWDATE,
00060 DRIZZLE_COLUMN_TYPE_VARCHAR,
00061 DRIZZLE_COLUMN_TYPE_NEWDECIMAL,
00062 DRIZZLE_COLUMN_TYPE_ENUM,
00063 DRIZZLE_COLUMN_TYPE_BLOB
00064 };
00065
00066 static drizzle_column_type_drizzle_t _column_type_drizzle_map_from[]=
00067 {
00068 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00069 DRIZZLE_COLUMN_TYPE_DRIZZLE_BOOLEAN,
00070 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00071 DRIZZLE_COLUMN_TYPE_DRIZZLE_LONG,
00072 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00073 DRIZZLE_COLUMN_TYPE_DRIZZLE_DOUBLE,
00074 DRIZZLE_COLUMN_TYPE_DRIZZLE_NULL,
00075 DRIZZLE_COLUMN_TYPE_DRIZZLE_TIMESTAMP,
00076 DRIZZLE_COLUMN_TYPE_DRIZZLE_LONGLONG,
00077 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00078
00079 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00080 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00081 DRIZZLE_COLUMN_TYPE_DRIZZLE_DATETIME,
00082 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00083 DRIZZLE_COLUMN_TYPE_DRIZZLE_DATE,
00084 DRIZZLE_COLUMN_TYPE_DRIZZLE_VARCHAR,
00085 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00086 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00087 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00088 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00089
00090 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00091 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00092 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00093 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00094 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00095 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00096 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00097 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00098 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00099 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00100
00101 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00102 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00103 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00104 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00105 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00106 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00107 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00108 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00109 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00110 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00111
00112 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00113 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00114 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00115 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00116 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00117 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00118 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00119 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00120 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00121 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00122
00123 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00124 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00125 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00126 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00127 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00128 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00129 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00130 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00131 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00132 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00133
00134 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00135 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00136 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00137 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00138 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00139 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00140 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00141 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00142 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00143 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00144
00145 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00146 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00147 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00148 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00149 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00150 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00151 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00152 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00153 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00154 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00155
00156 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00157 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00158 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00159 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00160 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00161 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00162 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00163 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00164 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00165 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00166
00167 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00168 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00169 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00170 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00171 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00172 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00173 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00174 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00175 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00176 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00177
00178 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00179 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00180 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00181 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00182 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00183 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00184 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00185 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00186 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00187 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00188
00189 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00190 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00191 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00192 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00193 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00194 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00195 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00196 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00197 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00198 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00199
00200 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00201 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00202 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00203 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00204 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00205 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00206 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00207 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00208 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00209 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00210
00211 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00212 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00213 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00214 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00215 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00216 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00217 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00218 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00219 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00220 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00221
00222 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00223 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00224 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00225 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00226 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00227 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00228 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00229 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00230 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00231 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00232
00233 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00234 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00235 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00236 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00237 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00238 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00239 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00240 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00241 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00242 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00243
00244 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00245 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00246 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00247 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00248 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00249 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00250 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00251 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00252 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00253 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00254
00255 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00256 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00257 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00258 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00259 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00260 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00261 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00262 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00263 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00264 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00265
00266 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00267 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00268 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00269 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00270 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00271 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00272 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00273 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00274 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00275 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00276
00277 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00278 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00279 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00280 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00281 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00282 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00283 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00284 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00285 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00286 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00287
00288 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00289 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00290 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00291 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00292 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00293 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00294 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00295 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00296 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00297 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00298
00299 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00300 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00301 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00302 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00303 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00304 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00305 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00306 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00307 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00308 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00309
00310 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00311 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00312 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00313 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00314 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00315 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00316 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00317 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00318 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00319 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00320
00321 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00322 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00323 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00324 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00325 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00326 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00327 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00328 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00329 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00330 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00331
00332 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00333 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00334 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00335 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00336 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00337 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00338 DRIZZLE_COLUMN_TYPE_DRIZZLE_NEWDECIMAL,
00339 DRIZZLE_COLUMN_TYPE_DRIZZLE_ENUM,
00340 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00341 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00342
00343 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00344 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00345 DRIZZLE_COLUMN_TYPE_DRIZZLE_BLOB,
00346 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00347 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX,
00348 DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX
00349 };
00350
00351
00352
00353
00354
00355 drizzle_column_st *drizzle_column_create(drizzle_result_st *result,
00356 drizzle_column_st *column)
00357 {
00358 if (result == NULL)
00359 {
00360 return NULL;
00361 }
00362
00363 if (column == NULL)
00364 {
00365 column= new (std::nothrow) (drizzle_column_st);
00366 if (column == NULL)
00367 {
00368 drizzle_set_error(result->con->drizzle, __func__, "Failed to allocate.");
00369 return NULL;
00370 }
00371
00372 column->result = result;
00373
00374 column->prev = NULL;
00375 column->options= DRIZZLE_COLUMN_ALLOCATED;
00376 column->catalog[0] = '\0';
00377 column->db[0] = '\0';
00378 column->table[0] = '\0';
00379 column->orig_table[0] = '\0';
00380 column->name[0] = '\0';
00381 column->orig_name[0] = '\0';
00382 column->charset = 0;
00383 column->size = 0;
00384 column->max_size = 0;
00385 column->type = drizzle_column_type_t();
00386 column->flags = drizzle_column_flags_t();
00387 column->decimals = 0;
00388
00389 column->default_value_size = 0;
00390
00391 }
00392 else
00393 {
00394 column->result = result;
00395
00396 column->prev = NULL;
00397 column->options= drizzle_column_options_t();
00398 column->catalog[0] = '\0';
00399 column->db[0] = '\0';
00400 column->table[0] = '\0';
00401 column->orig_table[0] = '\0';
00402 column->name[0] = '\0';
00403 column->orig_name[0] = '\0';
00404 column->charset = 0;
00405 column->size = 0;
00406 column->max_size = 0;
00407 column->type = drizzle_column_type_t();
00408 column->flags = drizzle_column_flags_t();
00409 column->decimals = 0;
00410
00411 column->default_value_size = 0;
00412 }
00413
00414 column->result= result;
00415
00416 if (result->column_list)
00417 result->column_list->prev= column;
00418
00419 column->next= result->column_list;
00420 result->column_list= column;
00421
00422 return column;
00423 }
00424
00425 void drizzle_column_free(drizzle_column_st *column)
00426 {
00427 if (column == NULL)
00428 {
00429 return;
00430 }
00431
00432 if (column->result->column_list == column)
00433 column->result->column_list= column->next;
00434
00435 if (column->prev)
00436 column->prev->next= column->next;
00437
00438 if (column->next)
00439 column->next->prev= column->prev;
00440
00441 if (column->options & DRIZZLE_COLUMN_ALLOCATED)
00442 {
00443 delete column;
00444 }
00445 }
00446
00447 drizzle_result_st *drizzle_column_drizzle_result(drizzle_column_st *column)
00448 {
00449 if (column == NULL)
00450 {
00451 return NULL;
00452 }
00453
00454 return column->result;
00455 }
00456
00457 const char *drizzle_column_catalog(drizzle_column_st *column)
00458 {
00459 if (column == NULL)
00460 {
00461 return NULL;
00462 }
00463
00464 return column->catalog;
00465 }
00466
00467 const char *drizzle_column_db(drizzle_column_st *column)
00468 {
00469 if (column == NULL)
00470 {
00471 return NULL;
00472 }
00473
00474 return column->db;
00475 }
00476
00477 const char *drizzle_column_table(drizzle_column_st *column)
00478 {
00479 if (column == NULL)
00480 {
00481 return NULL;
00482 }
00483
00484 return column->table;
00485 }
00486
00487 const char *drizzle_column_orig_table(drizzle_column_st *column)
00488 {
00489 if (column == NULL)
00490 {
00491 return NULL;
00492 }
00493
00494 return column->orig_table;
00495 }
00496
00497 const char *drizzle_column_name(drizzle_column_st *column)
00498 {
00499 if (column == NULL)
00500 {
00501 return NULL;
00502 }
00503
00504 return column->name;
00505 }
00506
00507 const char *drizzle_column_orig_name(drizzle_column_st *column)
00508 {
00509 if (column == NULL)
00510 {
00511 return NULL;
00512 }
00513
00514 return column->orig_name;
00515 }
00516
00517 drizzle_charset_t drizzle_column_charset(drizzle_column_st *column)
00518 {
00519 if (column == NULL)
00520 {
00521 return drizzle_charset_t();
00522 }
00523
00524 return column->charset;
00525 }
00526
00527 uint32_t drizzle_column_size(drizzle_column_st *column)
00528 {
00529 if (column == NULL)
00530 {
00531 return 0;
00532 }
00533
00534 return column->size;
00535 }
00536
00537 size_t drizzle_column_max_size(drizzle_column_st *column)
00538 {
00539 if (column == NULL)
00540 {
00541 return 0;
00542 }
00543
00544 return column->max_size;
00545 }
00546
00547 void drizzle_column_set_max_size(drizzle_column_st *column, size_t size)
00548 {
00549 if (column == NULL)
00550 {
00551 return;
00552 }
00553
00554 column->max_size= size;
00555 }
00556
00557 drizzle_column_type_t drizzle_column_type(drizzle_column_st *column)
00558 {
00559 if (column == NULL)
00560 {
00561 return drizzle_column_type_t();
00562 }
00563
00564 return column->type;
00565 }
00566
00567 drizzle_column_type_drizzle_t
00568 drizzle_column_type_drizzle(drizzle_column_st *column)
00569 {
00570 if (column == NULL)
00571 {
00572 return drizzle_column_type_drizzle_t();
00573 }
00574
00575 return _column_type_drizzle_map_from[column->type];
00576 }
00577
00578 drizzle_column_flags_t drizzle_column_flags(drizzle_column_st *column)
00579 {
00580 if (column == NULL)
00581 {
00582 return drizzle_column_flags_t();
00583 }
00584
00585 return drizzle_column_flags_t(column->flags);
00586 }
00587
00588 uint8_t drizzle_column_decimals(drizzle_column_st *column)
00589 {
00590 if (column == NULL)
00591 {
00592 return 0;
00593 }
00594
00595 return column->decimals;
00596 }
00597
00598 const uint8_t *drizzle_column_default_value(drizzle_column_st *column,
00599 size_t *size)
00600 {
00601 if (column == NULL)
00602 {
00603 return NULL;
00604 }
00605
00606 *size= column->default_value_size;
00607 return column->default_value;
00608 }
00609
00610
00611
00612
00613
00614 drizzle_return_t drizzle_column_skip(drizzle_result_st *result)
00615 {
00616 if (result == NULL)
00617 {
00618 return DRIZZLE_RETURN_INVALID_ARGUMENT;
00619 }
00620
00621 drizzle_return_t ret;
00622 if (drizzle_state_none(result->con))
00623 {
00624 result->options|= int(DRIZZLE_RESULT_SKIP_COLUMN);
00625
00626 drizzle_state_push(result->con, drizzle_state_column_read);
00627 drizzle_state_push(result->con, drizzle_state_packet_read);
00628 }
00629 ret= drizzle_state_loop(result->con);
00630 result->options&= ~int(DRIZZLE_RESULT_SKIP_COLUMN);
00631 return ret;
00632 }
00633
00634 drizzle_return_t drizzle_column_skip_all(drizzle_result_st *result)
00635 {
00636 if (result == NULL)
00637 {
00638 return DRIZZLE_RETURN_INVALID_ARGUMENT;
00639 }
00640
00641 for (uint16_t it= 1; it <= result->column_count; it++)
00642 {
00643 drizzle_return_t ret= drizzle_column_skip(result);
00644
00645 if (ret != DRIZZLE_RETURN_OK)
00646 {
00647 return ret;
00648 }
00649 }
00650
00651 return DRIZZLE_RETURN_OK;
00652 }
00653
00654 drizzle_column_st *drizzle_column_read(drizzle_result_st *result,
00655 drizzle_column_st *column,
00656 drizzle_return_t *ret_ptr)
00657 {
00658 drizzle_return_t unused_ret;
00659 if (ret_ptr == NULL)
00660 {
00661 ret_ptr= &unused_ret;
00662 }
00663
00664 if (result == NULL)
00665 {
00666 return NULL;
00667 }
00668
00669 if (drizzle_state_none(result->con))
00670 {
00671 result->column= column;
00672
00673 drizzle_state_push(result->con, drizzle_state_column_read);
00674 drizzle_state_push(result->con, drizzle_state_packet_read);
00675 }
00676
00677 *ret_ptr= drizzle_state_loop(result->con);
00678
00679 return result->column;
00680 }
00681
00682 drizzle_return_t drizzle_column_buffer(drizzle_result_st *result)
00683 {
00684 if (result == NULL)
00685 {
00686 return DRIZZLE_RETURN_INVALID_ARGUMENT;
00687 }
00688
00689 drizzle_return_t ret;
00690
00691 if (result->column_buffer == NULL)
00692 {
00693 if (result->column_count == 0)
00694 {
00695 result->options|= int(DRIZZLE_RESULT_BUFFER_COLUMN);
00696 return DRIZZLE_RETURN_OK;
00697 }
00698
00699 result->column_buffer= new (std::nothrow) drizzle_column_st[result->column_count];
00700 if (result->column_buffer == NULL)
00701 {
00702 drizzle_set_error(result->con->drizzle, __func__, "Failed to allocate.");
00703
00704 return DRIZZLE_RETURN_MEMORY;
00705 }
00706 }
00707
00708
00709 while (drizzle_column_read(result,
00710 &(result->column_buffer[result->column_current]),
00711 &ret) != NULL && ret == DRIZZLE_RETURN_OK);
00712 if (ret == DRIZZLE_RETURN_OK)
00713 {
00714 result->column_current= 0;
00715 result->options|= DRIZZLE_RESULT_BUFFER_COLUMN;
00716 }
00717
00718 return ret;
00719 }
00720
00721 drizzle_column_st *drizzle_column_next(drizzle_result_st *result)
00722 {
00723 if (result == NULL)
00724 {
00725 return NULL;
00726 }
00727
00728 if (result->column_current == result->column_count)
00729 {
00730 return NULL;
00731 }
00732
00733 result->column_current++;
00734 return &(result->column_buffer[result->column_current - 1]);
00735 }
00736
00737 drizzle_column_st *drizzle_column_prev(drizzle_result_st *result)
00738 {
00739 if (result == NULL)
00740 {
00741 return NULL;
00742 }
00743
00744 if (result->column_current == 0)
00745 {
00746 return NULL;
00747 }
00748
00749 result->column_current--;
00750 return &(result->column_buffer[result->column_current]);
00751 }
00752
00753 void drizzle_column_seek(drizzle_result_st *result, uint16_t column)
00754 {
00755 if (result == NULL)
00756 {
00757 return;
00758 }
00759
00760 if (column <= result->column_count)
00761 {
00762 result->column_current= column;
00763 }
00764 }
00765
00766 drizzle_column_st *drizzle_column_index(drizzle_result_st *result,
00767 uint16_t column)
00768 {
00769 if (result == NULL)
00770 {
00771 return NULL;
00772 }
00773
00774 if (column >= result->column_count)
00775 {
00776 return NULL;
00777 }
00778
00779 return &(result->column_buffer[column]);
00780 }
00781
00782 uint16_t drizzle_column_current(drizzle_result_st *result)
00783 {
00784 if (result == NULL)
00785 {
00786 return 0;
00787 }
00788
00789 return result->column_current;
00790 }
00791
00792
00793
00794
00795
00796 drizzle_return_t drizzle_column_write(drizzle_result_st *result,
00797 drizzle_column_st *column)
00798 {
00799 if (result == NULL)
00800 {
00801 return DRIZZLE_RETURN_INVALID_ARGUMENT;
00802 }
00803
00804 if (drizzle_state_none(result->con))
00805 {
00806 result->column= column;
00807
00808 drizzle_state_push(result->con, drizzle_state_column_write);
00809 }
00810
00811 return drizzle_state_loop(result->con);
00812 }
00813
00814 void drizzle_column_set_catalog(drizzle_column_st *column, const char *catalog)
00815 {
00816 if (column == NULL)
00817 {
00818 return;
00819 }
00820
00821 if (catalog == NULL)
00822 {
00823 column->catalog[0]= 0;
00824 }
00825 else
00826 {
00827 strncpy(column->catalog, catalog, DRIZZLE_MAX_CATALOG_SIZE);
00828 column->catalog[DRIZZLE_MAX_CATALOG_SIZE - 1]= 0;
00829 }
00830 }
00831
00832 void drizzle_column_set_db(drizzle_column_st *column, const char *db)
00833 {
00834 if (column == NULL)
00835 {
00836 return;
00837 }
00838
00839 if (db == NULL)
00840 {
00841 column->db[0]= 0;
00842 }
00843 else
00844 {
00845 strncpy(column->db, db, DRIZZLE_MAX_DB_SIZE);
00846 column->db[DRIZZLE_MAX_DB_SIZE - 1]= 0;
00847 }
00848 }
00849
00850 void drizzle_column_set_table(drizzle_column_st *column, const char *table)
00851 {
00852 if (column == NULL)
00853 {
00854 return;
00855 }
00856
00857 if (table == NULL)
00858 {
00859 column->table[0]= 0;
00860 }
00861 else
00862 {
00863 strncpy(column->table, table, DRIZZLE_MAX_TABLE_SIZE);
00864 column->table[DRIZZLE_MAX_TABLE_SIZE - 1]= 0;
00865 }
00866 }
00867
00868 void drizzle_column_set_orig_table(drizzle_column_st *column,
00869 const char *orig_table)
00870 {
00871 if (column == NULL)
00872 {
00873 return;
00874 }
00875
00876 if (orig_table == NULL)
00877 {
00878 column->orig_table[0]= 0;
00879 }
00880 else
00881 {
00882 strncpy(column->orig_table, orig_table, DRIZZLE_MAX_TABLE_SIZE);
00883 column->orig_table[DRIZZLE_MAX_TABLE_SIZE - 1]= 0;
00884 }
00885 }
00886
00887 void drizzle_column_set_name(drizzle_column_st *column, const char *name)
00888 {
00889 if (column == NULL)
00890 {
00891 return;
00892 }
00893
00894 if (name == NULL)
00895 {
00896 column->name[0]= 0;
00897 }
00898 else
00899 {
00900 strncpy(column->name, name, DRIZZLE_MAX_COLUMN_NAME_SIZE);
00901 column->name[DRIZZLE_MAX_COLUMN_NAME_SIZE - 1]= 0;
00902 }
00903 }
00904
00905 void drizzle_column_set_orig_name(drizzle_column_st *column,
00906 const char *orig_name)
00907 {
00908 if (orig_name == NULL)
00909 column->orig_name[0]= 0;
00910 else
00911 {
00912 strncpy(column->orig_name, orig_name, DRIZZLE_MAX_COLUMN_NAME_SIZE);
00913 column->orig_name[DRIZZLE_MAX_COLUMN_NAME_SIZE - 1]= 0;
00914 }
00915 }
00916
00917 void drizzle_column_set_charset(drizzle_column_st *column,
00918 drizzle_charset_t charset)
00919 {
00920 if (column == NULL)
00921 {
00922 return;
00923 }
00924
00925 column->charset= charset;
00926 }
00927
00928 void drizzle_column_set_size(drizzle_column_st *column, uint32_t size)
00929 {
00930 if (column == NULL)
00931 {
00932 return;
00933 }
00934
00935 column->size= size;
00936 }
00937
00938 void drizzle_column_set_type(drizzle_column_st *column,
00939 drizzle_column_type_t type)
00940 {
00941 if (column == NULL)
00942 {
00943 return;
00944 }
00945
00946 column->type= type;
00947 }
00948
00949 void drizzle_column_set_flags(drizzle_column_st *column,
00950 drizzle_column_flags_t flags)
00951 {
00952 if (column == NULL)
00953 {
00954 return;
00955 }
00956
00957 column->flags= flags;
00958 }
00959
00960 void drizzle_column_set_decimals(drizzle_column_st *column, uint8_t decimals)
00961 {
00962 if (column == NULL)
00963 {
00964 return;
00965 }
00966
00967 column->decimals= decimals;
00968 }
00969
00970 void drizzle_column_set_default_value(drizzle_column_st *column,
00971 const uint8_t *default_value,
00972 size_t size)
00973 {
00974 if (column == NULL)
00975 {
00976 return;
00977 }
00978
00979 if (default_value == NULL)
00980 {
00981 column->default_value[0]= 0;
00982 }
00983 else
00984 {
00985 if (size < DRIZZLE_MAX_DEFAULT_VALUE_SIZE)
00986 {
00987 memcpy(column->default_value, default_value, size);
00988 column->default_value[size]= 0;
00989 column->default_value_size= size;
00990 }
00991 else
00992 {
00993 memcpy(column->default_value, default_value,
00994 DRIZZLE_MAX_DEFAULT_VALUE_SIZE - 1);
00995 column->default_value[DRIZZLE_MAX_DEFAULT_VALUE_SIZE - 1]= 0;
00996 column->default_value_size= DRIZZLE_MAX_DEFAULT_VALUE_SIZE;
00997 }
00998 }
00999 }
01000
01001
01002
01003
01004
01005 drizzle_return_t drizzle_state_column_read(drizzle_con_st *con)
01006 {
01007 if (con == NULL)
01008 {
01009 return DRIZZLE_RETURN_INVALID_ARGUMENT;
01010 }
01011
01012 drizzle_column_st *column;
01013 drizzle_column_type_drizzle_t drizzle_type;
01014
01015 drizzle_log_debug(con->drizzle, "drizzle_state_column_read");
01016
01017
01018 if (con->buffer_size < con->packet_size)
01019 {
01020 drizzle_state_push(con, drizzle_state_read);
01021 return DRIZZLE_RETURN_OK;
01022 }
01023
01024 if (con->packet_size == 5 && con->buffer_ptr[0] == 254)
01025 {
01026
01027 con->result->column= NULL;
01028 con->result->warning_count= drizzle_get_byte2(con->buffer_ptr + 1);
01029 con->status= drizzle_con_status_t(drizzle_get_byte2(con->buffer_ptr + 3));
01030 con->buffer_ptr+= 5;
01031 con->buffer_size-= 5;
01032
01033 drizzle_state_pop(con);
01034 }
01035 else if (con->result->options & DRIZZLE_RESULT_SKIP_COLUMN)
01036 {
01037 con->buffer_ptr+= con->packet_size;
01038 con->buffer_size-= con->packet_size;
01039 con->packet_size= 0;
01040 con->result->column_current++;
01041
01042 drizzle_state_pop(con);
01043 }
01044 else
01045 {
01046 column= drizzle_column_create(con->result, con->result->column);
01047 if (column == NULL)
01048 return DRIZZLE_RETURN_MEMORY;
01049
01050 con->result->column= column;
01051
01052
01053
01054 (void)drizzle_unpack_string(con, column->catalog, DRIZZLE_MAX_CATALOG_SIZE);
01055 (void)drizzle_unpack_string(con, column->db, DRIZZLE_MAX_DB_SIZE);
01056 (void)drizzle_unpack_string(con, column->table, DRIZZLE_MAX_TABLE_SIZE);
01057 (void)drizzle_unpack_string(con, column->orig_table,
01058 DRIZZLE_MAX_TABLE_SIZE);
01059 (void)drizzle_unpack_string(con, column->name,
01060 DRIZZLE_MAX_COLUMN_NAME_SIZE);
01061 (void)drizzle_unpack_string(con, column->orig_name,
01062 DRIZZLE_MAX_COLUMN_NAME_SIZE);
01063
01064
01065 column->charset= (drizzle_charset_t)drizzle_get_byte2(con->buffer_ptr + 1);
01066 column->size= drizzle_get_byte4(con->buffer_ptr + 3);
01067
01068 if (con->options & DRIZZLE_CON_MYSQL)
01069 {
01070 column->type= drizzle_column_type_t(con->buffer_ptr[7]);
01071 }
01072 else
01073 {
01074 drizzle_type= drizzle_column_type_drizzle_t(con->buffer_ptr[7]);
01075 if (drizzle_type >= DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX)
01076 drizzle_type= DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX;
01077 column->type= _column_type_drizzle_map_to[drizzle_type];
01078 }
01079
01080 column->flags= drizzle_column_flags_t(drizzle_get_byte2(con->buffer_ptr + 8));
01081 if (column->type <= DRIZZLE_COLUMN_TYPE_INT24 &&
01082 column->type != DRIZZLE_COLUMN_TYPE_TIMESTAMP)
01083 {
01084 column->flags|= int(DRIZZLE_COLUMN_FLAGS_NUM);
01085 }
01086
01087 column->decimals= con->buffer_ptr[10];
01088
01089
01090 con->buffer_ptr+= 13;
01091 con->buffer_size-= 13;
01092 con->packet_size-= 13;
01093
01094 if (con->packet_size > 0)
01095 {
01096 drizzle_column_set_default_value(column, con->buffer_ptr,
01097 con->packet_size);
01098
01099 con->buffer_ptr+= con->packet_size;
01100 con->buffer_size-= con->packet_size;
01101 }
01102 else
01103 column->default_value[0]= 0;
01104
01105 con->result->column_current++;
01106
01107 drizzle_state_pop(con);
01108 }
01109
01110 return DRIZZLE_RETURN_OK;
01111 }
01112
01113 drizzle_return_t drizzle_state_column_write(drizzle_con_st *con)
01114 {
01115 if (con == NULL)
01116 {
01117 return DRIZZLE_RETURN_INVALID_ARGUMENT;
01118 }
01119
01120 uint8_t *start= con->buffer_ptr + con->buffer_size;
01121 uint8_t *ptr;
01122 drizzle_column_st *column= con->result->column;
01123
01124 drizzle_log_debug(con->drizzle, "drizzle_state_column_write");
01125
01126
01127 con->packet_size= 9 + strlen(column->catalog)
01128 + 9 + strlen(column->db)
01129 + 9 + strlen(column->table)
01130 + 9 + strlen(column->orig_table)
01131 + 9 + strlen(column->name)
01132 + 9 + strlen(column->orig_name)
01133 + 1
01134 + 2
01135 + 4
01136 + 1
01137 + 2
01138 + 1
01139 + 2
01140 + column->default_value_size;
01141
01142
01143 if ((con->packet_size + 4) > DRIZZLE_MAX_BUFFER_SIZE)
01144 {
01145 drizzle_set_error(con->drizzle, "drizzle_state_column_write",
01146 "buffer too small:%zu", con->packet_size + 4);
01147 return DRIZZLE_RETURN_INTERNAL_ERROR;
01148 }
01149
01150
01151 if (((size_t)DRIZZLE_MAX_BUFFER_SIZE - (size_t)(start - con->buffer)) <
01152 con->packet_size)
01153 {
01154 drizzle_state_push(con, drizzle_state_write);
01155 return DRIZZLE_RETURN_OK;
01156 }
01157
01158
01159 ptr= start;
01160 ptr[3]= con->packet_number;
01161 con->packet_number++;
01162 ptr+= 4;
01163
01164 ptr= drizzle_pack_string(column->catalog, ptr);
01165 ptr= drizzle_pack_string(column->db, ptr);
01166 ptr= drizzle_pack_string(column->table, ptr);
01167 ptr= drizzle_pack_string(column->orig_table, ptr);
01168 ptr= drizzle_pack_string(column->name, ptr);
01169 ptr= drizzle_pack_string(column->orig_name, ptr);
01170
01171
01172 ptr[0]= 12;
01173 ptr++;
01174
01175 drizzle_set_byte2(ptr, column->charset);
01176 ptr+= 2;
01177
01178 drizzle_set_byte4(ptr, column->size);
01179 ptr+= 4;
01180
01181 if (con->options & DRIZZLE_CON_MYSQL)
01182 {
01183 ptr[0]= column->type;
01184 }
01185 else
01186 {
01187 ptr[0]= _column_type_drizzle_map_from[column->type];
01188 }
01189 ptr++;
01190
01191 drizzle_set_byte2(ptr, column->flags);
01192 ptr+= 2;
01193
01194 ptr[0]= column->decimals;
01195 ptr++;
01196
01197 memset(ptr, 0, 2);
01198 ptr+= 2;
01199
01200 if (column->default_value_size > 0)
01201 {
01202 memcpy(ptr, column->default_value, column->default_value_size);
01203 ptr+= column->default_value_size;
01204 }
01205
01206 con->packet_size= ((size_t)(ptr - start) - 4);
01207 con->buffer_size+= (4 + con->packet_size);
01208
01209
01210 drizzle_set_byte3(start, con->packet_size);
01211
01212 con->result->column_current++;
01213
01214 drizzle_state_pop(con);
01215
01216 return DRIZZLE_RETURN_OK;
01217 }