package org.jplus.hyb.database;
import java.util.HashMap;
import java.util.Map;
/**
*
* @author Hyberbin
*/
public class SqlFilter {
private Map<String, Object> eqMap;//条件
private Map<String, String> otherMap;
//查询条数和记录的sql语句
private String countSQL;
private String selectSQL;
private boolean isFilter = false;//是否要转换
private boolean isFiltered=false;//是否转换过
public void setEqMap(String key, Object value) {
if (value != null) {
if (eqMap == null) {
eqMap = new HashMap();
isFilter = true;
}
eqMap.put(key, value);
}
}
public void setOtherMap(String key, String value) {
if (value != null) {
if (otherMap == null) {
otherMap = new HashMap();
isFilter = true;
}
otherMap.put(key, value);
}
}
public void clear(){
eqMap=null;
otherMap=null;
isFiltered=false;
isFilter=false;
}
public void getSql(String sql) {
if (isFilter&&!isFiltered) {
StringBuilder heads = new StringBuilder();
heads.append("select hyberbin.* from( ");
StringBuilder headc = new StringBuilder();
headc.append("select count(*) as count from( ");
StringBuilder sb = new StringBuilder();
String lower = sql.toLowerCase();
String limit = "";
if (lower.contains("limit")) {
limit = sql.substring(lower.indexOf("limit"));
sql = sql.substring(0, lower.indexOf("limit"));
}
sb.append(sql);
sb.append(") hyberbin ");
sb.append(" where 1=1 ");
if (eqMap != null && eqMap.size() > 0) {
for (String key : eqMap.keySet()) {
sb.append(" and hyberbin.").append(key).append("=").append(eqMap.get(key)).append(" ");
}
}
if (otherMap != null && otherMap.size() > 0) {
for (String key : otherMap.keySet()) {
sb.append(" and hyberbin.").append(key).append(eqMap.get(key)).append(" ");
}
}
selectSQL = heads.append(sb.append(limit)).toString();
countSQL = headc.append(sb).toString();
isFiltered=true;
}else if(isFiltered){
selectSQL=sql;
}
}
public String getCountSQL() {
return countSQL;
}
public String getSelectSQL() {
return selectSQL;
}
public boolean isFilter() {
return isFilter;
}
public boolean isFiltered() {
return isFiltered;
}
}