[#894] Move functions from Field<?> to new org.jooq.impl.SQL and make them static - moved window functions

This commit is contained in:
Lukas Eder 2011-11-04 18:13:51 +00:00
parent 3197037dd5
commit 67acab88c0
5 changed files with 18 additions and 80 deletions

View File

@ -6881,23 +6881,15 @@ public abstract class jOOQAbstractTest<
// STDDEV_POP(), STDDEV_SAMP(), VAR_POP(), VAR_SAMP()
result =
create().select(TBook_ID(),
TBook_ID().stddevPopOver()
.partitionByOne(),
TBook_ID().stddevSampOver()
.partitionByOne(),
TBook_ID().varPopOver()
.partitionByOne(),
TBook_ID().varSampOver()
.partitionByOne(),
stddevPop(TBook_ID()).over().partitionByOne(),
stddevSamp(TBook_ID()).over().partitionByOne(),
varPop(TBook_ID()).over().partitionByOne(),
varSamp(TBook_ID()).over().partitionByOne(),
TBook_ID().stddevPopOver()
.partitionBy(TBook_AUTHOR_ID()),
TBook_ID().stddevSampOver()
.partitionBy(TBook_AUTHOR_ID()),
TBook_ID().varPopOver()
.partitionBy(TBook_AUTHOR_ID()),
TBook_ID().varSampOver()
.partitionBy(TBook_AUTHOR_ID()))
stddevPop(TBook_ID()).over().partitionBy(TBook_AUTHOR_ID()),
stddevSamp(TBook_ID()).over().partitionBy(TBook_AUTHOR_ID()),
varPop(TBook_ID()).over().partitionBy(TBook_AUTHOR_ID()),
varSamp(TBook_ID()).over().partitionBy(TBook_AUTHOR_ID()))
.from(TBook())
.orderBy(TBook_ID().asc())
.fetch();

View File

@ -36,7 +36,6 @@
package org.jooq;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.Map;
@ -562,42 +561,6 @@ public interface Field<T> extends NamedTypeProviderQueryPart<T>, AliasProvider<F
*/
Field<T> shr(Field<? extends Number> value);
// ------------------------------------------------------------------------
// Analytic (or window) functions created from this field
// ------------------------------------------------------------------------
/**
* The <code>stddev_pop(field) over ([analytic clause])</code> function.
* <p>
* Window functions are supported in DB2, Postgres, Oracle, SQL Server and
* Sybase.
*/
WindowPartitionByStep<BigDecimal> stddevPopOver();
/**
* The <code>stddev_samp(field) over ([analytic clause])</code> function.
* <p>
* Window functions are supported in DB2, Postgres, Oracle, SQL Server and
* Sybase.
*/
WindowPartitionByStep<BigDecimal> stddevSampOver();
/**
* The <code>var_pop(field) over ([analytic clause])</code> function.
* <p>
* Window functions are supported in DB2, Postgres, Oracle, SQL Server and
* Sybase.
*/
WindowPartitionByStep<BigDecimal> varPopOver();
/**
* The <code>var_samp(field) over ([analytic clause])</code> function.
* <p>
* Window functions are supported in DB2, Postgres, Oracle, SQL Server and
* Sybase.
*/
WindowPartitionByStep<BigDecimal> varSampOver();
// ------------------------------------------------------------------------
// String functions created from this field
// ------------------------------------------------------------------------

View File

@ -45,7 +45,6 @@ import static org.jooq.impl.Factory.trueCondition;
import static org.jooq.impl.Factory.val;
import static org.jooq.impl.Factory.vals;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@ -67,7 +66,6 @@ import org.jooq.SQLDialectNotSupportedException;
import org.jooq.Select;
import org.jooq.SortField;
import org.jooq.SortOrder;
import org.jooq.WindowPartitionByStep;
abstract class AbstractField<T> extends AbstractNamedTypeProviderQueryPart<T> implements Field<T> {
@ -378,30 +376,6 @@ abstract class AbstractField<T> extends AbstractNamedTypeProviderQueryPart<T> im
return new Expression<T>(ExpressionOperator.SHR, this, value);
}
// ------------------------------------------------------------------------
// Window functions created from this field
// ------------------------------------------------------------------------
@Override
public final WindowPartitionByStep<BigDecimal> stddevPopOver() {
return new WindowFunction<BigDecimal>(Term.STDDEV_POP, SQLDataType.NUMERIC, this);
}
@Override
public final WindowPartitionByStep<BigDecimal> stddevSampOver() {
return new WindowFunction<BigDecimal>(Term.STDDEV_SAMP, SQLDataType.NUMERIC, this);
}
@Override
public final WindowPartitionByStep<BigDecimal> varPopOver() {
return new WindowFunction<BigDecimal>(Term.VAR_POP, SQLDataType.NUMERIC, this);
}
@Override
public final WindowPartitionByStep<BigDecimal> varSampOver() {
return new WindowFunction<BigDecimal>(Term.VAR_SAMP, SQLDataType.NUMERIC, this);
}
// ------------------------------------------------------------------------
// Functions created from this field
// ------------------------------------------------------------------------

View File

@ -56,6 +56,11 @@ class AggregateFunctionImpl<T> extends Function<T> implements AggregateFunction<
@Override
public final WindowFunction<T> over() {
return new WindowFunction<T>(getName(), getDataType(), getArguments());
if (getTerm() != null) {
return new WindowFunction<T>(getTerm(), getDataType(), getArguments());
}
else {
return new WindowFunction<T>(getName(), getDataType(), getArguments());
}
}
}

View File

@ -102,6 +102,10 @@ class Function<T> extends AbstractField<T> {
}
}
final Term getTerm() {
return term;
}
/**
* Subclasses may override this method to add an additional prefix in the
* function SQL string