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

Function asgn_from

src/gpre/obj_cxx.cpp:559–638  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

557//
558
559static void asgn_from( const act* action, ref* reference, int column)
560{
561 TEXT name[MAX_REF_SIZE], variable[MAX_REF_SIZE], temp[MAX_REF_SIZE];
562
563 for (; reference; reference = reference->ref_next)
564 {
565 bool slice_flag = false;
566 const gpre_fld* field = reference->ref_field;
567 if (field->fld_array_info)
568 {
569 act* slice_action;
570 ref* source = reference->ref_friend;
571 if (source && (slice_action = (act*) source->ref_slice) && slice_action->act_object)
572 {
573 slice_flag = true;
574 slice_action->act_type = ACT_put_slice;
575 gen_slice(slice_action, 0, column);
576 }
577 else if (!(reference->ref_flags & REF_array_elem))
578 {
579 printa(column, "%s = fbBlobNull;", gen_name(name, reference, true));
580 gen_get_or_put_slice(action, reference, false, column);
581 continue;
582 }
583 }
584 if (!reference->ref_source && !reference->ref_value && !slice_flag)
585 continue;
586 align(column);
587 gen_name(variable, reference, true);
588 const TEXT* value;
589 if (slice_flag)
590 value = gen_name(temp, reference->ref_friend, true);
591 else if (reference->ref_source)
592 value = gen_name(temp, reference->ref_source, true);
593 else
594 value = reference->ref_value;
595
596 if (!slice_flag && reference->ref_value && (reference->ref_flags & REF_array_elem))
597 {
598 field = field->fld_array;
599 }
600 if (field && field->fld_dtype <= dtype_cstring)
601 {
602 if (field->fld_sub_type == 1)
603 if (field->fld_length == 1)
604 fprintf(gpreGlob.out_file, "%s = %s;", variable, value);
605 else
606 fprintf(gpreGlob.out_file, "isc_ftof (%s, sizeof(%s), %s, %d);", value,
607 value, variable, field->fld_length);
608 else if (field->fld_flags & FLD_dbkey)
609 fprintf(gpreGlob.out_file, "isc_ftof (%s, %d, %s, %d);", value,
610 field->fld_length, variable, field->fld_length);
611 else if (gpreGlob.sw_cstring)
612 fprintf(gpreGlob.out_file, isLangCpp(gpreGlob.sw_language) ?
613 "isc_vtov ((const char*) %s, (char*) %s, %d);" :
614 "isc_vtov ((char*) %s, (char*) %s, %d);",
615 value, variable, field->fld_length);
616 else if (reference->ref_source)

Callers 3

gen_procedureFunction · 0.70
gen_s_startFunction · 0.70
gen_updateFunction · 0.70

Calls 6

isLangCppFunction · 0.85
gen_sliceFunction · 0.70
printaFunction · 0.70
gen_nameFunction · 0.70
gen_get_or_put_sliceFunction · 0.70
alignFunction · 0.70

Tested by

no test coverage detected