MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / into

Function into

src/gpre/sql.cpp:5413–5465  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5411//
5412
5413static 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//____________________________________________________________

Callers 6

act_deleteFunction · 0.85
act_fetchFunction · 0.85
act_insertFunction · 0.85
act_selectFunction · 0.85
act_updateFunction · 0.85
act_upsertFunction · 0.85

Calls 3

EXP_post_arrayFunction · 0.85
SQE_post_referenceFunction · 0.85
PAR_errorFunction · 0.70

Tested by

no test coverage detected