| 1476 | // |
| 1477 | |
| 1478 | static gpre_nod* implicit_any(gpre_req* request, |
| 1479 | gpre_nod* value, |
| 1480 | nod_t comparison, |
| 1481 | nod_t any_all) |
| 1482 | { |
| 1483 | gpre_nod* node; |
| 1484 | scope previous_scope; |
| 1485 | |
| 1486 | assert_IS_REQ(request); |
| 1487 | assert_IS_NOD(value); |
| 1488 | |
| 1489 | gpre_ctx* original = request->req_contexts; |
| 1490 | |
| 1491 | request->req_in_subselect++; |
| 1492 | push_scope(request, &previous_scope); |
| 1493 | |
| 1494 | if (!(original->ctx_relation || original->ctx_procedure) && request->req_map) |
| 1495 | value = post_fields(value, request->req_map); |
| 1496 | |
| 1497 | // Handle the ALL and DISTINCT options |
| 1498 | const bool distinct = (!MSC_match(KW_ALL) && MSC_match(KW_DISTINCT)); |
| 1499 | |
| 1500 | request->req_in_select_list++; |
| 1501 | gpre_nod* value2 = SQE_value(request, false, NULL, NULL); |
| 1502 | request->req_in_select_list--; |
| 1503 | |
| 1504 | gpre_nod* field_list = MSC_node(nod_list, 1); |
| 1505 | field_list->nod_arg[0] = value2; |
| 1506 | |
| 1507 | gpre_rse* selection = par_rse(request, field_list, distinct); |
| 1508 | value2 = selection->rse_fields->nod_arg[0]; |
| 1509 | |
| 1510 | gpre_rse* sub = selection->rse_aggregate; |
| 1511 | if (sub) |
| 1512 | { |
| 1513 | if (validate_references(value2, sub->rse_group_by)) |
| 1514 | PAR_error("simple column reference not allowed in aggregate context"); |
| 1515 | if (sub->rse_group_by) |
| 1516 | { |
| 1517 | node = MSC_binary(comparison, value, value2); |
| 1518 | pair(node->nod_arg[0], node->nod_arg[1]); |
| 1519 | selection->rse_boolean = merge(selection->rse_boolean, node); |
| 1520 | if (any_all == nod_ansi_all) |
| 1521 | node = MSC_node(nod_ansi_all, 1); |
| 1522 | else |
| 1523 | node = MSC_node(nod_ansi_any, 1); |
| 1524 | node->nod_count = 0; |
| 1525 | node->nod_arg[0] = (gpre_nod*) selection; |
| 1526 | } |
| 1527 | else |
| 1528 | { |
| 1529 | gpre_nod* node2 = MSC_node(nod_via, 3); |
| 1530 | node2->nod_count = 0; |
| 1531 | node2->nod_arg[0] = (gpre_nod*) selection; |
| 1532 | node2->nod_arg[2] = MSC_node(nod_null, 0); |
| 1533 | node2->nod_arg[1] = value2; |
| 1534 | node = MSC_binary(comparison, value, node2); |
| 1535 | pair(node->nod_arg[0], node->nod_arg[1]); |
no test coverage detected