---
name: Filter
lang: cpp
domain: core
version: "1.0.0"
algebraic: product
definition: |
  struct Filter {
      int         col;
      Op          op;
      std::string value;
  };
description: "Predicado TQL: col idx + Op + value. Aplicado dentro de un Stage por compute_stage. col es idx en headers efectivos del INPUT del stage."
tags: [tql, filter, predicate, product-type]
uses_types: [Op_cpp_core]
file_path: "cpp/functions/core/data_table_types.h"
---

## Notas

`col` es indice en `in_headers` del stage donde aplica (no en el dataset original — esto cambio en el refactor a stages). Para drill-down usar `make_drill_filter(col_idx, value)`.

`value` es string siempre — `compare()` decide numerico vs lexical segun parseo. Range filters (op_in_range, op_between) no estan modelados; usar dos Filters consecutivos.

## Usado por

- `Stage_cpp_core` (lista de filters)
- `apply_filters`, `compute_stage_cpp_core`
- `make_drill_filter`, `build_preset_filters`
- `tql_to_sql_cpp_core` → SQL WHERE clauses con `?` placeholders
