/**
* Alipay.com Inc.
* Copyright (c) 2004-2012 All Rights Reserved.
*/
package com.alipay.zdal.client.util.condition;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.alipay.zdal.common.DBType;
import com.alipay.zdal.common.sqljep.function.Comparative;
import com.alipay.zdal.parser.GroupFunctionType;
import com.alipay.zdal.parser.result.DefaultSqlParserResult;
import com.alipay.zdal.parser.result.SqlParserResult;
import com.alipay.zdal.parser.sqlobjecttree.ComparativeMapChoicer;
import com.alipay.zdal.parser.visitor.OrderByEle;
/**
*
* @author ����
* @version $Id: SimpleCondition.java, v 0.1 2014-1-6 ����05:16:45 Exp $
*/
public class SimpleCondition implements RuleRouteCondition, ComparativeMapChoicer {
private String virtualTableName;
private DBType dbType;
public static final int EQ = Comparative.Equivalent;
private Map<String, Comparative> parameters = new HashMap<String, Comparative>();
private List<OrderByEle> orderBys = Collections.emptyList();
private List<OrderByEle> groupBys = Collections.emptyList();
private int max = DefaultSqlParserResult.DEFAULT_SKIP_MAX;
private int skip = DefaultSqlParserResult.DEFAULT_SKIP_MAX;
GroupFunctionType groupFunctionType = GroupFunctionType.NORMAL;
public String getVirtualTableName() {
return virtualTableName;
}
public SqlParserResult getSqlParserResult() {
//return new DummySqlParcerResult(this, virtualTableName);
return new DummySqlParcerResult(this);
}
// public MatcherResult match(LogicTableRule rule)
// throws TDLCheckedExcption {
// long currentTime = System.currentTimeMillis();
// Set<RuleChain> ruleChains = rule.getRuleChain();
// for(RuleChain ruleChain:ruleChains){
//
// }
// TargetDBMetaData targetDBMetaData = provider.getDBAndTabs(virtualTableName, parameters);
// long elapsedTime = System.currentTimeMillis();
// StringBuilder key2Builder = new StringBuilder();
// key2Builder.append("DIRECT_DB|").append(virtualTableName).append("|")
// .append("SimpleCondition").append("|").append(virtualTableName);
// add(buildTableKey1(virtualTableName), buildExecuteSqlKey2(key2Builder.toString()), KEY3_GET_DB_AND_TABLES,
// currentTime - elapsedTime, currentTime - elapsedTime);
// return targetDBMetaData;
// }
public ComparativeMapChoicer getCompMapChoicer() {
return this;
}
public Map<String, Comparative> getColumnsMap(List<Object> arguments, Set<String> partnationSet) {
Map<String, Comparative> retMap = new HashMap<String, Comparative>(parameters.size());
for (String str : partnationSet) {
if (str != null) {
//��Ϊgroovy�Ǵ�Сд���еģ��������ֻ����ƥ���ʱ��תΪСд������map�е�ʱ����Ȼʹ��ԭ���Ĵ�Сд
Comparative comp = parameters.get(str.toLowerCase());
if (comp != null) {
retMap.put(str, comp);
}
}
}
return retMap;
}
public static Comparative getComparative(int i, Comparable<?> c) {
return new Comparative(i, c);
}
/**
* �����������
*
* @param virtualTableName
* �������
*/
public void setVirtualTableName(String virtualTableName) {
if (virtualTableName == null) {
throw new IllegalArgumentException("������������");
}
this.virtualTableName = virtualTableName.toLowerCase();
}
public Map<String, Comparative> getParameters() {
return parameters;
}
/**
* ���һ��Ĭ��Ϊ=�IJ�����
*
* @param str
* ����������
* @param comp
* ������ֵ��һ��Ϊ�������ͻ�ɱȽ�����
*/
public void put(String key, Comparable<?> parameter) {
if (key == null) {
throw new IllegalArgumentException("keyΪnull");
}
if (parameter instanceof Comparative) {
parameters.put(key.toLowerCase(), (Comparative) parameter);
} else if (parameter instanceof Comparable<?>) {
parameters.put(key.toLowerCase(), getComparative(EQ, parameter));
}
}
public DBType getDBType() {
return dbType;
}
public void setDBType(DBType dbType) {
this.dbType = dbType;
}
public List<OrderByEle> getOrderBys() {
return orderBys;
}
public void setOrderBys(List<OrderByEle> orderBys) {
this.orderBys = orderBys;
}
public List<OrderByEle> getGroupBys() {
return groupBys;
}
public void setGroupBys(List<OrderByEle> groupBys) {
this.groupBys = groupBys;
}
public int getMax() {
return max;
}
public void setMax(int max) {
this.max = max;
}
public int getSkip() {
return skip;
}
public void setSkip(int skip) {
this.skip = skip;
}
public GroupFunctionType getGroupFunctionType() {
return groupFunctionType;
}
public void setGroupFunctionType(GroupFunctionType groupFunctionType) {
this.groupFunctionType = groupFunctionType;
}
}