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

io.gallery.db.util.DataBaseProvider Maven / Gradle / Ivy

package io.gallery.db.util;

import io.gallery.db.bean.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
import java.util.stream.Stream;


public class DataBaseProvider {
    private static final Log logger = LogFactory.getLog(DataBaseProvider.class);

    private static DataBaseConfig dataBaseConfig = (DataBaseConfig) DataBaseSpringUtil.getBean("dataBaseConfig");

    public static String insert(Map input) {
        Map values = (Map) input.get("values");
        String table = (String) input.get("table");
        return new SQL() {{
            INSERT_INTO(table);
            if (values != null) {
                for (String key : values.keySet()) {
                    Object value = values.get(key);//值
                    if (value instanceof ClauseValue) {
                        Optional.of((ClauseValue) value).ifPresent(clauseValue -> VALUES(key, "#{values." + key + ".value}" + clauseValue.getOperator()));
                    } else {
                        VALUES(key, "#{values." + key + "}");
                    }
                }
            }
        }}.toString();
    }

    public static String delete(Map input) {
        Map where = (Map) input.get("where");
        String table = (String) input.get("table");
        return new SQL() {{
            DELETE_FROM(table);
            if (where != null && where.keySet().size() > 0) {
                for (String key : where.keySet()) {
                    String ids = String.valueOf(where.get(key));
                    ids = ids.replaceAll("'", "");
                    String[] strings = ids.split(",");
                    if (strings.length > 1) {
                        where.put(key, Stream.of(strings).collect(Collectors.joining("','", "'", "'")));
                        WHERE(key + " in (${where." + key + "})");
                    } else {
                        WHERE(key + " = #{where." + key + "}");
                    }
                }
            } else {
                WHERE("1=-1");
            }
        }}.toString();
    }


    public static String deleteByParams(Map input) {
        Map where = (Map) input.get("where");
        String table = (String) input.get("table");
        SQL sql = new SQL();
        sql.DELETE_FROM(table);
        if (where != null && where.keySet().size() > 0) {
            setWhereClause(where, sql);
        } else {
            sql.WHERE("1=-1");
        }
        return sql.toString();
    }

    public static String update(Map input) {
        Map values = (Map) input.get("values");
        Map where = (Map) input.get("where");
        String table = (String) input.get("table");
        return new SQL() {{
            UPDATE(table);
            if (values != null) {
                for (String key : values.keySet()) {
                    Object value = values.get(key);//值
                    if (value instanceof ClauseValue) {
                        Optional.of((ClauseValue) value).ifPresent(clauseValue -> SET(key + " = #{values." + key + ".value}" + clauseValue.getOperator()));
                    } else {
                        SET(key + " = #{values." + key + "}");
                    }
                }
                for (String key : where.keySet()) {
                    Object value = where.get(key);//值
                    if (value instanceof ClauseValue) {
                        Optional.of((ClauseValue) value).ifPresent(clauseValue -> WHERE(key + " = #{where." + key + ".value}" + clauseValue.getOperator()));
                    } else {
                        WHERE(key + " = #{where." + key + "}");
                    }
                }
            }
        }}.toString();
    }

    public static String select(Map input) {
        return getListSQL(input);
    }

    public static String selectOne(Map input) {
        return getListSQL(input) + " limit 1 ";
    }

    public static String count(Map input) {
        return "select count(1) from (" + getListSQL(input, true) + ") t";
    }

    public static String execute(String sql) {
        return sql;
    }

    public static String executeWithParams(Map params) {
        return (String) params.get("executeWithParams");
    }

    public static String columns(@Param("table") final String table, @Param("schema") final String schema) {
        if (dataBaseConfig != null && DataBasePlatform.sqlite.name().equalsIgnoreCase(dataBaseConfig.getPlatform())) {
            String tableName = DBT.filterSql(table);
            Optional.ofNullable(DB.selectOne("SELECT name FROM sqlite_master where name='db_tablecolumns'")).ifPresent(t -> {
                if (t.get("name") == null) {//表不存在
                    logger.info("create table [db_tablecolumns] in sqlite");
                    DB.execute("CREATE TABLE 'db_tablecolumns' ('tablename' TEXT, 'name' TEXT, 'type' TEXT, 'pk' TEXT)");
                }
            });
            DB.insertOrUpdate("delete from db_tablecolumns where tablename='" + tableName + "'");
            DB.select("PRAGMA table_info([" + tableName + "])").stream().forEach(columns -> {
                String type = (String) columns.get("type");
                if (DBT.isNotNull(type) && type.contains("(")) {
                    columns.put("type", type.substring(0, type.indexOf("(")));
                }
                DB.insertOrUpdate("insert into db_tablecolumns(tablename,name,type,pk) values('" + tableName + "',#{name},#{type},#{pk})", columns);
            });
            return new SQL() {{//sqlite
                SELECT("name||'::'||type COLUMN_NAME");
                FROM("db_tablecolumns");
                WHERE("tablename=#{table}");
            }}.toString();
        } else if (dataBaseConfig != null && DataBasePlatform.dm.name().equalsIgnoreCase(dataBaseConfig.getPlatform())) {
            return new SQL() {{//dm
                SELECT("concat(column_name,'::',data_type) COLUMN_NAME");
                FROM("all_tab_columns");
                WHERE("table_name=#{table}");
                if (DataBaseTools.isNotNull(schema)) {
                    WHERE("owner=#{schema}");
                }
            }}.toString();
        } else {
            return new SQL() {{//mysql,postgre,sqlserver
                SELECT("concat(column_name,'::',data_type) COLUMN_NAME");
                FROM("information_schema.COLUMNS");
                WHERE("table_name=#{table}");
                if (DataBaseTools.isNotNull(schema)) {
                    WHERE("table_schema=#{schema}");
                }
            }}.toString();
        }
    }

    public static String getListSQL(Map input, boolean count) {
        String sqlToExcute = "";
        ConcurrentHashMap where = new ConcurrentHashMap((Map) input.get("where"));
        String defaultDb = (String) input.get("defaultDb");
        dataBaseConfig = (DataBaseConfig) input.getOrDefault("dataBaseConfig", dataBaseConfig);
        String deafultPlatform = dataBaseConfig.getPlatform();
        String deafultTreeColumn = dataBaseConfig.getTreeColumn();
        String funcDict = dataBaseConfig.getFuncDict();
        String funcDicts = dataBaseConfig.getFuncDicts();
        String table = (String) input.get("table");
        String keyName = (String) input.get("keyName");
        String treeColumn = (String) Optional.ofNullable(input.get("treeColumn")).orElse(deafultTreeColumn);
        Boolean tree = (Boolean) input.get("tree");
        if (tree == null) {
            tree = false;
        }
        String columns = "*";
        Set columnWithTypes = (Set) input.get("columnWithTypes");
        if (DataBaseTools.isNotNull((String) input.get("columns"))) {
            columns = (String) input.get("columns");
        }
        if (DataBasePlatform.sqlserver.name().equals(deafultPlatform)) {
            table = "[" + table + "]";
        }
        SQL sql = new SQL();
        Map limit = (Map) input.get("limit");
        Object orderClause = input.get("orderClause");
        Object groupByClause = input.get("groupByClause");
        String columnToShow = columns;
        StringBuilder functionStr = new StringBuilder();
        if (count) {
            if (groupByClause == null) {
                columnToShow = table + ".*";
            }
            sql.SELECT(columnToShow);
        } else {
            if (groupByClause == null) {
                boolean needDict = "true".equals(String.valueOf(input.get("needDict")));
                boolean needDicts = "true".equals(String.valueOf(input.get("needDicts")));
                boolean needKey = "true".equals(String.valueOf(input.get("needKey")));
                String dict = (String) where.get("dict");
                String dicts = (String) where.get("dicts");
                String userFullNames = (String) where.get("userFullNames");
                String alias = (String) where.get("alias");
                String split = "_";
                String prefixDb = "";
                if (DBT.isNotNull(defaultDb)) {
                    prefixDb = defaultDb + ".";
                }
                if (DataBaseTools.isNotNull(dict)) {
                    if (dict.contains(":")) {
                        split = ":";
                    }
                    for (String dictInfo : dict.split(",")) {
                        String[] dictNo = dictInfo.split(split);
                        if (dictNo.length == 2) {
                            functionStr.append(",").append(prefixDb).append(funcDict).append("('").append(dictNo[1]).append("',").append(dictNo[0]).append(") ").append(dictNo[0].replace(".", "_")).append("Str");
                        }
                    }
                }
                if (DataBaseTools.isNotNull(dicts)) {
                    if (dicts.contains(":")) {
                        split = ":";
                    }
                    for (String dictInfo : dicts.split(",")) {
                        String[] dictsNo = dictInfo.split(split);
                        if (dictsNo.length == 2) {
                            functionStr.append(",").append(prefixDb).append(funcDicts).append("('").append(dictsNo[1]).append("',").append(dictsNo[0]).append(") ").append(dictsNo[0].replace(".", "_")).append("AllStr");
                        }
                    }
                }
                if (DataBaseTools.isNotNull(userFullNames)) {
                    String[] arrays = userFullNames.split(",");
                    for (String array : arrays) {
                        functionStr.append(",").append(defaultDb).append(".userFullNames(").append(array).append(") ").append(array).append("Name");
                    }
                }
                if (needKey) {//需要翻译外键信息

                    if (columnWithTypes.stream().anyMatch(c -> c.contains("dbuid::"))) {
                        functionStr.append(",").append(prefixDb).append("db_user(").append(table).append(".dbuid) dbuname");
                    }
                    if (columnWithTypes.stream().anyMatch(c -> c.contains("dbcuid::"))) {
                        functionStr.append(",").append(prefixDb).append("db_user(").append(table).append(".dbcuid) dbcuname");
                    }
                    if (columnWithTypes.stream().anyMatch(c -> c.contains("dbuuid::"))) {
                        functionStr.append(",").append(prefixDb).append("db_user(").append(table).append(".dbuuid) dbuuname");
                    }
                    if (columnWithTypes.stream().anyMatch(c -> c.contains("dborgid::"))) {
                        functionStr.append(",").append(prefixDb).append("db_org(").append(table).append(".dborgid) dborgname");
                    }
                    if (columnWithTypes.stream().anyMatch(c -> c.contains("dbdepid::"))) {
                        functionStr.append(",").append(prefixDb).append("db_dep(").append(table).append(".dbdepid) dbdepname");
                    }

                }
                if (needDict) {//需要翻译字典信息
                    for (String columnWithType : columnWithTypes) {
                        if (columnWithType.contains(".dbdict")) {//翻译数据字典
                            String column = columnWithType.substring(columnWithType.indexOf("dbdict"), columnWithType.indexOf("::"));
                            String no = column.replace("dbdict", "");
                            String aliaNo = "\"" + no + "\"";//加双引号防止预留关键字冲突
                            functionStr.append(",").append(prefixDb).append("db_dict('").append(no).append("',").append(table).append(".").append(column).append(") ").append(aliaNo);
                        }
                    }
                }
                String asSplit = "_as_";
                if (DataBaseTools.isNotNull(alias) && alias.contains(":")) {
                    asSplit = ":";
                }
                if (DataBaseTools.isNotNull(alias) && alias.contains(asSplit)) {
                    for (String array : alias.split(",")) {
                        functionStr.append(",").append(array.replace(asSplit, " as "));
                    }
                }
                columnToShow = columns + functionStr;
            }
            if (tree && (DataBasePlatform.postgres.name().equals(deafultPlatform) || DataBasePlatform.sqlite.name().equals(deafultPlatform))) {
                sql.SELECT(columnToShow + ",0 as tree_level");
            } else {
                sql.SELECT(columnToShow);
            }
            if (limit != null && limit.size() > 0) {
                if (DataBasePlatform.mysql.name().equals(deafultPlatform) || DataBasePlatform.dm.name().equals(deafultPlatform)) {
                    sql.LIMIT("#{limit.start},#{limit.length}");
                } else if (DataBasePlatform.postgres.name().equals(deafultPlatform)) {
                    sql.LIMIT("#{limit.length}");
                    sql.OFFSET("#{limit.start}");
                } else if (DataBasePlatform.sqlserver.name().equals(deafultPlatform)) {
                    sql.LIMIT("#{limit.length}");
                    sql.OFFSET("#{limit.start}");
                    sql.OFFSET_ROWS("#{limit.start}");
                    sql.FETCH_FIRST_ROWS_ONLY("#{limit.length}");
                } else {
                    sql.LIMIT("#{limit.start},#{limit.length}");
                }
            }
        }
        where.remove("dict");
        where.remove("dicts");
        where.remove("userFullNames");
        where.remove("alias");
        sql.FROM(table);
        setJoinClause(input, where, table, sql);
        setWhereClause(where, sql);
        if (tree && dataBaseConfig.isTreeFromRoot()) {
            String treeColumnClause = table + "." + treeColumn;
            if (where.size() == 0) {
                sql.WHERE("(" + treeColumnClause + " is null or trim(" + treeColumnClause + ") = '')");
            }
        }
        String orderBy = "";
        if (orderClause != null) {
            orderBy = orderClause.toString();
        } else {
            if (!count && DataBasePlatform.sqlserver.name().equals(deafultPlatform) && limit != null) {
                orderBy = "1";
            }
        }
        if (DBT.isNotNull(orderBy) && !tree) {
            sql.ORDER_BY(orderBy);
        }
        if (groupByClause != null) {
            sql.GROUP_BY(groupByClause.toString());
        }
        if (!count && tree) {
            if (DataBasePlatform.postgres.name().equals(deafultPlatform) || DataBasePlatform.sqlite.name().equals(deafultPlatform)) {
                SQL treeSql = new SQL();
                treeSql.SELECT(columnToShow + ",tree_level + 1 as tree_level").FROM(table).JOIN("t on " + table + "." + treeColumn + " = t." + keyName);
                setJoinClause(input, where, table, treeSql);
                SQL select = new SQL();
                select.SELECT("*");
                select.FROM("t");
                sqlToExcute = "with recursive t as (" + sql.toString() + " union all " + treeSql.toString() + ") " + select.toString();
                if (DBT.isNotNull(orderBy)) {
                    sqlToExcute += (" order by " + orderBy);
                }
            } else if (DataBasePlatform.mysql.name().equals(deafultPlatform)) {
                SQL treeSql = new SQL();
                String finalTable = table;
                treeSql.SELECT("t.*,temp.tree_level").FROM(finalTable + " t,(" + new SQL() {{
                    SELECT("@ids as _cids");
                    SELECT("(select @ids:=group_concat(" + keyName + ") from " + finalTable + " where find_in_set(" + treeColumn + ",@ids)) as _ids");
                    SELECT("@level :=@level+1 as tree_level");
                    FROM(finalTable + ",(select @ids:=group_concat(" + keyName + "),@level :=-1 from (" + sql.toString() + " group by " + keyName + ") t) business");
                    WHERE("@ids is not null");
                }} + ") temp").WHERE("find_in_set(t." + keyName + ",temp._cids)");
                sqlToExcute = treeSql.toString();
            } else {
                sqlToExcute = sql.toString();
            }
        } else {
            sqlToExcute = sql.toString();
        }
        return sqlToExcute;
    }

    private static void setJoinClause(Map input, ConcurrentHashMap where, String table, SQL sql) {
        String[] forginTableName = (String[]) input.get("forginTableName");
        if (forginTableName != null) {
            String[] forginKeyName = (String[]) input.get("forginKeyName");
            String[] forginTableKeyName = (String[]) input.get("forginTableKeyName");
            for (int i = 0; i < forginTableName.length; i++) {
                String name = forginTableName[i];
                String[] split = name.split(":");
                if (split.length > 1 && split[0].contains("right")) {
                    StringBuilder joinCondition = new StringBuilder(split[1] + " on " + table + "." + forginKeyName[i] + "=" + split[1] + "." + forginTableKeyName[i]);
                    String rightCondition = DataBaseTools.getByPattern(split[0], DataBaseConstant.PATTERN_BRACKETS);
                    if (DataBaseTools.isNotNull(rightCondition)) {
                        String[] rightConditions = rightCondition.split(",");
                        for (String condition : rightConditions) {
                            if (where.get(condition) != null) {
                                //拼接至right后
                                Object value = where.get(condition);
                                if (value != null) {
                                    joinCondition.append(" and ").append(condition).append("=").append(value).append(" ");
                                }
                                //移除条件,防止拼接到where后
                                where.keySet().remove(condition);
                            }
                        }
                    }
                    sql.RIGHT_OUTER_JOIN(joinCondition.toString());
                } else {
                    sql.LEFT_OUTER_JOIN(name + " on " + table + "." + forginKeyName[i] + "=" + name + "." + forginTableKeyName[i]);
                }
            }
        }
    }

