| 1623 | // |
| 1624 | |
| 1625 | static void cmp_store( gpre_req* request, gpre_nod* node) |
| 1626 | { |
| 1627 | gpre_ctx* context = (gpre_ctx*) node->nod_arg[0]; |
| 1628 | gpre_nod* list = node->nod_arg[1]; |
| 1629 | gpre_nod* ret_list = node->nod_arg[2]; |
| 1630 | |
| 1631 | // Make the store statement under the receive |
| 1632 | |
| 1633 | if (request->req_flags & REQ_sql_returning) |
| 1634 | { |
| 1635 | if (request->req_type == REQ_insert) |
| 1636 | make_send(request->req_primary, request); |
| 1637 | |
| 1638 | request->add_byte(blr_store2); |
| 1639 | } |
| 1640 | else if (request->req_type == REQ_store2) |
| 1641 | request->add_byte(blr_store2); |
| 1642 | else |
| 1643 | request->add_byte(blr_store); |
| 1644 | |
| 1645 | CME_relation(context, request); |
| 1646 | |
| 1647 | // Make an assignment list |
| 1648 | |
| 1649 | cmp_assignment_list(list, request); |
| 1650 | |
| 1651 | if (request->req_flags & REQ_sql_returning) |
| 1652 | { |
| 1653 | cmp_returning(request, ret_list); |
| 1654 | } |
| 1655 | else if (request->req_type == REQ_store2) |
| 1656 | { |
| 1657 | // whip through actions to find return list |
| 1658 | |
| 1659 | act* action; |
| 1660 | for (action = request->req_actions;; action = action->act_next) |
| 1661 | { |
| 1662 | if (action->act_type == ACT_store2) |
| 1663 | break; |
| 1664 | } |
| 1665 | request->add_byte(blr_begin); |
| 1666 | upd* update = (upd*) action->act_object; |
| 1667 | gpre_port* port = update->upd_port; |
| 1668 | make_send(port, request); |
| 1669 | cmp_assignment_list(update->upd_assignments, request); |
| 1670 | request->add_byte(blr_end); |
| 1671 | } |
| 1672 | } |
| 1673 | |
| 1674 | |
| 1675 | //____________________________________________________________ |
no test coverage detected