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

Function cmp_field

src/gpre/cmp.cpp:746–864  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

744//
745
746static void cmp_field( gpre_req* request, const gpre_fld* field,
747 const ref* reference)
748{
749 if (reference && reference->ref_value && (reference->ref_flags & REF_array_elem))
750 {
751 field = field->fld_array;
752 }
753
754 fb_assert(field != NULL);
755 fb_assert(field->fld_dtype);
756 fb_assert(field->fld_length);
757
758 switch (field->fld_dtype)
759 {
760 case dtype_cstring:
761 if (!(field->fld_flags & FLD_charset) && field->fld_ttype >= dsc_text_type_metadata)
762 {
763 request->add_byte(blr_cstring);
764 request->add_word(field->fld_length);
765 }
766 else
767 {
768 // 3.2j has new, tagged blr instruction for cstring
769
770 request->add_byte(blr_cstring2);
771 request->add_word(field->fld_ttype);
772 request->add_word(field->fld_length);
773 }
774 break;
775
776 case dtype_text:
777 if (!(field->fld_flags & FLD_charset) && field->fld_ttype >= dsc_text_type_metadata)
778 {
779 request->add_byte(blr_text);
780 request->add_word(field->fld_length);
781 }
782 else
783 {
784 // 3.2j has new, tagged blr instruction for text too
785
786 request->add_byte(blr_text2);
787 request->add_word(field->fld_ttype);
788 request->add_word(field->fld_length);
789 }
790 break;
791
792 case dtype_varying:
793 if (!(field->fld_flags & FLD_charset) && field->fld_ttype >= dsc_text_type_metadata)
794 {
795 request->add_byte(blr_varying);
796 request->add_word(field->fld_length);
797 }
798 else
799 {
800 // 3.2j has new, tagged blr instruction for varying also
801
802 request->add_byte(blr_varying2);
803 request->add_word(field->fld_ttype);

Callers 3

CMP_external_fieldFunction · 0.70
cmp_portFunction · 0.70
cmp_sliceFunction · 0.70

Calls 3

CPR_errorFunction · 0.85
add_byteMethod · 0.45
add_wordMethod · 0.45

Tested by

no test coverage detected