/**
* Alipay.com Inc.
* Copyright (c) 2004-2012 All Rights Reserved.
*/
package com.alipay.zdal.client.controller;
import java.util.ArrayList;
import java.util.List;
import com.alipay.zdal.client.dispatcher.DispatcherResult;
import com.alipay.zdal.client.dispatcher.EXECUTE_PLAN;
import com.alipay.zdal.parser.GroupFunctionType;
import com.alipay.zdal.rule.ruleengine.entities.retvalue.TargetDB;
/**
* һ�����ո���StatementҪ��ô���Ķ���
*
* �������˷ֿ�ֱ�Ľ����Ҳ������SQL�������Ϣ�������е�һЩ����
*
* �Ǵ�SQL�����������ȡ��ƥ�����г�ȡ��Ҫ��Ϣ��װ���ɵ�
*
* TargetDBMeta �� TargetDBMetaData �ϲ���ֱ����
* 1. ���˷ֱ������Ϊ���
*
* TODO final���⡣�Ƿ���������������
*
*
*/
public class DispatcherResultImp implements DispatcherResult {
/**
* maxֵ�����sql�и�����limit m,n,��rownum<xx ��maxֵ����֮�仯ΪӦ���е�ֵ
* ��Ҫע����ǣ�max������limitTo�ĺ��壬�����ʵ����Ϊ xxx<max����������
* <p>����oracle: rownum<=n max=n+1</p>
* <p>����mysql: limit m,n max=m+n</p>
*/
private final int max;
/**
* skipֵ�����sql�и�����limit m,n,��rownum>xx ��skipֵ����֮�仯ΪӦ���е�ֵ
* ��Ҫע����ǣ�skip������limitFrom�ĺ��壬�����ʵ����Ϊ xxx>=m����������
* <p>����oracle: rownum>n skip=n+1</p>
* <p>����mysql: limit m,n skip=m</p>
*/
private final int skip;
/**
* sql �е�order by ��Ϣ
*/
private final OrderByMessages orderByMessages;
/**
* ��sql�������Ƕ��select�е�columns�����group function��Ϣ��
* ���ô���group function,��parser���������жϣ�ȷ��ֻ��һ��group function��û�������С���������׳��쳣
* ����������group function����û�������д��ڣ���᷵�ظ�group function��Ӧ��Type
* ���û��group function�������������͵�sql(insert update��)����normal.
*/
private final GroupFunctionType groupFunctionType;
/**
* TODO primaryKey, splitDB, splitTab ��ֻ�����и���ʱ����ֵ���ƻ��˲����ԣ����Կ����Ż�
*/
/**
* �������ֿ�������Dz���������
*/
private ColumnMetaData uniqueKey;
/**
* �ֿ���б���Ϊ�ֿ���������������ģ������Ǹ�list.���������xml��������parameters���ÿһ��
* ��','�ָ�����Ŀ����Ӧlist�е�һ�ColumnMetaData�е�key��Ӧ��parameters��ÿһ����','�ָ�����Ŀ
* ��value��Ӧ�Ѿ�ͨ�����㲢�Ұ��˱����Ժ��ֵ�����ֵ����Ϊnull,Ϊnull���ʾ�û�û����sql�и�����Ӧ �IJ�����
*/
private final List<ColumnMetaData> splitDB = new ArrayList<ColumnMetaData>();
/**
* �ֱ������Ϊ�ֱ���������������ģ������Ǹ�ColumnMetaData����.���������xml�������˱�����е�parameters��
* ����ÿһ����','�ָ�����Ŀ����Ӧlist�е�һ�ColumnMetaData�е�key��Ӧ��parameters��ÿһ����','�ָ�����Ŀ
* ��value��Ӧ�Ѿ�ͨ�����㲢�Ұ��˱����Ժ��ֵ�����ֵ����Ϊnull,Ϊnull���ʾ�û�û����sql�и�����Ӧ �IJ�����
*/
private final List<ColumnMetaData> splitTab = new ArrayList<ColumnMetaData>();
/**
* ���ݿ�ִ�мƻ�
*/
private EXECUTE_PLAN databaseExecutePlan;
/**
* ���ִ�мƻ�������ж��������Ķ����ĸ�����ͬ����ô���ձ�����������Ǹ�ֵΪ��
* ������db1~5����ĸ����ֱ�Ϊ0,0,0,0,1:��ô���صı�ִ�мƻ�ΪSINGLE
* ������ĸ����ֱ�Ϊ0,1,2,3,4,5����ô���ر��ִ�мƻ�ΪMULTIPLE.
*/
private EXECUTE_PLAN tableExecutePlan;
public DispatcherResultImp(String virtualTableName, List<TargetDB> targetdbs,
boolean allowReverseOutput, int skip, int max,
OrderByMessages orderByMessages, GroupFunctionType groupFunctionType) {
this.skip = skip;
this.max = max;
this.orderByMessages = orderByMessages;
this.groupFunctionType = groupFunctionType;
this.virtualTableName = virtualTableName;
this.target = targetdbs;
this.allowReverseOutput = allowReverseOutput;
}
/**
* �Ƿ����������
*/
private boolean allowReverseOutput;
/**
* Ŀ���
*/
private final List<TargetDB> target;
/**
* �������
*/
private final String virtualTableName;
public List<TargetDB> getTarget() {
return target;
}
public int getMax() {
return max;
}
public int getSkip() {
return skip;
}
public OrderByMessages getOrderByMessages() {
return orderByMessages;
}
public String getVirtualTableName() {
return this.virtualTableName;
}
public ColumnMetaData getPrimaryKey() {
return uniqueKey;
}
public void setUniqueKey(ColumnMetaData uniqueKey) {
this.uniqueKey = uniqueKey;
}
public List<ColumnMetaData> getSplitDB() {
return splitDB;
}
public void addSplitDB(ColumnMetaData splitDB) {
this.splitDB.add(splitDB);
}
public void addSplitTab(ColumnMetaData splitTab) {
this.splitTab.add(splitTab);
}
public boolean allowReverseOutput() {
return this.allowReverseOutput;
}
public void needAllowReverseOutput(boolean reverse) {
this.allowReverseOutput = reverse;
}
public GroupFunctionType getGroupFunctionType() {
return groupFunctionType;
}
public List<ColumnMetaData> getSplitTab() {
return splitTab;
}
public EXECUTE_PLAN getDatabaseExecutePlan() {
return databaseExecutePlan;
}
public void setDatabaseExecutePlan(EXECUTE_PLAN databaseExecutePlan) {
this.databaseExecutePlan = databaseExecutePlan;
}
public EXECUTE_PLAN getTableExecutePlan() {
return tableExecutePlan;
}
public void setTableExecutePlan(EXECUTE_PLAN executePlan) {
this.tableExecutePlan = executePlan;
}
/** ��join��������� */
List<String> virtualJoinTableNames = new ArrayList<String>();
public List<String> getVirtualJoinTableNames() {
return virtualJoinTableNames;
}
public void setVirtualJoinTableNames(List<String> virtualJoinTableNames) {
this.virtualJoinTableNames.addAll(virtualJoinTableNames);
}
}