    private static void setWhereClause(Map where, SQL sql) {
        for (String key : where.keySet()) {
            Object value = where.get(key);//值
            String operator = DataBaseOperator.getOperator(key);//操作符
            ClauseColumn clauseColumn = DataBaseOperator.dealColumnClause(key);
            if (value != null) {
                String valueClause = "#{where." + key + "}";
                if (!DataBaseOperator._not_in.getOperator().equalsIgnoreCase(clauseColumn.getOperator()) && !DataBaseOperator._in.getOperator().equalsIgnoreCase(clauseColumn.getOperator())) {
                    if (value instanceof ClauseValue) {
                        ClauseValue clauseValue = (ClauseValue) value;
                        valueClause = "#{where." + key + ".value}";
                        if (!key.contains(DataBaseOperator._func)) {
                            valueClause += clauseValue.getOperator();
                        } else //值包含函数
                        {
                            clauseValue.setValue(DBT.filterSql(clauseValue.getValue()));
                        }
                    }
                }
                if (key.contains(DataBaseOperator._left_not_like.name())) {
                    String column = getRealColumn(key, DataBaseOperator._left_not_like);
                    if (value instanceof Map) {
                        LinkedHashMap valueMap = (LinkedHashMap) value;
                        StringBuilder likeClause = new StringBuilder();
                        for (String likeKey : valueMap.keySet()) {
                            String likeValueClause = "#{where." + key + "." + likeKey + "}";
                            likeClause.append(" and ").append(column).append(operator).append(" CONCAT(").append(likeValueClause).append(",'%')");
                        }
                        sql.WHERE(DataBaseUtil.removeFirstSQLKeyWord(likeClause.toString()));
                    } else {
                        sql.WHERE(column + operator + " CONCAT(" + valueClause + ",'%')");
                    }
                } else if (key.contains(DataBaseOperator._right_not_like.name())) {
                    String column = getRealColumn(key, DataBaseOperator._right_not_like);
                    if (value instanceof Map) {
                        LinkedHashMap valueMap = (LinkedHashMap) value;
                        StringBuilder likeClause = new StringBuilder();
                        for (String likeKey : valueMap.keySet()) {
                            String likeValueClause = "#{where." + key + "." + likeKey + "}";
                            likeClause.append(" and ").append(column).append(operator).append(" CONCAT('%',").append(likeValueClause).append(")");
                        }
                        sql.WHERE(DataBaseUtil.removeFirstSQLKeyWord(likeClause.toString()));
                    } else {
                        sql.WHERE(column + operator + " CONCAT('%'," + valueClause + ")");
                    }
                } else if (key.contains(DataBaseOperator._left_like.name())) {
                    String column = getRealColumn(key, DataBaseOperator._left_like);
                    if (value instanceof Map) {
                        LinkedHashMap valueMap = (LinkedHashMap) value;
                        StringBuilder likeClause = new StringBuilder();
                        for (String likeKey : valueMap.keySet()) {
                            String likeValueClause = "#{where." + key + "." + likeKey + "}";
                            likeClause.append(" or ").append(column).append(operator).append(" CONCAT(").append(likeValueClause).append(",'%')");
                        }
                        sql.WHERE(DataBaseUtil.removeFirstSQLKeyWord(likeClause.toString()));
                    } else {
                        sql.WHERE(column + operator + " CONCAT(" + valueClause + ",'%')");
                    }
                } else if (key.contains(DataBaseOperator._right_like.name())) {
                    String column = getRealColumn(key, DataBaseOperator._right_like);
                    if (value instanceof Map) {
                        LinkedHashMap valueMap = (LinkedHashMap) value;
                        StringBuilder likeClause = new StringBuilder();
                        for (String likeKey : valueMap.keySet()) {
                            String likeValueClause = "#{where." + key + "." + likeKey + "}";
                            likeClause.append(" or ").append(column).append(operator).append(" CONCAT('%',").append(likeValueClause).append(")");
                        }
                        sql.WHERE(DataBaseUtil.removeFirstSQLKeyWord(likeClause.toString()));
                    } else {
                        sql.WHERE(column + operator + " CONCAT('%'," + valueClause + ")");
                    }
                } else if (key.contains(DataBaseOperator._not_like.name())) {
                    String column = getRealColumn(key, DataBaseOperator._not_like);
                    if (value instanceof Map) {
                        LinkedHashMap valueMap = (LinkedHashMap) value;
                        StringBuilder likeClause = new StringBuilder();
                        for (String likeKey : valueMap.keySet()) {
                            String likeValueClause = "#{where." + key + "." + likeKey + "}";
                            likeClause.append(" and ").append(column).append(operator).append(" CONCAT('%',").append(likeValueClause).append(",'%')");
                        }
                        sql.WHERE(DataBaseUtil.removeFirstSQLKeyWord(likeClause.toString()));
                    } else {
                        sql.WHERE(column + operator + " CONCAT('%'," + valueClause + ",'%')");
                    }
                } else if (key.contains(DataBaseOperator._like.name())) {
                    String column = getRealColumn(key, DataBaseOperator._like);
                    String[] columns = getRealColumn(key, DataBaseOperator._like).split(DataBaseOperator._or_);
                    if (value instanceof Map) {
                        LinkedHashMap valueMap = (LinkedHashMap) value;
                        StringBuilder likeClause = new StringBuilder();
                        for (String likeKey : valueMap.keySet()) {
                            String likeValueClause = "#{where." + key + "." + likeKey + "}";
                            likeClause.append(" or ").append(column).append(operator).append(" CONCAT('%',").append(likeValueClause).append(",'%')");
                        }
                        sql.WHERE(DataBaseUtil.removeFirstSQLKeyWord(likeClause.toString()));
                    } else {
                        StringBuilder likeClause = new StringBuilder();
                        for (String _column : columns) {
                            String likeColumnClause = _column + operator + " CONCAT('%'," + valueClause + ",'%')";
                            if (dataBaseConfig != null && DataBasePlatform.sqlite.name().equalsIgnoreCase(dataBaseConfig.getPlatform())) {
                                likeColumnClause = _column + operator + " '%'||" + valueClause + "||'%'";
                            }
                            likeClause.append(" or ").append(likeColumnClause);
                        }
                        sql.WHERE("(" + DataBaseUtil.removeFirstSQLKeyWord(likeClause.toString()) + ")");
                    }
                } else if (key.contains(DataBaseOperator._not_in.name()) || key.contains(DataBaseOperator._in.name())) {
                    //多个值用逗号分开
                    if (value instanceof ClauseValue) {
                        ClauseValue clauseValue = (ClauseValue) value;
                        List valueList = clauseValue.getValueList();
                        StringBuilder inClause = new StringBuilder();
                        for (int i = 0; i < valueList.size(); i++) {
                            String orClause = DataBaseOperator.getRealColumn(key) + (key.contains(DataBaseOperator._not_in.name()) ? "!=" : "=") + "  #{where." + key + ".valueList[" + i + "]}";
                            inClause.append(key.contains(DataBaseOperator._not_in.name()) ? "and " : " or ").append(orClause);
                        }
                        if (valueList.size() > 0) {
                            sql.WHERE("(" + DataBaseUtil.removeFirstSQLKeyWord(inClause.toString()) + ")");
                        }
                    }
                } else if (key.contains(DataBaseOperator._ge.name())) {
                    sql.WHERE(getRealColumn(key, DataBaseOperator._ge) + operator + valueClause);
                } else if (key.contains(DataBaseOperator._le.name())) {
                    sql.WHERE(getRealColumn(key, DataBaseOperator._le) + operator + valueClause);
                } else if (key.contains(DataBaseOperator._gt.name())) {
                    sql.WHERE(getRealColumn(key, DataBaseOperator._gt) + operator + valueClause);
                } else if (key.contains(DataBaseOperator._lt.name())) {
                    sql.WHERE(getRealColumn(key, DataBaseOperator._lt) + operator + valueClause);
                } else if (key.contains(DataBaseOperator._is_null.name())) {
                    sql.WHERE(getRealColumn(key, DataBaseOperator._is_null) + operator);
                } else if (key.contains(DataBaseOperator._is_not_null.name())) {
                    sql.WHERE(getRealColumn(key, DataBaseOperator._is_not_null) + operator);
                } else if (key.contains(DataBaseOperator._ne.name())) {
                    sql.WHERE(getRealColumn(key, DataBaseOperator._ne) + operator + valueClause);
                } else {
                    if (key.contains(DataBaseOperator._func)) {
                        valueClause = valueClause.replace("#", "$");
                        key = key.substring(0, key.indexOf(DataBaseOperator._func));
                    }
                    sql.WHERE(key.replace("*", ".").replace("|", ",") + operator + valueClause);
                }
            }
        }
    }

    private static String getListSQL(Map input) {
        return getListSQL(input, false);
    }

    private static String getRealColumn(String key, DataBaseOperator operator) {
        return key.replaceFirst(operator.name(), "").replace("*", ".").replace("|", ",");
    }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy