All Downloads are FREE. Search and download functionalities are using the official Maven repository.

sf.dsl.example.SQLExpressions Maven / Gradle / Ivy

The newest version!
package sf.dsl.example;

/**
 * Common SQL expressions
 * @see com.querydsl.sql.SQLExpressions
 */
public final class SQLExpressions {

    /**
     * Create a new detached SQLQuery instance with zero as the projection
     * @return select(0)
     */
    public static Example selectZero() {
        return new Example().select(QPI.fixColumn("0"));
    }

    /**
     * Create a new detached SQLQuery instance with one as the projection
     * @return select(1)
     */
    public static Example selectOne() {
        return new Example().select(QPI.fixColumn("1"));
    }

    private static final WindowOver cumeDist = new WindowOver(new SimpleField("cume_dist()"));

    private static final WindowOver rank = new WindowOver(new SimpleField("rank()"));

    private static final WindowOver denseRank = new WindowOver(new SimpleField("dense_rank()"));

    private static final WindowOver percentRank = new WindowOver(new SimpleField("percent_rank()"));

    private static final WindowOver rowNumber = new WindowOver(new SimpleField("row_number()"));

    private static SimpleField[] convertToExpressions(Object... args) {
        SimpleField[] exprs = new SimpleField[args.length];
        for (int i = 0; i < args.length; i++) {
            if (args[i] instanceof SimpleField) {
                exprs[i] = (SimpleField) args[i];
            } else {
                exprs[i] = new SimpleField(String.valueOf(args[i]));
            }
        }
        return exprs;
    }

    /**
     * Start a window function expression
     * @param expr expression
     * @return sum(expr)
     */
    public static WindowOver sum(SimpleField expr) {
        return new WindowOver(QPI.sum(expr));
    }

    /**
     * Start a window function expression
     * @return count()
     */
    public static WindowOver count() {
        return new WindowOver(QPI.count());
    }

    /**
     * Start a window function expression
     * @param expr expression
     * @return count(expr)
     */
    public static WindowOver count(SimpleField expr) {
        return new WindowOver(QPI.count(expr));
    }

    /**
     * Start a window function expression
     * @param expr expression
     * @return count(distinct expr)
     */
    public static WindowOver countDistinct(SimpleField expr) {
        return new WindowOver(QPI.funcO("count(distinct ", ")", expr));
    }

    /**
     * Start a window function expression
     * @param expr expression
     * @return avg(expr)
     */
    public static WindowOver avg(SimpleField expr) {
        return new WindowOver(QPI.avg(expr));
    }

    /**
     * Start a window function expression
     * @param expr expression
     * @return min(expr)
     */
    public static WindowOver min(SimpleField expr) {
        return new WindowOver(QPI.min(expr));
    }

    /**
     * Start a window function expression
     * @param expr expression
     * @return max(expr)
     */
    public static WindowOver max(SimpleField expr) {
        return new WindowOver(QPI.max(expr));
    }

    /**
     * expr evaluated at the row that is one row after the current row within the partition;
     * @param expr expression
     * @return lead(expr)
     */
    public static WindowOver lead(SimpleField expr) {
        return new WindowOver(QPI.func("lead", expr));
    }

    /**
     * expr evaluated at the row that is one row before the current row within the partition
     * @param expr expression
     * @return lag(expr)
     */
    public static WindowOver lag(SimpleField expr) {
        return new WindowOver(QPI.func("lag", expr));
    }

    /**
     * LISTAGG orders data within each group specified in the ORDER BY clause and then concatenates
     * the values of the measure column.
     * @param expr      measure column
     * @param delimiter delimiter
     * @return listagg(expr, delimiter)
     */
    public static WithinGroup listagg(SimpleField expr, String delimiter) {
        return new WithinGroup(QPI.func("listagg", expr, QPI.fixColumn("'" + delimiter + "'")));
    }

