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

Function SQE_post_reference

src/gpre/sqe.cpp:868–917  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

866//
867
868ref* SQE_post_reference(gpre_req* request, gpre_fld* field, gpre_ctx* context, gpre_nod* node)
869{
870 ref* reference;
871
872 assert_IS_REQ(request);
873 assert_IS_NOD(node);
874
875 // If the beast is already a field reference, get component parts
876
877 if (node && node->nod_type == nod_field)
878 {
879 reference = (ref*) node->nod_arg[0];
880 field = reference->ref_field;
881 context = reference->ref_context;
882 }
883
884 // See if there is already a reference to this guy. If so, return it.
885
886 for (reference = request->req_references; reference; reference = reference->ref_next)
887 {
888 if ((reference->ref_expr && compare_expr(node, reference->ref_expr)) ||
889 (!reference->ref_expr && field == reference->ref_field &&
890 context == reference->ref_context))
891 {
892 return reference;
893 }
894 }
895
896 // If there isn't a field given, make one up
897
898 if (!field)
899 {
900 field = (gpre_fld*) MSC_alloc(FLD_LEN);
901 CME_get_dtype(node, field);
902 if (field->fld_dtype && (field->fld_dtype <= dtype_any_text))
903 field->fld_flags |= FLD_text;
904 }
905
906 // No reference -- make one
907
908 reference = (ref*) MSC_alloc(REF_LEN);
909 reference->ref_context = context;
910 reference->ref_field = field;
911 reference->ref_expr = node;
912
913 reference->ref_next = request->req_references;
914 request->req_references = reference;
915
916 return reference;
917}
918
919
920//____________________________________________________________

Callers 1

intoFunction · 0.85

Calls 3

compare_exprFunction · 0.85
MSC_allocFunction · 0.85
CME_get_dtypeFunction · 0.85

Tested by

no test coverage detected