/** * 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; import com.alipay.zdal.rule.ruleengine.entities.retvalue.TargetDBMetaData; /** * �ֿ�ֱ�Դ��Ϣ * ��ƽ����������Ժ��ع�controller��ʱ����ȥ��������Ϊ�˱�֤������ʵ�ֲ��ҸĶ�����С���ȷ����øĶ� * * @author shenxun * */ public class TargetDBMeta implements DispatcherResult { private final TargetDBMetaData dbMeta; /** * 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; /** * ��������Ϊ�ֿ�������Dz��������ģ������Ǹ�ColumnMetaData����.���������xml�������˱�����е�parameters�� * ����ÿһ����','�ָ�����Ŀ����Ӧlist�е�һ�ColumnMetaData�е�key��Ӧ��parameters��ÿһ����','�ָ�����Ŀ * ��value��Ӧ�Ѿ�ͨ�����㲢�Ұ��˱����Ժ��ֵ�����ֵ����Ϊnull,Ϊnull���ʾ�û�û����sql�и�����Ӧ �IJ����� */ private ColumnMetaData primaryKey; /** * �ֿ���б���Ϊ�ֿ���������������ģ������Ǹ�list.���������xml��������parameters���ÿһ�� * ��','�ָ�����Ŀ����Ӧlist�е�һ�ColumnMetaData�е�key��Ӧ��parameters��ÿһ����','�ָ�����Ŀ * ��value��Ӧ�Ѿ�ͨ�����㲢�Ұ��˱����Ժ��ֵ�����ֵ����Ϊnull,Ϊnull���ʾ�û�û����sql�и�����Ӧ �IJ����� */ private final List<ColumnMetaData> splitDB = new ArrayList<ColumnMetaData>(); /** * �ֱ������Ϊ�ֿ�������Dz��������ģ������Ǹ�ColumnMetaData����.���������xml�������˱�����е�parameters�� * ����ÿһ����','�ָ�����Ŀ����Ӧlist�е�һ�ColumnMetaData�е�key��Ӧ��parameters��ÿһ����','�ָ�����Ŀ * ��value��Ӧ�Ѿ�ͨ�����㲢�Ұ��˱����Ժ��ֵ�����ֵ����Ϊnull,Ϊnull���ʾ�û�û����sql�и�����Ӧ �IJ����� */ private final List<ColumnMetaData> splitTab = new ArrayList<ColumnMetaData>(); /** ��join��������� */ private final List<String> virtualJoinTableNames = new ArrayList<String>(0); public TargetDBMeta(TargetDBMetaData dbMeta, int skip, int max, OrderByMessages orderByMessages, GroupFunctionType groupFunctionType) { this.dbMeta = dbMeta; this.skip = skip; this.max = max; this.orderByMessages = orderByMessages; this.groupFunctionType = groupFunctionType; } public int getMax() { return max; } public int getSkip() { return skip; } public OrderByMessages getOrderByMessages() { return orderByMessages; } public String getVirtualTableName() { return dbMeta.getVirtualTableName(); } public ColumnMetaData getPrimaryKey() { return primaryKey; } public void setPrimaryKey(ColumnMetaData primaryKey) { this.primaryKey = primaryKey; } public List<ColumnMetaData> getSplitDB() { return splitDB; } public void addSplitDB(ColumnMetaData splitDB) { this.splitDB.add(splitDB); } public List<ColumnMetaData> getSplitTab() { return this.splitTab; } public void addSplitTab(ColumnMetaData splitTab) { this.splitTab.add(splitTab); } public boolean allowReverseOutput() { return dbMeta.allowReverseOutput(); } public void needAllowReverseOutput(boolean reverse) { dbMeta.needAllowReverseOutput(reverse); } public GroupFunctionType getGroupFunctionType() { return groupFunctionType; } public List<TargetDB> getTarget() { return dbMeta.getTarget(); } public EXECUTE_PLAN getDatabaseExecutePlan() { throw new IllegalStateException("not support yet"); } public EXECUTE_PLAN getTableExecutePlan() { throw new IllegalStateException("not support yet"); } public void setDatabaseExecutePlan(EXECUTE_PLAN executePlan) { throw new IllegalStateException("not support yet"); } public void setTableExecutePlan(EXECUTE_PLAN executePlan) { throw new IllegalStateException("not support yet"); } public boolean mappingRuleReturnNullValue() { return false; } public List<String> getVirtualJoinTableNames() { return virtualJoinTableNames; } public void setVirtualJoinTableNames(List<String> virtualJoinTableNames) { this.virtualJoinTableNames.addAll(virtualJoinTableNames); } }