    /**
     * NTH_VALUE returns the expr value of the nth row in the window defined by the analytic clause.
     * The returned value has the data type of the expr
     * @param expr measure expression
     * @param n    one based row index
     * @return nth_value(expr, n)
     */
    public static WindowOver nthValue(SimpleField expr, Number n) {
        return new WindowOver(QPI.func("nth_value", expr, QPI.fixColumn(String.valueOf(n))));
    }

    /**
     * divides an ordered data set into a number of buckets indicated by expr and assigns the
     * appropriate bucket number to each row
     * @param num bucket size
     * @return ntile(num)
     */
    @SuppressWarnings("unchecked")
    public static WindowOver ntile(Number num) {
        return new WindowOver(QPI.func("ntile", QPI.fixColumn(num.toString())));
    }

    /**
     * rank of the current row with gaps; same as row_number of its first peer
     * @return rank()
     */
    public static WindowOver rank() {
        return rank;
    }

    /**
     * As an aggregate function, RANK calculates the rank of a hypothetical row identified by the
     * arguments of the function with respect to a given sort specification. The arguments of the
     * function must all evaluate to constant expressions within each aggregate group, because they
     * identify a single row within each group. The constant argument expressions and the expressions
     * in the ORDER BY clause of the aggregate match by position. Therefore, the number of arguments
     * must be the same and their types must be compatible.
     * @param args arguments
     * @return rank(args)
     */
    @SuppressWarnings("unchecked")
    public static WithinGroup rank(Object... args) {
        return rank(convertToExpressions(args));
    }

    /**
     * As an aggregate function, RANK calculates the rank of a hypothetical row identified by the
     * arguments of the function with respect to a given sort specification. The arguments of the
     * function must all evaluate to constant expressions within each aggregate group, because they
     * identify a single row within each group. The constant argument expressions and the expressions
     * in the ORDER BY clause of the aggregate match by position. Therefore, the number of arguments
     * must be the same and their types must be compatible.
     * @param args arguments
     * @return rank(args)
     */
    public static WithinGroup rank(SimpleField... args) {
        return new WithinGroup(QPI.func("rank", args));
    }

    /**
     * rank of the current row without gaps; this function counts peer groups
     * @return dense_rank()
     */
    public static WindowOver denseRank() {
        return denseRank;
    }

    /**
     * As an aggregate function, DENSE_RANK calculates the dense rank of a hypothetical row identified
     * by the arguments of the function with respect to a given sort specification. The arguments of
     * the function must all evaluate to constant expressions within each aggregate group, because they
     * identify a single row within each group. The constant argument expressions and the expressions
     * in the order_by_clause of the aggregate match by position. Therefore, the number of arguments
     * must be the same and types must be compatible.
     * @param args arguments
     * @return dense_rank(args)
     */
    @SuppressWarnings("unchecked")
    public static WithinGroup denseRank(Object... args) {
        return denseRank(convertToExpressions(args));
    }

    /**
     * As an aggregate function, DENSE_RANK calculates the dense rank of a hypothetical row identified
     * by the arguments of the function with respect to a given sort specification. The arguments of
     * the function must all evaluate to constant expressions within each aggregate group, because they
     * identify a single row within each group. The constant argument expressions and the expressions
     * in the order_by_clause of the aggregate match by position. Therefore, the number of arguments
     * must be the same and types must be compatible.
     * @param args arguments
     * @return dense_rank(args)
     */
    public static WithinGroup denseRank(SimpleField... args) {
        return new WithinGroup(QPI.func("dense_rank", args));
    }

    /**
     * As an analytic function, for a row r, PERCENT_RANK calculates the rank of r minus 1, divided by
     * 1 less than the number of rows being evaluated (the entire query result set or a partition).
     * @return percent_rank()
     */
    public static WindowOver percentRank() {
        return percentRank;
    }

