deno.land / x / pg_mem@2.8.1 / transforms / aggregations / avg.ts
1234567891011121314151617181920212223242526272829303132333435363738394041424344import { AggregationComputer, AggregationGroupComputer, IValue, nil, QueryError, _ISelection, _IType, _Transaction } from '../../interfaces-private.ts';import { ExprCall } from 'https://deno.land/x/pgsql_ast_parser@12.0.1/mod.ts';import { buildValue } from '../../parser/expression-builder.ts';import { Types } from '../../datatypes/index.ts';import { nullIsh, sum } from '../../utils.ts';import { withSelection } from '../../parser/context.ts';
class AvgExpr implements AggregationComputer<number> {
constructor(private exp: IValue) { }
get type(): _IType<any> { return Types.bigint; }
createGroup(t: _Transaction): AggregationGroupComputer<number> { let full: number[] = []; return { feedItem: (item) => { const value = this.exp.get(item, t); if (!nullIsh(value)) { full.push(value); } }, finish: () => full.length === 0 ? null : sum(full) / full.length, } }}
export function buildAvg(this: void, base: _ISelection, call: ExprCall) { return withSelection(base, () => { const args = call.args; if (args.length !== 1) { throw new QueryError('AVG expects one argument, given ' + args.length); }
const what = buildValue(args[0]); return new AvgExpr(what); });}
Version Info