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

com.blazebit.persistence.criteria.impl.expression.function.AggregationFunction Maven / Gradle / Ivy

There is a newer version: 1.6.11
Show newest version
/*
 * Copyright 2014 - 2021 Blazebit.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.blazebit.persistence.criteria.impl.expression.function;

import com.blazebit.persistence.criteria.impl.BlazeCriteriaBuilderImpl;
import com.blazebit.persistence.criteria.impl.RenderContext;

import javax.persistence.criteria.Expression;
import java.util.List;

/**
 * @author Christian Beikov
 * @since 1.2.0
 */
public class AggregationFunction extends FunctionExpressionImpl {

    private static final long serialVersionUID = 1L;

    public AggregationFunction(BlazeCriteriaBuilderImpl criteriaBuilder, Class returnType, String functionName, Expression argument) {
        super(criteriaBuilder, returnType, functionName, argument);
    }

    /**
     * @author Christian Beikov
     * @since 1.2.0
     */
    public static class COUNT extends AggregationFunction {

        private static final long serialVersionUID = 1L;
        private static final String NAME = "COUNT";

        private final boolean distinct;

        public COUNT(BlazeCriteriaBuilderImpl criteriaBuilder, Expression expression, boolean distinct) {
            super(criteriaBuilder, Long.class, NAME, expression);
            this.distinct = distinct;
        }

        @Override
        public void render(RenderContext context) {
            final StringBuilder buffer = context.getBuffer();
            if (isDistinct()) {
                List> args = getArgumentExpressions();
                buffer.append(getFunctionName()).append('(');
                for (int i = 0; i < args.size(); i++) {
                    if (i != 0) {
                        buffer.append(',');
                    } else {
                        buffer.append("DISTINCT ");
                    }

                    context.apply(args.get(i));
                }
                buffer.append(')');
            } else {
                super.render(context);
            }
        }

        public boolean isDistinct() {
            return distinct;
        }

    }

    /**
     * @author Christian Beikov
     * @since 1.2.0
     */
    public static class AVG extends AggregationFunction {

        private static final long serialVersionUID = 1L;
        private static final String NAME = "AVG";

        public AVG(BlazeCriteriaBuilderImpl criteriaBuilder, Expression expression) {
            super(criteriaBuilder, Double.class, NAME, expression);
        }
    }

    /**
     * @author Christian Beikov
     * @since 1.2.0
     */
    public static class SUM extends AggregationFunction {

        private static final long serialVersionUID = 1L;
        private static final String NAME = "SUM";

        @SuppressWarnings({"unchecked"})
        public SUM(BlazeCriteriaBuilderImpl criteriaBuilder, Expression expression) {
            super(criteriaBuilder, (Class) expression.getJavaType(), NAME, expression);
            setJavaType(expression.getJavaType());
        }

        public SUM(BlazeCriteriaBuilderImpl criteriaBuilder, Expression expression, Class returnType) {
            super(criteriaBuilder, returnType, NAME, expression);
            setJavaType(returnType);
        }
    }

    /**
     * @author Christian Beikov
     * @since 1.2.0
     */
    public static class MIN extends AggregationFunction {

        private static final long serialVersionUID = 1L;
        private static final String NAME = "MIN";

        @SuppressWarnings({"unchecked"})
        public MIN(BlazeCriteriaBuilderImpl criteriaBuilder, Expression expression) {
            super(criteriaBuilder, (Class) expression.getJavaType(), NAME, expression);
        }
    }

    /**
     * @author Christian Beikov
     * @since 1.2.0
     */
    public static class MAX extends AggregationFunction {

        private static final long serialVersionUID = 1L;
        private static final String NAME = "MAX";

        @SuppressWarnings({"unchecked"})
        public MAX(BlazeCriteriaBuilderImpl criteriaBuilder, Expression expression) {
            super(criteriaBuilder, (Class) expression.getJavaType(), NAME, expression);
        }
    }

    /**
     * @author Christian Beikov
     * @since 1.2.0
     */
    public static class LEAST> extends AggregationFunction {

        private static final long serialVersionUID = 1L;
        private static final String NAME = "MIN";

        @SuppressWarnings({"unchecked"})
        public LEAST(BlazeCriteriaBuilderImpl criteriaBuilder, Expression expression) {
            super(criteriaBuilder, (Class) expression.getJavaType(), NAME, expression);
        }
    }

    /**
     * @author Christian Beikov
     * @since 1.2.0
     */
    public static class GREATEST> extends AggregationFunction {

        private static final long serialVersionUID = 1L;
        private static final String NAME = "MAX";

        @SuppressWarnings({"unchecked"})
        public GREATEST(BlazeCriteriaBuilderImpl criteriaBuilder, Expression expression) {
            super(criteriaBuilder, (Class) expression.getJavaType(), NAME, expression);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy