| 1912 | /* ── Query free ─────────────────────────────────────────────────── */ |
| 1913 | |
| 1914 | static void free_pattern(cbm_pattern_t *pat) { |
| 1915 | for (int i = 0; i < pat->node_count; i++) { |
| 1916 | cbm_node_pattern_t *n = &pat->nodes[i]; |
| 1917 | safe_str_free(&n->variable); |
| 1918 | safe_str_free(&n->label); |
| 1919 | for (int j = 0; j < n->prop_count; j++) { |
| 1920 | safe_str_free(&n->props[j].key); |
| 1921 | safe_str_free(&n->props[j].value); |
| 1922 | } |
| 1923 | free(n->props); |
| 1924 | } |
| 1925 | free(pat->nodes); |
| 1926 | for (int i = 0; i < pat->rel_count; i++) { |
| 1927 | cbm_rel_pattern_t *r = &pat->rels[i]; |
| 1928 | safe_str_free(&r->variable); |
| 1929 | for (int j = 0; j < r->type_count; j++) { |
| 1930 | safe_str_free(&r->types[j]); |
| 1931 | } |
| 1932 | free(r->types); |
| 1933 | safe_str_free(&r->direction); |
| 1934 | } |
| 1935 | free(pat->rels); |
| 1936 | } |
| 1937 | |
| 1938 | static void free_where(cbm_where_clause_t *w) { |
| 1939 | if (!w) { |
no test coverage detected