MCPcopy Create free account
hub / github.com/DeusData/codebase-memory-mcp / parse_match_chain

Function parse_match_chain

src/cypher/cypher.c:1770–1792  ·  view source on GitHub ↗

Parse a chain of MATCH / OPTIONAL MATCH patterns into query. * Returns -1 on error (fills p->error). */

Source from the content-addressed store, hash-verified

1768/* Parse a chain of MATCH / OPTIONAL MATCH patterns into query.
1769 * Returns -1 on error (fills p->error). */
1770static int parse_match_chain(parser_t *p, cbm_query_t *q, int *pat_cap) {
1771 while (check(p, TOK_MATCH) || check(p, TOK_OPTIONAL)) {
1772 bool opt = false;
1773 if (check(p, TOK_OPTIONAL)) {
1774 advance(p);
1775 opt = true;
1776 }
1777 if (!expect(p, TOK_MATCH)) {
1778 break;
1779 }
1780 if (q->pattern_count >= *pat_cap) {
1781 *pat_cap *= PAIR_LEN;
1782 q->patterns = safe_realloc(q->patterns, *pat_cap * sizeof(cbm_pattern_t));
1783 q->pattern_optional = safe_realloc(q->pattern_optional, *pat_cap * sizeof(bool));
1784 }
1785 if (parse_match_pattern(p, &q->patterns[q->pattern_count]) < 0) {
1786 return CBM_NOT_FOUND;
1787 }
1788 q->pattern_optional[q->pattern_count] = opt;
1789 q->pattern_count++;
1790 }
1791 return 0;
1792}
1793
1794/* Parse post-WHERE clauses: additional MATCH, WITH, RETURN, UNION */
1795static int parse_post_where(parser_t *p, cbm_query_t *q, // NOLINT(misc-no-recursion)

Callers 2

parse_post_whereFunction · 0.85
cbm_parseFunction · 0.85

Calls 5

checkFunction · 0.85
advanceFunction · 0.85
expectFunction · 0.85
safe_reallocFunction · 0.85
parse_match_patternFunction · 0.85

Tested by

no test coverage detected