| 5411 | // |
| 5412 | |
| 5413 | static void into( gpre_req* request, gpre_nod* field_list, gpre_nod* var_list) |
| 5414 | { |
| 5415 | if (!var_list) |
| 5416 | PAR_error("INTO list is required"); |
| 5417 | |
| 5418 | if (!field_list || field_list->nod_count != var_list->nod_count) |
| 5419 | PAR_error("column count and number of INTO list host-variables unequal"); |
| 5420 | |
| 5421 | gpre_nod** var_ptr = var_list->nod_arg; |
| 5422 | gpre_nod** fld_ptr = field_list->nod_arg; |
| 5423 | |
| 5424 | for (gpre_nod** const end = fld_ptr + var_list->nod_count; fld_ptr < end;fld_ptr++, var_ptr++) |
| 5425 | { |
| 5426 | ref* var_ref = (ref*) *var_ptr; |
| 5427 | ref* field_ref = NULL; |
| 5428 | gpre_req* slice_req = NULL; |
| 5429 | if (((*fld_ptr)->nod_type == nod_field) || ((*fld_ptr)->nod_type == nod_array)) |
| 5430 | { |
| 5431 | field_ref = (ref*) (*fld_ptr)->nod_arg[0]; |
| 5432 | if ((*fld_ptr)->nod_count > 2) |
| 5433 | slice_req = (gpre_req*) (*fld_ptr)->nod_arg[2]; |
| 5434 | } |
| 5435 | |
| 5436 | ref* reference = NULL; |
| 5437 | gpre_fld* field; |
| 5438 | if (field_ref && slice_req && (field = field_ref->ref_field) && field->fld_array) |
| 5439 | { |
| 5440 | EXP_post_array(field_ref); |
| 5441 | |
| 5442 | // If field ref not posted yet, post it |
| 5443 | |
| 5444 | bool found = false; |
| 5445 | for (reference = request->req_references; reference; reference = reference->ref_next) |
| 5446 | { |
| 5447 | if (reference == field_ref) |
| 5448 | { |
| 5449 | found = true; |
| 5450 | break; |
| 5451 | } |
| 5452 | } |
| 5453 | if (!found) |
| 5454 | { |
| 5455 | field_ref->ref_next = request->req_references; |
| 5456 | request->req_references = field_ref; |
| 5457 | } |
| 5458 | reference = field_ref; |
| 5459 | } |
| 5460 | else |
| 5461 | reference = SQE_post_reference(request, 0, 0, *fld_ptr); |
| 5462 | var_ref->ref_friend = reference; |
| 5463 | reference->ref_null_value = var_ref->ref_null_value; |
| 5464 | } |
| 5465 | } |
| 5466 | |
| 5467 | |
| 5468 | //____________________________________________________________ |
no test coverage detected