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

Function cmp_loop

src/gpre/cmp.cpp:999–1094  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

997//
998
999static void cmp_loop( gpre_req* request)
1000{
1001 gpre_nod* req_node = request->req_node;
1002 gpre_rse* selection = request->req_rse;
1003
1004 gpre_port* primary = request->req_primary;
1005 make_send(primary, request);
1006 request->add_byte(blr_begin);
1007 gpre_nod* counter = MSC_node(nod_value, 1);
1008 for (ref* reference = primary->por_references; reference; reference = reference->ref_next)
1009 {
1010 if (reference->ref_field == count_field)
1011 counter->nod_arg[0] = (gpre_nod*) reference;
1012 }
1013
1014 request->add_byte(blr_assignment);
1015 CME_expr(lit0, request);
1016 CME_expr(counter, request);
1017
1018 gpre_ctx* for_context = selection->rse_context[0];
1019 gpre_ctx* update_context = request->req_update;
1020
1021 request->add_byte(blr_for);
1022 CME_rse(selection, request);
1023 request->add_byte(blr_begin);
1024
1025 const bool isReturning = request->req_flags & REQ_sql_returning;
1026 gpre_nod* node = (req_node->nod_type == nod_list) ? req_node->nod_arg[0] : req_node;
1027
1028 switch (node->nod_type)
1029 {
1030 case nod_modify:
1031 {
1032 const int blr_op = isReturning ? blr_modify2 : blr_modify;
1033 request->add_byte(blr_op);
1034 request->add_byte(for_context->ctx_internal);
1035 request->add_byte(update_context->ctx_internal);
1036 cmp_assignment_list(node->nod_arg[0], request);
1037 if (isReturning)
1038 cmp_returning(request, node->nod_arg[1]);
1039 }
1040 break;
1041 case nod_store:
1042 cmp_store(request, node);
1043 break;
1044 case nod_erase:
1045 if (isReturning)
1046 {
1047 request->add_byte(blr_begin);
1048 cmp_returning(request, node->nod_arg[0]);
1049 request->add_byte(blr_erase);
1050 request->add_byte(for_context->ctx_internal);
1051 request->add_byte(blr_end);
1052 }
1053 else
1054 {
1055 request->add_byte(blr_erase);
1056 request->add_byte(for_context->ctx_internal);

Callers 1

cmp_blrFunction · 0.85

Calls 8

make_sendFunction · 0.85
MSC_nodeFunction · 0.85
CME_exprFunction · 0.85
cmp_assignment_listFunction · 0.85
cmp_returningFunction · 0.85
cmp_storeFunction · 0.85
CME_rseFunction · 0.70
add_byteMethod · 0.45

Tested by

no test coverage detected