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

com.easy.query.core.basic.api.select.extension.queryable2.Aggregatable2 Maven / Gradle / Ivy

package com.easy.query.core.basic.api.select.extension.queryable2;

import com.easy.query.core.common.tuple.Tuple2;
import com.easy.query.core.expression.lambda.SQLExpression1;
import com.easy.query.core.expression.lambda.SQLExpression2;
import com.easy.query.core.expression.parser.core.base.ColumnResultSelector;

import java.math.BigDecimal;

/**
 * create time 2023/8/15 21:54
 * 文件说明
 *
 * @author xuejiaming
 */
public interface Aggregatable2 {
    /**
     * 防止溢出
     *
     * @param columnSelectorExpression
     * @param 
     * @return
     */
    default  BigDecimal sumBigDecimalOrNull(SQLExpression2, ColumnResultSelector> columnSelectorExpression) {
        return sumBigDecimalOrDefault(columnSelectorExpression, null);
    }

     BigDecimal sumBigDecimalOrDefault(SQLExpression2, ColumnResultSelector> columnSelectorExpression, BigDecimal def);

    default  TMember sumOrNull(SQLExpression2, ColumnResultSelector> columnSelectorExpression) {
        return sumOrDefault(columnSelectorExpression, null);
    }

     TMember sumOrDefault(SQLExpression2, ColumnResultSelector> columnSelectorExpression, TMember def);

    default  TMember maxOrNull(SQLExpression2, ColumnResultSelector> columnSelectorExpression) {
        return maxOrDefault(columnSelectorExpression, null);
    }

     TMember maxOrDefault(SQLExpression2, ColumnResultSelector> columnSelectorExpression, TMember def);

    default  TMember minOrNull(SQLExpression2, ColumnResultSelector> columnSelectorExpression) {
        return minOrDefault(columnSelectorExpression, null);
    }

     TMember minOrDefault(SQLExpression2, ColumnResultSelector> columnSelectorExpression, TMember def);

    default  Double avgOrNull(SQLExpression2, ColumnResultSelector> columnSelectorExpression) {
        return avgOrDefault(columnSelectorExpression, null, Double.class);
    }

    default  BigDecimal avgBigDecimalOrNull(SQLExpression2, ColumnResultSelector> columnSelectorExpression) {
        return avgOrDefault(columnSelectorExpression, null, BigDecimal.class);
    }

    default  Float avgFloatOrNull(SQLExpression2, ColumnResultSelector> columnSelectorExpression) {
        return avgOrDefault(columnSelectorExpression, null, Float.class);
    }

    default  Double avgOrDefault(SQLExpression2, ColumnResultSelector> columnSelectorExpression, Double def) {
        return avgOrDefault(columnSelectorExpression, def, Double.class);
    }

    default  BigDecimal avgBigDecimalOrDefault(SQLExpression2, ColumnResultSelector> columnSelectorExpression, BigDecimal def) {
        return avgOrDefault(columnSelectorExpression, def, BigDecimal.class);
    }

    default  Float avgFloatOrDefault(SQLExpression2, ColumnResultSelector> columnSelectorExpression, Float def) {
        return avgOrDefault(columnSelectorExpression, def, Float.class);
    }

     TResult avgOrDefault(SQLExpression2, ColumnResultSelector> columnSelectorExpression, TResult def, Class resultClass);



    /**
     * 防止溢出
     *
     * @param columnSelectorExpression
     * @param 
     * @return
     */
    default  BigDecimal sumBigDecimalOrNullMerge(SQLExpression1, ColumnResultSelector>> columnSelectorExpression) {
        return sumBigDecimalOrDefaultMerge(columnSelectorExpression, null);
    }

   default   BigDecimal sumBigDecimalOrDefaultMerge(SQLExpression1, ColumnResultSelector>> columnSelectorExpression, BigDecimal def){
        return sumBigDecimalOrDefault((t1, t2)->{
            columnSelectorExpression.apply(new Tuple2<>(t1, t2));
        },def);
   }

    default  TMember sumOrNullMerge(SQLExpression1, ColumnResultSelector>> columnSelectorExpression) {
        return sumOrDefaultMerge(columnSelectorExpression, null);
    }

   default   TMember sumOrDefaultMerge(SQLExpression1, ColumnResultSelector>> columnSelectorExpression, TMember def){
        return sumOrDefault((t1, t2)->{
            columnSelectorExpression.apply(new Tuple2<>(t1, t2));
        },def);
   }

    default  TMember maxOrNullMerge(SQLExpression1, ColumnResultSelector>> columnSelectorExpression) {
        return maxOrDefaultMerge(columnSelectorExpression, null);
    }

   default   TMember maxOrDefaultMerge(SQLExpression1, ColumnResultSelector>> columnSelectorExpression, TMember def){
        return maxOrDefault((t1, t2)->{
            columnSelectorExpression.apply(new Tuple2<>(t1, t2));
        },def);
   }

    default  TMember minOrNullMerge(SQLExpression1, ColumnResultSelector>> columnSelectorExpression) {
        return minOrDefaultMerge(columnSelectorExpression, null);
    }

   default   TMember minOrDefaultMerge(SQLExpression1, ColumnResultSelector>> columnSelectorExpression, TMember def){
        return minOrDefault((t1, t2)->{
            columnSelectorExpression.apply(new Tuple2<>(t1, t2));
        },def);
    }

    default  Double avgOrNullMerge(SQLExpression1, ColumnResultSelector>> columnSelectorExpression) {
        return avgOrDefaultMerge(columnSelectorExpression, null, Double.class);
    }

    default  BigDecimal avgBigDecimalOrNullMerge(SQLExpression1, ColumnResultSelector>> columnSelectorExpression) {
        return avgOrDefaultMerge(columnSelectorExpression, null, BigDecimal.class);
    }

    default  Float avgFloatOrNullMerge(SQLExpression1, ColumnResultSelector>> columnSelectorExpression) {
        return avgOrDefaultMerge(columnSelectorExpression, null, Float.class);
    }

    default  Double avgOrDefaultMerge(SQLExpression1, ColumnResultSelector>> columnSelectorExpression, Double def) {
        return avgOrDefaultMerge(columnSelectorExpression, def, Double.class);
    }

    default  BigDecimal avgBigDecimalOrDefaultMerge(SQLExpression1, ColumnResultSelector>> columnSelectorExpression, BigDecimal def) {
        return avgOrDefaultMerge(columnSelectorExpression, def, BigDecimal.class);
    }

    default  Float avgFloatOrDefaultMerge(SQLExpression1, ColumnResultSelector>> columnSelectorExpression, Float def) {
        return avgOrDefaultMerge(columnSelectorExpression, def, Float.class);
    }

  default    TResult avgOrDefaultMerge(SQLExpression1, ColumnResultSelector>> columnSelectorExpression, TResult def, Class resultClass){
        return avgOrDefault((t1, t2)->{
            columnSelectorExpression.apply(new Tuple2<>(t1, t2));
        },def,resultClass);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy