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

Function PAR_parse_node

src/jrd/par.cpp:1601–1654  ·  view source on GitHub ↗

Parse a BLR node.

Source from the content-addressed store, hash-verified

1599
1600// Parse a BLR node.
1601DmlNode* PAR_parse_node(thread_db* tdbb, CompilerScratch* csb)
1602{
1603 SET_TDBB(tdbb);
1604
1605 const ULONG blrOffset = csb->csb_blr_reader.getOffset();
1606 const SSHORT blrOperator = csb->csb_blr_reader.getByte();
1607
1608 if (blrOperator < 0 || blrOperator >= FB_NELEM(blr_parsers))
1609 {
1610 // NS: This error string is correct, please do not mangle it again and again.
1611 // The whole error message is "BLR syntax error: expected %s at offset %d, encountered %d"
1612 PAR_syntax_error(csb, "valid BLR code");
1613 }
1614
1615 // Dispatch on operator type.
1616
1617 switch (blrOperator)
1618 {
1619 case blr_rse:
1620 case blr_lateral_rse:
1621 case blr_rs_stream:
1622 case blr_singular:
1623 case blr_scrollable:
1624 csb->csb_blr_reader.seekBackward(1);
1625 return PAR_rse(tdbb, csb);
1626
1627 case blr_pid:
1628 case blr_pid2:
1629 case blr_procedure:
1630 case blr_procedure2:
1631 case blr_procedure3:
1632 case blr_procedure4:
1633 case blr_subproc:
1634 case blr_relation:
1635 case blr_rid:
1636 case blr_relation2:
1637 case blr_rid2:
1638 case blr_local_table_id:
1639 case blr_union:
1640 case blr_recurse:
1641 case blr_window:
1642 case blr_aggregate:
1643 csb->csb_blr_reader.seekBackward(1);
1644 return PAR_parseRecordSource(tdbb, csb);
1645 }
1646
1647 if (!blr_parsers[blrOperator])
1648 PAR_syntax_error(csb, "valid BLR code");
1649
1650 DmlNode* node = blr_parsers[blrOperator](tdbb, *tdbb->getDefaultPool(), csb, blrOperator);
1651 setNodeLineColumn(csb, node, blrOffset);
1652
1653 return node;
1654}
1655
1656
1657void PAR_syntax_error(CompilerScratch* csb, const TEXT* string)

Callers 5

PAR_blrFunction · 0.85
PAR_parseFunction · 0.85
PAR_parse_booleanFunction · 0.85
PAR_parse_valueFunction · 0.85
PAR_parse_stmtFunction · 0.85

Calls 9

SET_TDBBFunction · 0.85
PAR_syntax_errorFunction · 0.85
PAR_rseFunction · 0.85
PAR_parseRecordSourceFunction · 0.85
setNodeLineColumnFunction · 0.85
seekBackwardMethod · 0.80
getOffsetMethod · 0.45
getByteMethod · 0.45
getDefaultPoolMethod · 0.45

Tested by

no test coverage detected