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

Function parse_match_chain

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

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