package foundation.data.object;
|
|
import java.util.HashSet;
|
import java.util.Set;
|
|
import foundation.persist.NamedSQL;
|
import foundation.persist.source.NamedDataSource;
|
import foundation.server.config.DBaseType;
|
import foundation.variant.provider.DataEvent;
|
import foundation.variant.provider.IVariantsProvider;
|
import foundation.variant.provider.VariantProviderType;
|
|
public class BatchCounter implements IVariantsProvider {
|
|
public static String ProviderName = "BatchCounter";
|
public static Set<String> VariantNames;
|
private NamedDataSource dataSource;
|
private int total;
|
private int begin;
|
private int batch;
|
|
|
static {
|
VariantNames = new HashSet<String>();
|
VariantNames.add("pagesize");
|
VariantNames.add("recordcount");
|
VariantNames.add("beginno");
|
VariantNames.add(NamedSQL.Param_Page_limit);
|
VariantNames.add(NamedSQL.Param_Page_RowNo);
|
}
|
|
public BatchCounter(int total, int batch) {
|
this(NamedDataSource.getInstance(), total, batch);
|
}
|
|
public BatchCounter(NamedDataSource dataSource, int total, int batch) {
|
this.total = total;
|
this.begin = 0;
|
this.batch = batch;
|
this.dataSource = dataSource;
|
}
|
|
public void step(int step) {
|
begin = begin + step;
|
}
|
|
public String getLimitSQL() {
|
DBaseType type = dataSource.getDBaseType();
|
|
//1. MYSQL
|
if (type.isMySQL()) {
|
return " limit " + begin + ", " + batch;
|
}
|
|
//2. SQLServer
|
if (type.isSQLServer()) {
|
return " offset " + begin + " rows fetch next " + batch + " rows only";
|
}
|
|
// //3. Oracle
|
// if (type.isOracle()) {
|
// return " rowno >" + begin + " and rowno <= " + (begin + batch);
|
// }
|
|
return "";
|
}
|
|
public int getBatch() {
|
return batch;
|
}
|
|
@Override
|
public String getProviderName() {
|
return ProviderName;
|
}
|
|
@Override
|
public VariantProviderType getProviderType() {
|
return VariantProviderType.Transiant;
|
}
|
|
@Override
|
public Set<String> getVariantNames() {
|
return VariantNames;
|
}
|
|
@Override
|
public boolean containsVariant(String name) {
|
if (name == null) {
|
return false;
|
}
|
|
name = name.toLowerCase();
|
return VariantNames.contains(name);
|
}
|
|
@Override
|
public Object getVariantValue(DataEvent dataEvent, String name) {
|
if ("pageSize".equalsIgnoreCase(name)) {
|
return batch;
|
}
|
else if ("recordCount".equalsIgnoreCase(name)) {
|
return total;
|
}
|
else if ("beginNo".equalsIgnoreCase(name)) {
|
return begin;
|
}
|
else if ("endNo".equalsIgnoreCase(name)) {
|
return begin + batch;
|
}
|
else if (NamedSQL.Param_Page_limit.equalsIgnoreCase(name)) {
|
return getLimitSQL();
|
}
|
else if (NamedSQL.Param_Page_RowNo.equalsIgnoreCase(name)) {
|
return getLimitSQL();
|
}
|
|
return null;
|
}
|
}
|