package com.jy.framework.mybatis.join;

public interface DefaultFunction {

    /**
     * 统计数量
     */
    default QueryFunction _count(Object obj) {
        return new QueryFunction(SqlConstant.COUNT, obj);
    }

    /**
     * 将多个字符串拼接
     */
    default QueryFunction _concat(Object... objs) {
        return new QueryFunction(SqlConstant.CONCAT, objs);
    }

    /**
     * 将多个字符串跳过,拼接
     */
    default QueryFunction _groupConcat(Object... objs) {
        return new QueryFunction(SqlConstant.GROUP_CONCAT, objs);
    }

    /**
     * 判断处理
     */
    default QueryFunction _if(Object obj1, Object obj2, Object obj3) {
        return new QueryFunction(SqlConstant.IF, obj1, obj2, obj3);
    }

    /**
     * 判断值是否为null
     */
    default QueryFunction _ifNull(Object obj1, Object obj2) {
        return new QueryFunction(SqlConstant.IFNULL, obj1, obj2);
    }

    /**
     * 最大值
     */
    default QueryFunction _max(AbstractSql queryColumn) {
        return new QueryFunction(SqlConstant.MAX, queryColumn);
    }

    /**
     * 最小值
     */
    default QueryFunction _min(AbstractSql queryColumn) {
        return new QueryFunction(SqlConstant.MIN, queryColumn);
    }

    /**
     * 替换字符串
     */
    default QueryFunction _replace(AbstractSql queryColumn, Object obj1, Object obj2) {
        return new QueryFunction(SqlConstant.REPLACE, queryColumn, obj1, obj2);
    }

    /**
     * 四舍五入
     */
    default QueryFunction _round(AbstractSql queryColumn, Number number) {
        return new QueryFunction(SqlConstant.ROUND, queryColumn, number);
    }

    /**
     * 截取字符串
     */
    default QueryFunction _substr(AbstractSql queryColumn, int position) {
        return new QueryFunction(SqlConstant.SUBSTR, queryColumn, position);
    }

    /**
     * 截取字符串
     */
    default QueryFunction _substr(AbstractSql queryColumn, int position, int length) {
        return new QueryFunction(SqlConstant.SUBSTR, queryColumn, position, length);
    }

    /**
     * 获取字符个数
     */
    default QueryFunction _length(Object obj) {
        return new QueryFunction(SqlConstant.LENGTH, obj);
    }

    /**
     * 查询字段(strList)中包含(str)的结果
     */
    default QueryFunction _findInSet(Object needle, Object haystack) {
        return new QueryFunction(SqlConstant.FIND_IN_SET, needle, haystack);
    }

    /**
     * 获取年
     */
    default QueryFunction _year(Object obj) {
        return new QueryFunction(SqlConstant.YEAR, obj);
    }

    /**
     * 获取月
     */
    default QueryFunction _month(Object obj) {
        return new QueryFunction(SqlConstant.MONTH, obj);
    }

    /**
     * 获取日
     */
    default QueryFunction _day(Object obj) {
        return new QueryFunction(SqlConstant.DAY, obj);
    }

    /**
     * 获取时
     */
    default QueryFunction _hour(Object obj) {
        return new QueryFunction(SqlConstant.HOUR, obj);
    }

    /**
     * 获取分
     */
    default QueryFunction _minute(Object obj) {
        return new QueryFunction(SqlConstant.MINUTE, obj);
    }

    /**
     * 获取秒
     */
    default QueryFunction _second(Object obj) {
        return new QueryFunction(SqlConstant.SECOND, obj);
    }

}