// Path: QuickProject-Core/src/main/java/chanedi/dao/dialect/Dialect.java
// public abstract class Dialect {
// 
//     public abstract String addLimitString(String sql, int skipResults, int maxResults);
// 
//     public abstract String addSortString(String sql, List<Sort> sortList);
// 
// }
// 
// Path: QuickProject-Core/src/main/java/chanedi/dao/dialect/H2Dialect.java
// public class H2Dialect extends Dialect {
// 
// 	@Override
// 	public String addLimitString(String sql, int offset, int limit) {
// 		return MySql5PageHepler.addLimitString(sql, offset, limit);
// 	}
// 
//     @Override
//     public String addSortString(String sql, List<Sort> sortList) {
//         return SortHelper.addSortString(sql, sortList);
//     }
// 
// }
// 
// Path: QuickProject-Core/src/main/java/chanedi/dao/dialect/MySql5Dialect.java
// public class MySql5Dialect extends Dialect {
// 
// 	public String getLimitString(String sql, boolean hasOffset) {
// 		return MySql5PageHepler.addLimitString(sql, -1, -1);
// 	}
// 
// 	@Override
// 	public String addLimitString(String sql, int offset, int limit) {
// 		return MySql5PageHepler.addLimitString(sql, offset, limit);
// 	}
// 
//     @Override
//     public String addSortString(String sql, List<Sort> sortList) {
//         return SortHelper.addSortString(sql, sortList);
//     }
// 
//     public boolean supportsLimit() {
// 		return true;
// 	}
// 
// }
// 
// Path: QuickProject-Core/src/main/java/chanedi/dao/dialect/OracleDialect.java
// public class OracleDialect extends Dialect {
// 
// 	@Override
// 	public String addLimitString(String sql, int offset, int limit) {
// 		sql = sql.trim();
// 		boolean isForUpdate = false;
// 		if (sql.toLowerCase().endsWith(" FOR UPDATE")) {
// 			sql = sql.substring(0, sql.length() - 11);
// 			isForUpdate = true;
// 		}
// 
// 		StringBuffer pagingSelect = new StringBuffer(sql.length() + 100);
// 
// 		pagingSelect.append("SELECT * FROM ( SELECT ROW_.*, ROWNUM ROWNUM_ FROM ( ");
// 
// 		pagingSelect.append(sql);
// 
// 		pagingSelect.append(" ) ROW_ ) WHERE ROWNUM_ > " + offset + " AND ROWNUM_ <= " + (offset + limit));
// 
// 		if (isForUpdate) {
// 			pagingSelect.append(" FOR UPDATE");
// 		}
// 
// 		return pagingSelect.toString();
// 	}
// 
//     @Override
//     public String addSortString(String sql, List<Sort> sortList) {
//         return SortHelper.addSortString(sql, sortList);
//     }
// 
// }
// 
// Path: QuickProject-Util/src/main/java/chanedi/enums/DBDialectType.java
// public enum DBDialectType {
// 
//     MYSQL("mysql"), ORACLE("oracle"), H2("h2");
// 
//     private String type;
// 
//     private DBDialectType(String type) {
//         this.type = type;
//     }
// 
//     @Override
//     public String toString() {
//         return type;
//     }
// 
// }


import chanedi.dao.dialect.Dialect;
import chanedi.dao.dialect.H2Dialect;
import chanedi.dao.dialect.MySql5Dialect;
import chanedi.dao.dialect.OracleDialect;
import chanedi.enums.DBDialectType;
import org.apache.ibatis.session.Configuration;
package chanedi.dao.impl.mybatis;


/**
 * @author Chanedi
 */
public class DialectParser {