    /**
     * As an aggregate function, PERCENT_RANK calculates, for a hypothetical row r identified by the
     * arguments of the function and a corresponding sort specification, the rank of row r minus 1
     * divided by the number of rows in the aggregate group. This calculation is made as if the
     * hypothetical row r were inserted into the group of rows over which Oracle Database is to
     * aggregate. The arguments of the function identify a single hypothetical row within each aggregate
     * group. Therefore, they must all evaluate to constant expressions within each aggregate group.
     * The constant argument expressions and the expressions in the ORDER BY clause of the aggregate
     * match by position. Therefore the number of arguments must be the same and their types must be
     * compatible.
     * @param args arguments
     * @return percent_rank(args)
     */
    @SuppressWarnings("unchecked")
    public static WithinGroup percentRank(Object... args) {
        return percentRank(convertToExpressions(args));
    }

    /**
     * As an aggregate function, PERCENT_RANK calculates, for a hypothetical row r identified by the
     * arguments of the function and a corresponding sort specification, the rank of row r minus 1
     * divided by the number of rows in the aggregate group. This calculation is made as if the
     * hypothetical row r were inserted into the group of rows over which Oracle Database is to aggregate.
     * The arguments of the function identify a single hypothetical row within each aggregate group.
     * Therefore, they must all evaluate to constant expressions within each aggregate group. The
     * constant argument expressions and the expressions in the ORDER BY clause of the aggregate match
     * by position. Therefore the number of arguments must be the same and their types must be compatible.
     * @param args arguments
     * @return percent_rank(args)
     */
    public static WithinGroup percentRank(SimpleField... args) {
        return new WithinGroup(QPI.func("percent_rank", args));
    }

    /**
     * Calculates a percentile based on a continuous distribution of the column value
     * @param arg argument
     * @return percentile_cont(arg)
     */
    public static WithinGroup percentileCont(Number arg) {
        if (arg.doubleValue() < 0.0 || arg.doubleValue() > 1.0) {
            throw new IllegalArgumentException("The percentile value should be a number between 0 and 1");
        }
        return percentileCont(QPI.fixColumn(String.valueOf(arg)));
    }

    /**
     * Calculates a percentile based on a continuous distribution of the column value
     * @param arg argument
     * @return percentile_cont(arg)
     */
    public static  WithinGroup percentileCont(SimpleField arg) {
        return new WithinGroup(QPI.func("percentile_cont", arg));
    }

