/* * Copyright (c) 2009 Mysema Ltd. * All rights reserved. * */ package com.mysema.query.sql; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.mysema.query.types.Visitor; import com.mysema.query.types.expr.ENumber; import com.mysema.query.types.expr.Expr; /** * SumOver is a fluent type for Oracle specific sum over / partition by / order * by constructs * * @author tiwe * @version $Id$ */ public class SumOver> extends ENumber { private Expr target; private Expr partitionBy; private List> orderBy = new ArrayList>(); public SumOver(Expr expr) { super(expr.getType()); target = expr; } public SumOver partition(Expr partitionBy) { this.partitionBy = partitionBy; return this; } public SumOver order(Expr... orderBy) { this.orderBy.addAll(Arrays.asList(orderBy)); return this; } public Expr getTarget() { return target; } public Expr getPartitionBy() { return partitionBy; } public List> getOrderBy() { return orderBy; } @Override public void accept(Visitor v) { if (v instanceof SQLSerializer){ ((SQLSerializer)v).visit(this); }else{ throw new IllegalArgumentException("Unsupported expression " + this); } } }