| 2071 | /* ── Query free ─────────────────────────────────────────────────── */ |
| 2072 | |
| 2073 | static void free_pattern(cbm_pattern_t *pat) { |
| 2074 | for (int i = 0; i < pat->node_count; i++) { |
| 2075 | cbm_node_pattern_t *n = &pat->nodes[i]; |
| 2076 | safe_str_free(&n->variable); |
| 2077 | safe_str_free(&n->label); |
| 2078 | for (int j = 0; j < n->prop_count; j++) { |
| 2079 | safe_str_free(&n->props[j].key); |
| 2080 | safe_str_free(&n->props[j].value); |
| 2081 | } |
| 2082 | free(n->props); |
| 2083 | } |
| 2084 | free(pat->nodes); |
| 2085 | for (int i = 0; i < pat->rel_count; i++) { |
| 2086 | cbm_rel_pattern_t *r = &pat->rels[i]; |
| 2087 | safe_str_free(&r->variable); |
| 2088 | for (int j = 0; j < r->type_count; j++) { |
| 2089 | safe_str_free(&r->types[j]); |
| 2090 | } |
| 2091 | free(r->types); |
| 2092 | safe_str_free(&r->direction); |
| 2093 | } |
| 2094 | free(pat->rels); |
| 2095 | } |
| 2096 | |
| 2097 | static void free_where(cbm_where_clause_t *w) { |
| 2098 | if (!w) { |
no test coverage detected