package com.nfwork.dbfound.db.dialect;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MySqlDialect implements SqlDialect {
public String getPagerSql(String sql, int pagerSize, long startWith) {
String pagersql = sql + " limit " + startWith + " , " + pagerSize;
return pagersql;
}
public String getWhenSql(String when) {
String pagersql = "select " + when;
return pagersql;
}
public String parseSql(String sql) {
/*sql = changSysDate(sql);
sql = changNvl(sql);
String rSql;
do {
rSql = sql;
sql = chang(sql);
} while (sql != null);
sql = rSql;
*/
return sql;
}
/**
* sysdate 和now()转化
*
* @param sql
* @return
*/
public String changNvl(String sql) {
Pattern p = Pattern.compile(
"[\t\n,>< ()\\+\\-=]+nvl[ (]+",
Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(sql);
StringBuffer buf = new StringBuffer();
while (m.find()) {
String text = m.group().toLowerCase();
m.appendReplacement(buf, text.replace("nvl", "ifnull"));
}
m.appendTail(buf);
return buf.toString();
}
/**
* sysdate 和now()转化
*
* @param sql
* @return
*/
public String changSysDate(String sql) {
Pattern p = Pattern.compile(
"[\t\n,>< (\\+\\-=]+sysdate[\t\n,><) \\+\\-=]+",
Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(sql);
StringBuffer buf = new StringBuffer();
while (m.find()) {
String text = m.group().toLowerCase();
m.appendReplacement(buf, text.replace("sysdate", "now()"));
}
m.appendTail(buf);
return buf.toString();
}
/**
* 字符串拼接函数转化
*
* @param sql
* @return
*/
public String chang(String sql) {
Pattern p = Pattern.compile(
"[-(),'_a-z0-9\\.\\?]+[ ]*\\|\\|+[ ]*[-(),'_a-zA-Z0-9\\.\\?]+",
Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(sql);
StringBuffer buf = new StringBuffer();
if (m.find()) {
String text = m.group();
String[] strch = text.split("\\|\\|");
m.appendReplacement(buf, "concat(" + strch[0].trim() + ","
+ strch[1].trim() + ")");
m.appendTail(buf);
return buf.toString();
}
return null;
}
}