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

io.gallery.db.bean.DataBaseOperator Maven / Gradle / Ivy

package io.gallery.db.bean;

import io.gallery.db.util.DBT;
import io.gallery.db.util.DataBaseTools;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

/**
 * SQL操作符枚举
 */
public enum DataBaseOperator {
    /*--操作符开始--*/
    _eq(" = "),
    _ne(" != "),
    _gt(" > "),
    _lt(" < "),
    _ge(" >= "),
    _le(" <= "),
    _in(" in "),
    _is_null(" is null"),
    _is_not_null(" is not null"),
    _not_in(" not in "),
    _like(" like "),//like '%*%'
    _not_like(" not like "),// not like '%*%'
    _left_like(" like "),// like '*%'
    _left_not_like(" not like "),// not like '*%'
    _right_like(" like "),// like '%*%
    _right_not_like(" not like ")// not like '%*%
    ;
    /**
     * or 运算符
     */
    public static final String _or_ = "_or_";
    /**
     * 值为函数
     */
    public static final String _func = "_func";

    /**
     * 获取操作符
     *
     * @return String
     */
    public String getOperator() {
        return operator;
    }


    DataBaseOperator(String operator) {
        this.operator = operator;
    }

    /**
     * 枚举值
     */
    private String operator;

    /**
     * 判断字段中是否包含操作符或函数
     *
     * @param columnClause String
     * @return boolean
     */
    public static boolean containsOperator(String columnClause) {
        boolean result = false;
        if (DataBaseTools.isNotNull(columnClause)) {
            for (DataBaseOperator value : DataBaseOperator.values()) {
                String lowerCase = columnClause.toLowerCase();
                if (lowerCase.endsWith(value.name())) {
                    result = true;
                    break;
                }
            }
        }
        return result;
    }

    /**
     * 获取字符串中包含的操作符
     *
     * @param input String
     * @return String
     */
    public static String getOperator(String input) {
        String result = _eq.getOperator();
        if (DataBaseTools.isNotNull(input)) {
            for (DataBaseOperator value : DataBaseOperator.values()) {
                String lowerCase = input.toLowerCase();
                if (lowerCase.replace("__", "").endsWith(value.name())) {
                    result = value.getOperator();
                }
            }
        }
        return result;
    }

    /**
     * 获取字符串中包含的函数
     *
     * @param input String
     * @return String
     */
    public static String getFunction(String input) {
        String result = "";
        if (DBT.isNotNull(input) && input.contains(")")) {
            result = input.substring(0, input.indexOf(")") + 1);
        }
        return result;
    }

    /**
     * operator起始位置
     *
     * @param columnClause String
     * @return int
     */
    public static int indexOfOperator(String columnClause) {
        int result = -1;
        if (DataBaseTools.isNotNull(columnClause)) {
            columnClause = columnClause.toLowerCase();
            result = columnClause.length();
            String operator = "";
            List dataBaseOperators = Arrays.asList(DataBaseOperator.values());
            dataBaseOperators.sort(Comparator.comparingInt(o -> o.name().length()));
            if (DataBaseTools.isNotNull(columnClause)) {
                for (DataBaseOperator value : dataBaseOperators) {
                    if (columnClause.endsWith(value.name())) {
                        operator = value.name();
                    }
                }
            }
            if (DataBaseTools.isNotNull(operator)) {
                result = columnClause.indexOf(operator);
            }
        }
        return result;
    }

    /**
     * 获取真实表名.字段名
     *
     * @param input String
     * @return String
     */
    public static String getRealColumn(String input) {
        String result = input;
        if (DBT.isNotNull(result)) {
            //scjydwjbxx*length(hylbdm)_eq -> scjydwjbxx*length(hylbdm)
            if (containsOperator(result)) {
                result = result.substring(0, indexOfOperator(result));
            }
            //scjydwjbxx.length(hylbdm)
            result = result.replace("*", ".");
            if (result.contains("(") && result.contains(")")) {
                if (result.contains(",")) {
                    result = result.substring(result.indexOf("(") + 1, result.indexOf(","));
                } else {
                    result = result.substring(result.indexOf("(") + 1, result.indexOf(")"));
                }
            }
        }
        return result.substring(0, !result.contains(_func) ? result.length() : result.indexOf(_func));
    }

    /**
     * 处理字段信息
     *
     * @param input String
     * @return ClauseColumn
     */
    public static ClauseColumn dealColumnClause(String input) {
        ClauseColumn clause = new ClauseColumn();
        clause.setColumn(getRealColumn(input));
        clause.setFunction(getFunction(input));
        clause.setOperator(getOperator(input));
        clause.setOriginal(input);
        return clause;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy