helper for eval_callx; evaluator for CallX that consume multiple rows

def eval_agg_call(self, exp):
    "helper for eval_callx; evaluator for CallX that consume multiple rows"
    if not isinstance(self.c_row,list): raise TypeError('aggregate function expected a list of rows')
    if len(exp.args.children)!=1: raise ValueError('aggregate function expected a single value',exp.args)
    arg,=exp.args.children # intentional: error if len!=1
    vals=[Evaluator(c_r,self.nix,self.tables).eval(arg) for c_r in self.c_row]
    if not vals: return None
    if exp.f=='min': return min(vals)
    elif exp.f=='max': return max(vals)
    elif exp.f=='count': return len(vals)
    else: raise NotImplementedError('unk_func',exp.f)