Parse WHERE clause — builds expression tree */
| 1306 | |
| 1307 | /* Parse WHERE clause — builds expression tree */ |
| 1308 | static int parse_where(parser_t *p, cbm_where_clause_t **out) { |
| 1309 | if (!match(p, TOK_WHERE)) { |
| 1310 | *out = NULL; |
| 1311 | return 0; |
| 1312 | } |
| 1313 | |
| 1314 | cbm_where_clause_t *w = calloc(CBM_ALLOC_ONE, sizeof(cbm_where_clause_t)); |
| 1315 | w->root = parse_or_expr(p); |
| 1316 | if (!w->root && p->error[0]) { |
| 1317 | free(w); |
| 1318 | return CBM_NOT_FOUND; |
| 1319 | } |
| 1320 | |
| 1321 | *out = w; |
| 1322 | return 0; |
| 1323 | } |
| 1324 | |
| 1325 | /* Helper: is token an aggregate function? */ |
| 1326 | static bool is_aggregate_tok(cbm_token_type_t t) { |
no test coverage detected