=
| {expr: ExprData, op: UnOp, type: ExprType.UnOp}
| {a: ExprData, b: ExprData, op: BinOp, type: ExprType.BinOp}
| {expr: ExprData, field: string, type: ExprType.Field}
| {param: ParamData, type: ExprType.Param}
| {method: string, params: Array<ExprData>, type: ExprType.Call}
| {cursor: CursorData, type: ExprType.Query}
| {fields: Record<string, ExprData>, type: ExprType.Record}
| {a: ExprData, b: ExprData, type: ExprType.Merge}
| {from: From, type: ExprType.Row}
| {cases: Record<string, ExprData>, defaultCase: ExprData, expr: ExprData, type: ExprType.Case}