    public static Dialect parse(Configuration configuration) {
        DBDialectType databaseType = null;
        try {
            databaseType = DBDialectType.valueOf(configuration.getVariables().getProperty("dialect").toUpperCase());
        } catch (Exception e) {
            // ignore
        }
        if (databaseType == null) {
            throw new RuntimeException("the value of the dialect property in configuration.xml is not defined : " + configuration.getVariables().getProperty("dialect"));
        }
        Dialect dialect = null;
        switch (databaseType) {
            case MYSQL:
                dialect = new MySql5Dialect();
                break;
            case ORACLE:
// Path: QuickProject-Core/src/main/java/chanedi/dao/dialect/Dialect.java
// public abstract class Dialect {
// 
//     public abstract String addLimitString(String sql, int skipResults, int maxResults);
// 
//     public abstract String addSortString(String sql, List<Sort> sortList);
// 
// }
// 
// Path: QuickProject-Core/src/main/java/chanedi/dao/dialect/H2Dialect.java
// public class H2Dialect extends Dialect {
// 
// 	@Override
// 	public String addLimitString(String sql, int offset, int limit) {
// 		return MySql5PageHepler.addLimitString(sql, offset, limit);
// 	}
// 
//     @Override
//     public String addSortString(String sql, List<Sort> sortList) {
//         return SortHelper.addSortString(sql, sortList);
//     }
// 
// }
// 
// Path: QuickProject-Core/src/main/java/chanedi/dao/dialect/MySql5Dialect.java
// public class MySql5Dialect extends Dialect {
// 
// 	public String getLimitString(String sql, boolean hasOffset) {
// 		return MySql5PageHepler.addLimitString(sql, -1, -1);
// 	}
// 
// 	@Override
// 	public String addLimitString(String sql, int offset, int limit) {
// 		return MySql5PageHepler.addLimitString(sql, offset, limit);
// 	}
// 
//     @Override
//     public String addSortString(String sql, List<Sort> sortList) {
//         return SortHelper.addSortString(sql, sortList);
//     }
// 
//     public boolean supportsLimit() {
// 		return true;
// 	}
// 
// }
// 
// Path: QuickProject-Core/src/main/java/chanedi/dao/dialect/OracleDialect.java
// public class OracleDialect extends Dialect {
// 
// 	@Override
// 	public String addLimitString(String sql, int offset, int limit) {
// 		sql = sql.trim();
// 		boolean isForUpdate = false;
// 		if (sql.toLowerCase().endsWith(" FOR UPDATE")) {
// 			sql = sql.substring(0, sql.length() - 11);
// 			isForUpdate = true;
// 		}
// 
// 		StringBuffer pagingSelect = new StringBuffer(sql.length() + 100);
// 
// 		pagingSelect.append("SELECT * FROM ( SELECT ROW_.*, ROWNUM ROWNUM_ FROM ( ");
// 
// 		pagingSelect.append(sql);
// 
// 		pagingSelect.append(" ) ROW_ ) WHERE ROWNUM_ > " + offset + " AND ROWNUM_ <= " + (offset + limit));
// 
// 		if (isForUpdate) {
// 			pagingSelect.append(" FOR UPDATE");
// 		}
// 
// 		return pagingSelect.toString();
// 	}
// 
//     @Override
//     public String addSortString(String sql, List<Sort> sortList) {
//         return SortHelper.addSortString(sql, sortList);
//     }
// 
// }
// 
// Path: QuickProject-Util/src/main/java/chanedi/enums/DBDialectType.java
// public enum DBDialectType {
// 
//     MYSQL("mysql"), ORACLE("oracle"), H2("h2");
// 
//     private String type;
// 
//     private DBDialectType(String type) {
//         this.type = type;
//     }
// 
//     @Override
//     public String toString() {
//         return type;
//     }
// 
// }


// Path: QuickProject-Core/src/main/java/chanedi/dao/impl/mybatis/DialectParser.java
import chanedi.dao.dialect.Dialect;
import chanedi.dao.dialect.H2Dialect;
import chanedi.dao.dialect.MySql5Dialect;
import chanedi.dao.dialect.OracleDialect;
import chanedi.enums.DBDialectType;
import org.apache.ibatis.session.Configuration;

package chanedi.dao.impl.mybatis;


/**
 * @author Chanedi
 */
public class DialectParser {

    public static Dialect parse(Configuration configuration) {
        DBDialectType databaseType = null;
        try {
            databaseType = DBDialectType.valueOf(configuration.getVariables().getProperty("dialect").toUpperCase());
        } catch (Exception e) {
            // ignore
        }
        if (databaseType == null) {
            throw new RuntimeException("the value of the dialect property in configuration.xml is not defined : " + configuration.getVariables().getProperty("dialect"));
        }
        Dialect dialect = null;
        switch (databaseType) {
            case MYSQL:
                dialect = new MySql5Dialect();
                break;
            case ORACLE:
                dialect = new OracleDialect();