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

Function implicit_any

src/gpre/sqe.cpp:1478–1557  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1476//
1477
1478static 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]);

Callers 2

par_inFunction · 0.85
par_relationalFunction · 0.85

Calls 13

push_scopeFunction · 0.85
post_fieldsFunction · 0.85
MSC_matchFunction · 0.85
SQE_valueFunction · 0.85
MSC_nodeFunction · 0.85
par_rseFunction · 0.85
validate_referencesFunction · 0.85
MSC_binaryFunction · 0.85
EXP_rse_cleanupFunction · 0.85
pop_scopeFunction · 0.85
PAR_errorFunction · 0.70
pairFunction · 0.70

Tested by

no test coverage detected