| 715 | // |
| 716 | |
| 717 | static void asgn_from( const act* action, const ref* reference) |
| 718 | { |
| 719 | TEXT name[MAX_REF_SIZE], variable[MAX_REF_SIZE], temp[MAX_REF_SIZE]; |
| 720 | |
| 721 | for (; reference; reference = reference->ref_next) |
| 722 | { |
| 723 | const gpre_fld* field = reference->ref_field; |
| 724 | if (field->fld_array_info) |
| 725 | if (!(reference->ref_flags & REF_array_elem)) |
| 726 | { |
| 727 | printa(names[COLUMN], true, "CALL \"isc_qtoq\" USING %s, %s", |
| 728 | names[isc_blob_null_pos], gen_name(name, reference, true)); |
| 729 | gen_get_or_put_slice(action, reference, false); |
| 730 | continue; |
| 731 | } |
| 732 | |
| 733 | if (!reference->ref_source && !reference->ref_value) |
| 734 | continue; |
| 735 | gen_name(variable, reference, true); |
| 736 | const char* value; |
| 737 | if (reference->ref_source) |
| 738 | value = gen_name(temp, reference->ref_source, true); |
| 739 | else |
| 740 | value = reference->ref_value; |
| 741 | |
| 742 | if (!reference->ref_master || (reference->ref_flags & REF_literal)) |
| 743 | { |
| 744 | if (reference->ref_field->fld_dtype == dtype_date && |
| 745 | strlen(gpreGlob.sw_cob_dformat) != 0) |
| 746 | { |
| 747 | sprintf(output_buffer, "%sCALL \"rmc_dtoc\" USING %s, %s, \"%s\"\n", |
| 748 | names[COLUMN], variable, value, gpreGlob.sw_cob_dformat); |
| 749 | } |
| 750 | else |
| 751 | { |
| 752 | if (reference->ref_field->fld_dtype == dtype_sql_date && |
| 753 | strlen(gpreGlob.sw_cob_dformat) != 0) |
| 754 | { |
| 755 | sprintf(output_buffer, "%sCALL \"rmc_dtoc\" USING ISC-TEMP-QUAD, %s, \"%s\"\n", |
| 756 | names[COLUMN], value, gpreGlob.sw_cob_dformat); |
| 757 | RMC_print_buffer(output_buffer, false); |
| 758 | sprintf(output_buffer, "%sMOVE ISC-TEMP-QUAD-HIGH TO %s\n", |
| 759 | names[COLUMN], variable); |
| 760 | } |
| 761 | else |
| 762 | { |
| 763 | if (reference->ref_field->fld_dtype == dtype_sql_time && |
| 764 | strlen(gpreGlob.sw_cob_dformat) != 0) |
| 765 | { |
| 766 | sprintf(output_buffer, "%sCALL \"rmc_dtoc\" USING ISC-TEMP-QUAD, %s, \"%s\"\n", |
| 767 | names[COLUMN], value, gpreGlob.sw_cob_dformat); |
| 768 | RMC_print_buffer(output_buffer, false); |
| 769 | sprintf(output_buffer, "%sMOVE ISC-TEMP-QUAD-LOW TO %s\n", |
| 770 | names[COLUMN], variable); |
| 771 | } |
| 772 | else |
| 773 | { |
| 774 | if (reference->ref_field->fld_dtype == dtype_cstring) |
no test coverage detected