The GitHub Actions job "Required Checks" on 
texera.git/gh-readonly-queue/main/pr-5896-40526b8e1783e7782ce6043e7ca72840b7fbe04d
 has succeeded.
Run started by GitHub user mengw15 (triggered by mengw15).

Head commit for run:
7c135ee0955d539de0f7905b88d8bc4e86cca5a4 / Tanishq Gandhi 
<[email protected]>
feat(workflow-operator): support COUNT(*) in the Aggregate operator (#5896)

### What changes were proposed in this PR?

This PR adds `COUNT(*)` support to the **Aggregate** operator, so users
can count all rows without selecting a column — useful when there's no
natural column to count.

The existing **`count`** function now handles both cases via an optional
attribute:

- **`count` with an empty Attribute** → `COUNT(*)` — counts every row
(including rows with nulls)
- **`count` with a column** → counts that column's non-null values
(unchanged)

The Attribute stays **required for every other function** (`sum`,
`average`, `min`,
`max`, `concat`), enforced by a conditional JSON-schema rule and
surfaced in the UI
with the usual required marker.

**Backend**
- `count` counts all rows when the attribute is empty/blank, otherwise
counts non-null values of the selected column.
- Conditional-required rule: attribute is required unless the function
is `count` (validated by Ajv, so an empty attribute on other functions
marks the operator invalid).


**Frontend**
- The Attribute is a normal optional field for `count`; the required
marker (red `*`) shows for all other functions. Description hints that
an empty attribute counts all rows.

**Docs**
- Updated the Aggregate operator reference.

#### Screenshots

<img width="1371" height="603" alt="image"
src="https://github.com/user-attachments/assets/b02cca86-aa69-4aff-a197-52ce1c683298";
/>

<img width="1318" height="618"
alt="2C3CB4D9-7FA6-4098-B7F7-293651EEA7D9"
src="https://github.com/user-attachments/assets/dd6c9330-c06f-48ed-bf11-70044d432aa6";
/>

### Any related issues, documentation, discussions?

Closes #3142.

### How was this PR tested?

**Automated** (`AggregateOpSpec`, `AggregateOpDescSpec`):
- `count` with an empty (or null) attribute counts all rows including
nulls.
- `count` with a column counts only non-null values.
- `getAggregationAttribute` / schema propagation / executor tolerate an
empty attribute (no input-column lookup; result typed `INTEGER`).
- Existing `sum`/`average`/`min`/`max`/`concat`/`getFinal` behavior
unchanged.

All Aggregate tests pass: `sbt "WorkflowOperator/testOnly *aggregate*"`.

**Manual (UI):** verified `count` + empty Attribute counts all rows
(with and without Group By), `count` + a column counts non-null values,
and non-count functions with an empty Attribute are invalid (Run
disabled).

### Was this PR authored or co-authored using generative AI tooling?

Generated-by: Claude Code (Claude Opus 4.8)

---------

Co-authored-by: Meng Wang <[email protected]>

Report URL: https://github.com/apache/texera/actions/runs/28898253714

With regards,
GitHub Actions via GitBox

Reply via email to