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

net.jrouter.paging.jdbc.dialect.Dialect Maven / Gradle / Ivy

package net.jrouter.paging.jdbc.dialect;

/**
 * 数据库语义工具。
 */
public abstract class Dialect {

    /**
     * 依据原生SQL生成数据库简易的Count语句。
     *
     * @param sql 原生SQL语句。
     *
     * @return 转换后的Count语句。
     */
    public static String getSimpleCountLimitSQL(String sql) {
        return "select count(*) from (" + sql + ") tmp_count";
    }

    /**
     * 依据原生SQL生成数据库Limit语句。
     *
     * @param query 原生SQL语句。
     * @param offset 起始偏移数。
     * @param limit 限制条目数。
     *
     * @return 转换后的Limit语句。
     */
    public abstract String getLimitString(String query, int offset, int limit);

    /**
     * 依据原生SQL生成数据库Count语句。
     *
     * @param query 原生SQL语句。
     * @param countLimit count限制条目数。
     *
     * @return 转换后的Count语句。
     */
    public String getCountString(String query, int countLimit) {
        if (hasLimit(countLimit)) {
            query = getLimitString(query, 0, countLimit);
        }
        return getSimpleCountLimitSQL(query);
    }

    /**
     * 判断是否限制条目数。
     *
     * @param limit 限制条目数。
     *
     * @return 限制数大于0且不为最大{@code Integer.MAX_VALUE}值。
     */
    protected boolean hasLimit(int limit) {
        return limit > 0 && limit != Integer.MAX_VALUE;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy