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

Function par_relational

src/gpre/exp.cpp:1464–1571  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1462//
1463
1464static gpre_nod* par_relational( gpre_req* request)
1465{
1466 if (MSC_match(KW_ANY))
1467 {
1468 gpre_nod* expr = MSC_node(nod_any, 1);
1469 expr->nod_count = 0;
1470 expr->nod_arg[0] = (gpre_nod*) EXP_rse(request, 0);
1471 EXP_rse_cleanup((gpre_rse*) expr->nod_arg[0]);
1472 return expr;
1473 }
1474
1475 if (MSC_match(KW_UNIQUE))
1476 {
1477 gpre_nod* expr = MSC_node(nod_unique, 1);
1478 expr->nod_count = 0;
1479 expr->nod_arg[0] = (gpre_nod*) EXP_rse(request, 0);
1480 EXP_rse_cleanup((gpre_rse*) expr->nod_arg[0]);
1481 return expr;
1482 }
1483
1484 // That's right, three pointer dereferences to get to the reference
1485 // structure if there's a UDF. V3 bug#531. MaryAnn 12/4/89
1486
1487 gpre_nod* expr1 = par_udf(request, UDF_value, 0);
1488 ref* reference;
1489 if (expr1)
1490 reference = (ref*) (expr1->nod_arg[0]->nod_arg[0]->nod_arg[0]);
1491 else
1492 {
1493 expr1 = par_field(request);
1494 reference = (ref*) expr1->nod_arg[0];
1495 }
1496
1497 gpre_fld* field = reference->ref_field;
1498
1499 // Check for any of the binary guys
1500
1501 const bool negation = MSC_match(KW_NOT);
1502
1503 const rel_ops* relop;
1504 for (relop = relops;; relop++)
1505 {
1506 if (relop->rel_kw == KW_none)
1507 CPR_s_error("relational operator");
1508 else if (MSC_match(relop->rel_kw))
1509 break;
1510 }
1511
1512 gpre_nod* expr = NULL;
1513 gpre_nod* expr2 = NULL;
1514 switch (relop->rel_kw)
1515 {
1516 case KW_STARTING:
1517 MSC_match(KW_WITH);
1518 expr = MSC_node(relop->rel_op, relop->rel_args);
1519 break;
1520 case KW_MATCHES:
1521 expr2 = par_value(request, field);

Callers 1

par_notFunction · 0.70

Calls 9

MSC_matchFunction · 0.85
MSC_nodeFunction · 0.85
EXP_rseFunction · 0.85
EXP_rse_cleanupFunction · 0.85
CPR_s_errorFunction · 0.85
par_valueFunction · 0.85
MSC_unaryFunction · 0.85
par_udfFunction · 0.70
par_fieldFunction · 0.70

Tested by

no test coverage detected