package frame.persist;
|
|
import org.apache.log4j.Logger;
|
|
import frame.util.Util;
|
import frame.variant.expression.Expression;
|
import frame.variant.expression.VariantSegment;
|
|
public class SQLCreator extends Expression {
|
|
protected static Logger logger;
|
|
|
static {
|
logger = Logger.getLogger(SQLCreator.class);
|
}
|
|
public SQLCreator(String sql) throws Exception {
|
super(sql, 8);
|
}
|
|
@Override
|
public void addVariant(String name) throws Exception {
|
if (Util.isEmptyStr(name)) {
|
return;
|
}
|
|
if (variantList.contains(name)) {
|
VariantSegment segment = variantList.get(name);
|
segments.add(segment);
|
}
|
else {
|
SQLVariant segment = new SQLVariant(name);
|
segments.add(segment);
|
variantList.add(name, segment);
|
}
|
}
|
|
public static String deletePageLimit(String sql) {
|
DataBaseType dbType = DataBaseType.MySQL;
|
|
if (DataBaseType.MySQL == dbType) {
|
return deleteMySQLPageLimit(sql);
|
}
|
else if (DataBaseType.Oracle == dbType) {
|
return deleteOraclePageLimit(sql);
|
}
|
else if (DataBaseType.SQLServer == dbType) {
|
return deleteSQLServerPageLimit(sql);
|
}
|
|
return null;
|
}
|
|
private static String deleteMySQLPageLimit(String sql) {
|
int pos_beginno = sql.indexOf("@{beginno}");
|
|
while (pos_beginno > 0) {
|
int pos_pagesize = sql.indexOf("@{pagesize}", pos_beginno + 1);
|
int pos_limit = sql.lastIndexOf("limit ", pos_beginno);
|
|
if (pos_pagesize > 0 && pos_limit > 0) {
|
sql = sql.substring(0, pos_limit) + sql.substring(pos_pagesize + "@{pagesize}".length());
|
}
|
|
pos_beginno = sql.indexOf("@{beginno}", pos_beginno + 1);
|
}
|
|
return sql;
|
}
|
|
private static String deleteOraclePageLimit(String sql) {
|
// TODO Auto-generated method stub
|
return null;
|
}
|
|
private static String deleteSQLServerPageLimit(String sql) {
|
// TODO Auto-generated method stub
|
return null;
|
}
|
|
public static void main(String[] args) {
|
String sql = "select agreement.*, dealer.code, dealer.name,"
|
+ "(select count(1) from agreementArea where agreementArea.parentid = agreement.id) as areaCount,"
|
+ "(select count(1) from agreementProduct where agreementProduct.parentid = agreement.id) as productCount"
|
+ "from agreement"
|
+ "left join dealer on agreement.customerid = dealer.id"
|
+ "where @{filter}"
|
+ "limit @{beginno}, @{pagesize}";
|
|
sql = deleteMySQLPageLimit(sql);
|
System.out.println(sql);
|
}
|
}
|