# AI Query AST Spec

## Shape

```json
{
  "operation": "aggregate",
  "table": "Sale",
  "select": [{ "aggregate": "SUM", "column": "total", "alias": "total" }],
  "filters": [{ "column": "createdAt", "operator": "TODAY" }],
  "groupBy": [],
  "orderBy": [{ "column": "total", "direction": "desc" }],
  "limit": 10
}
```

## Operations

Allowed operations:

* `findMany`
* `count`
* `aggregate`
* `groupBy`

Blocked operations:

* insert
* update
* delete
* drop
* alter
* truncate
* raw SQL execution

## Filters

Allowed filter operators:

* `EQ`
* `CONTAINS`
* `LT`
* `LTE`
* `GT`
* `GTE`
* `TODAY`
* `YESTERDAY`
* `THIS_MONTH`
* `LAST_MONTH`
* `LOW_STOCK`

## Aggregates

Allowed aggregate functions:

* `COUNT`
* `SUM`
* `AVG`
* `MIN`
* `MAX`

## Limits

The query validator clamps `limit` to `1..100`. Result payloads are capped before response formatting.