    /**
     * PERCENTILE_DISC is an inverse distribution function that assumes a discrete distribution model.
     * It takes a percentile value and a sort specification and returns an element from the set.
     * Nulls are ignored in the calculation.
     *
     * 

This function takes as an argument any numeric datatype or any nonnumeric datatype that can be * implicitly converted to a numeric datatype. The function returns the same datatype as the numeric * datatype of the argument.

* @param arg argument * @return percentile_disc(arg) */ public static WithinGroup percentileDisc(Number arg) { if (arg.doubleValue() < 0.0 || arg.doubleValue() > 1.0) { throw new IllegalArgumentException("The percentile value should be a number between 0 and 1"); } return percentileDisc(QPI.fixColumn(String.valueOf(arg))); } /** * PERCENTILE_DISC is an inverse distribution function that assumes a discrete distribution model. * It takes a percentile value and a sort specification and returns an element from the set. * Nulls are ignored in the calculation. * *

This function takes as an argument any numeric datatype or any nonnumeric datatype that can be * implicitly converted to a numeric datatype. The function returns the same datatype as the numeric * datatype of the argument.

* @param arg argument * @return percentile_disc(arg) */ public static WithinGroup percentileDisc(/*Number*/SimpleField arg) { return new WithinGroup(QPI.func("percentile_disc", arg)); } /** * REGR_SLOPE returns the slope of the line * @param arg1 first arg * @param arg2 second arg * @return regr_slope(arg1, arg2) */ public static WindowOver regrSlope(SimpleField arg1, SimpleField arg2) {//Number return new WindowOver(QPI.func("regr_slope", arg1, arg2)); } /** * REGR_INTERCEPT returns the y-intercept of the regression line. * @param arg1 first arg * @param arg2 second arg * @return regr_intercept(arg1, arg2) */ public static WindowOver regrIntercept(SimpleField arg1, SimpleField arg2) {//Number return new WindowOver(QPI.func("regr_intercept", arg1, arg2)); } /** * REGR_COUNT returns an integer that is the number of non-null number pairs used to fit the regression line. * @param arg1 first arg * @param arg2 second arg * @return regr_count(arg1, arg2) */ public static WindowOver regrCount(SimpleField arg1, SimpleField arg2) {//Number return new WindowOver(QPI.func("regr_count", arg1, arg2)); } /** * REGR_R2 returns the coefficient of determination (also called R-squared or goodness of fit) for the regression. * @param arg1 first arg * @param arg2 second arg * @return regr_r2(arg1, arg2) */ public static WindowOver regrR2(SimpleField arg1, SimpleField arg2) {//Number return new WindowOver(QPI.func("regr_r2", arg1, arg2)); } /** * REGR_AVGX evaluates the average of the independent variable (arg2) of the regression line. * @param arg1 first arg * @param arg2 second arg * @return regr_avgx(arg1, arg2) */ public static WindowOver regrAvgx(SimpleField arg1, SimpleField arg2) {//Number return new WindowOver(QPI.func("regr_avgx", arg1, arg2)); } /** * REGR_AVGY evaluates the average of the dependent variable (arg1) of the regression line. * @param arg1 first arg * @param arg2 second arg * @return regr_avgy(arg1, arg2) */ public static WindowOver regrAvgy(SimpleField arg1, SimpleField arg2) {//Number return new WindowOver(QPI.func("regr_avgy", arg1, arg2)); } /** * REGR_SXX makes the following computation after the elimination of null (arg1, arg2) pairs: * *

{@code REGR_COUNT(arg1, arg2) * VAR_POP(arg2)}

* @param arg1 first arg * @param arg2 second arg * @return regr_sxx(arg1, arg2) */ public static WindowOver regrSxx(SimpleField arg1, SimpleField arg2) {//Number return new WindowOver(QPI.func("regr_sxx", arg1, arg2)); } /** * REGR_SYY makes the following computation after the elimination of null (arg1, arg2) pairs: * *

{@code REGR_COUNT(arg1, arg2) * VAR_POP(arg1)}

* @param arg1 first arg * @param arg2 second arg * @return regr_syy(arg1, arg2) */ public static WindowOver regrSyy(SimpleField arg1, SimpleField arg2) {//Number return new WindowOver(QPI.func("regr_syy", arg1, arg2)); } /** * REGR_SXY makes the following computation after the elimination of null (arg1, arg2) pairs: * *

REGR_COUNT(arg1, arg2) * COVAR_POP(arg1, arg2)

* @param arg1 first arg * @param arg2 second arg * @return regr_sxy(arg1, arg2) */ public static WindowOver regrSxy(SimpleField arg1, SimpleField arg2) {//Number return new WindowOver(QPI.func("regr_sxy", arg1, arg2)); } /** * CUME_DIST calculates the cumulative distribution of a value in a group of values. * @return cume_dist() */ public static WindowOver cumeDist() { return cumeDist; } /** * As an aggregate function, CUME_DIST calculates, for a hypothetical row r identified by the * arguments of the function and a corresponding sort specification, the relative position of row * r among the rows in the aggregation group. Oracle makes this calculation as if the hypothetical * row r were inserted into the group of rows to be aggregated over. The arguments of the function * identify a single hypothetical row within each aggregate group. Therefore, they must all * evaluate to constant expressions within each aggregate group. The constant argument expressions * and the expressions in the ORDER BY clause of the aggregate match by position. Therefore, * the number of arguments must be the same and their types must be compatible. * @param args arguments * @return cume_dist(args) */ @SuppressWarnings("unchecked") public static WithinGroup cumeDist(Object... args) { return cumeDist(convertToExpressions(args)); } /** * As an aggregate function, CUME_DIST calculates, for a hypothetical row r identified by the * arguments of the function and a corresponding sort specification, the relative position of row * r among the rows in the aggregation group. Oracle makes this calculation as if the hypothetical * row r were inserted into the group of rows to be aggregated over. The arguments of the function * identify a single hypothetical row within each aggregate group. Therefore, they must all * evaluate to constant expressions within each aggregate group. The constant argument expressions * and the expressions in the ORDER BY clause of the aggregate match by position. Therefore, * the number of arguments must be the same and their types must be compatible. * @param args arguments * @return cume_dist(args) */ public static WithinGroup cumeDist(SimpleField... args) { return new WithinGroup(QPI.func("cume_dist", args)); } /** * CORR returns the coefficient of correlation of a set of number pairs. * @param expr1 first arg * @param expr2 second arg * @return corr(expr1, expr2) */ public static WindowOver corr(SimpleField expr1, SimpleField expr2) { return new WindowOver(QPI.func("corr", expr1, expr2)); } /** * CORR returns the coefficient of correlation of a set of number pairs. * @param expr1 first arg * @param expr2 second arg * @return covar_pop(expr1, expr2) */ public static WindowOver covarPop(SimpleField expr1, SimpleField expr2) {//Number return new WindowOver(QPI.func("covar_pop", expr1, expr2)); } /** * CORR returns the coefficient of correlation of a set of number pairs. * @param expr1 first arg * @param expr2 second arg * @return covar_samp(expr1, expr2) */ public static WindowOver covarSamp(SimpleField expr1, SimpleField expr2) {//Number return new WindowOver(QPI.func("covar_samp", expr1, expr2)); } /** * computes the ratio of a value to the sum of a set of values. If expr evaluates to null, * then the ratio-to-report value also evaluates to null. * @return ratio_to_report(expr) */ public static WindowOver ratioToReport(SimpleField expr) { return new WindowOver(QPI.func("ratio_to_report", expr)); } /** * number of the current row within its partition, counting from 1 * @return row_number() */ public static WindowOver rowNumber() { return rowNumber; } /** * returns the sample standard deviation of expr, a set of numbers. * @param expr argument * @return stddev(expr) */ public static WindowOver stddev(SimpleField expr) {//Number return new WindowOver(QPI.func("stddev", expr)); } /** * returns the sample standard deviation of expr, a set of numbers. * @param expr argument * @return stddev(distinct expr) */ public static WindowOver stddevDistinct(SimpleField expr) {//Number return new WindowOver(QPI.funcO("stddev(distinct ", ")", expr)); } /** * returns the population standard deviation and returns the square root of the population variance. * @param expr argument * @return stddev_pop(expr) */ public static WindowOver stddevPop(SimpleField expr) {//Number return new WindowOver(QPI.func("stddev_pop", expr)); } /** * returns the cumulative sample standard deviation and returns the square root of the sample variance. * @param expr argument * @return stddev_samp(expr) */ public static WindowOver stddevSamp(SimpleField expr) {//Number return new WindowOver(QPI.func("stddev_samp", expr)); } /** * returns the variance of expr * @param expr argument * @return variance(expr) */ public static WindowOver variance(SimpleField expr) {//Number return new WindowOver(QPI.func("variance", expr)); } /** * returns the population variance of a set of numbers after discarding the nulls in this set. * @param expr argument * @return var_pop(expr) */ public static WindowOver varPop(SimpleField expr) {//Number return new WindowOver(QPI.func("var_pop", expr)); } /** * returns the sample variance of a set of numbers after discarding the nulls in this set. * @param expr argument * @return var_samp(expr) */ public static WindowOver varSamp(SimpleField expr) {//Number return new WindowOver(QPI.func("var_samp", expr)); } /** * returns value evaluated at the row that is the first row of the window frame * @param expr argument * @return first_value(expr) */ public static WindowOver firstValue(SimpleField expr) { return new WindowOver(QPI.func("first_value", expr)); } /** * returns value evaluated at the row that is the last row of the window frame * @param expr argument * @return last_value(expr) */ public static WindowOver lastValue(SimpleField expr) { return new WindowOver(QPI.func("last_value", expr)); } private SQLExpressions() { } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy