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

Function parse_match_chain

src/cypher/cypher.c:1929–1951  ·  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

1927/* Parse a chain of MATCH / OPTIONAL MATCH patterns into query.
1928 * Returns -1 on error (fills p->error). */
1929static int parse_match_chain(parser_t *p, cbm_query_t *q, int *pat_cap) {
1930 while (check(p, TOK_MATCH) || check(p, TOK_OPTIONAL)) {
1931 bool opt = false;
1932 if (check(p, TOK_OPTIONAL)) {
1933 advance(p);
1934 opt = true;
1935 }
1936 if (!expect(p, TOK_MATCH)) {
1937 break;
1938 }
1939 if (q->pattern_count >= *pat_cap) {
1940 *pat_cap *= PAIR_LEN;
1941 q->patterns = safe_realloc(q->patterns, *pat_cap * sizeof(cbm_pattern_t));
1942 q->pattern_optional = safe_realloc(q->pattern_optional, *pat_cap * sizeof(bool));
1943 }
1944 if (parse_match_pattern(p, &q->patterns[q->pattern_count]) < 0) {
1945 return CBM_NOT_FOUND;
1946 }
1947 q->pattern_optional[q->pattern_count] = opt;
1948 q->pattern_count++;
1949 }
1950 return 0;
1951}
1952
1953/* Parse post-WHERE clauses: additional MATCH, WITH, RETURN, UNION */
1954static 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

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

Tested by

no test coverage detected