/**
* <p>Copyright: Copyright (c) 2013</p>
* <p>Company: �������ӹɷ�����˾</p>
*/
package com.hundsun.ares.studio.atom.compiler.token;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Stack;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang.StringUtils;
import com.hundsun.ares.studio.atom.AtomFunction;
import com.hundsun.ares.studio.atom.compiler.constant.IAtomEngineContextConstant;
import com.hundsun.ares.studio.atom.compiler.exception.MacroParameterDescNotDefineException;
import com.hundsun.ares.studio.atom.compiler.exception.TableFieldNotFoundInStdFieldException;
import com.hundsun.ares.studio.atom.compiler.exception.TableFieldNotSettingException;
import com.hundsun.ares.studio.atom.compiler.skeleton.util.AtomFunctionCompilerUtil;
import com.hundsun.ares.studio.atom.compiler.skeleton.util.CodeUtil;
import com.hundsun.ares.studio.atom.compiler.skeleton.util.GenStringUtil;
import com.hundsun.ares.studio.atom.compiler.skeleton.util.TableResourceUtil;
import com.hundsun.ares.studio.core.IARESProject;
import com.hundsun.ares.studio.engin.constant.IEngineContextConstant;
import com.hundsun.ares.studio.engin.exception.ErrorParameterNumberException;
import com.hundsun.ares.studio.engin.exception.HSException;
import com.hundsun.ares.studio.engin.skeleton.ISkeletonAttributeHelper;
import com.hundsun.ares.studio.engin.token.ICodeToken;
import com.hundsun.ares.studio.engin.token.macro.IMacroToken;
import com.hundsun.ares.studio.engin.util.TypeRule;
import com.hundsun.ares.studio.jres.model.database.TableColumn;
import com.hundsun.ares.studio.jres.model.metadata.StandardDataType;
import com.hundsun.ares.studio.jres.model.metadata.StandardField;
import com.hundsun.ares.studio.jres.model.metadata.TypeDefaultValue;
import com.hundsun.ares.studio.jres.model.metadata.util.MetadataServiceProvider;
/**
* @author liaogc
*
*/
public class SelectInsertTableInProcBlockToken implements ICodeToken{
private IMacroToken macroToken ;//��ǰ����ĺ�
private Map<Object, Object> context;//��ǰ������������
private AtomFunction atomFunction;//ԭ�Ӻ���ģ��
private Map<String, String> defaultValueMap = new HashMap<String, String>();//Ĭ��ֵ�б�
public SelectInsertTableInProcBlockToken(IMacroToken macroToken,Map<Object, Object> context,Map<String, String> defaultValueMap){
this.macroToken = macroToken;
this.context = context;
this.atomFunction = (AtomFunction) context.get(IAtomEngineContextConstant.ResourceModel);
this.defaultValueMap = defaultValueMap;
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.engin.token.ICodeToken#getContent()
*/
@Override
public String getContent() {
return StringUtils.EMPTY;
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.engin.token.ICodeToken#getType()
*/
@Override
public int getType() {
return ICodeToken.CODE_TEXT;
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.engin.token.ICodeToken#genCode(java.util.Map)
*/
@Override
public String genCode(Map<Object, Object> context) throws Exception {
try{
String sqlStr = getMacroToken().getParameters()[1];
if(sqlStr.trim().toLowerCase().startsWith("select")){
return genCodeSelect();//�����ĵ�һ�ڶ��������DZ���ʱ
}else{
return genCodeTable();//�����ĵڶ���������sql���ʱ
}
}catch(Exception e){
e.printStackTrace();
}
return "";
}
/**
* �����ĵ�һ��,�ڶ����������DZ���ʱ,������ش���
* @return
* @throws Exception
*/
private String genCodeTable()throws Exception {
StringBuffer insertCode = new StringBuffer();
IARESProject project = (IARESProject) context.get(IAtomEngineContextConstant.Aresproject);
String targerTableName = getMacroToken().getParameters()[0];//Ŀ�����
String sourceTableName = getMacroToken().getParameters()[1];//Դ����
insertCode.append("//�����" + targerTableName + "��¼").append(NEWLINE);
List<TableColumn> targetColumns = TableResourceUtil.getFieldsWithoutFlag("H",targerTableName,project);//��ȡĿ���������
insertCode.append("insert "+"/*"+this.atomFunction.getObjectId()+"*/"+" into ");
insertCode.append(targerTableName);
insertCode.append(NEWLINE).append("(").append(NEWLINE+"\t");
//����Ŀ����ǵĸ���
for (int i = 0; i < targetColumns.size(); i++) {
TableColumn targerTableColumn = targetColumns.get(i);
StandardField tableFieldSTD = MetadataServiceProvider.getStandardFieldByName((IARESProject)getContext().get(IAtomEngineContextConstant.Aresproject), targerTableColumn.getFieldName());
if (tableFieldSTD != null) {
if (i != 0) {
insertCode.append(",");
if (i % 4 == 0) {//ÿ���ֶλ�һ��
insertCode.append(NEWLINE+"\t");
}
}
insertCode.append(CodeUtil.formatInsert(targerTableColumn.getFieldName()));//����insert into�е�һ��
} else {//������е��в��ڱ��ֶ�����ֳ�����
insertCode.append(NEWLINE).append("���ֶβ����ڣ�" + targerTableColumn.getFieldName() ).append(NEWLINE);
throw new TableFieldNotFoundInStdFieldException(targerTableName,targerTableColumn.getFieldName());
}
}
insertCode.append(NEWLINE).append(")");
insertCode.append(NEWLINE).append("select").append(NEWLINE+"\t");
for (int i = 0; i < targetColumns.size(); i++) {
TableColumn targerTableColumn = targetColumns.get(i);
String fieldDataType= AtomFunctionCompilerUtil.getRealDataType(targerTableColumn.getFieldName(), project, MetadataServiceProvider.C_TYPE);
if (i != 0) {
insertCode.append(",");
if (i % 4 == 0) {//ÿ���ֶλ�һ��
insertCode.append(NEWLINE+"\t");
}
}
if (defaultValueMap.get(targerTableColumn.getFieldName()) != null) {//����ֶ���Ĭ��ֵ�б���
if(defaultValueMap.get(targerTableColumn.getFieldName()).startsWith("@") ){
//�ַ����ַ���������nvl����
if(TypeRule.typeRuleCharArray(fieldDataType)||TypeRule.typeRuleChar(fieldDataType)){
insertCode.append(CodeUtil.formatInsert("nvl("+":"+defaultValueMap.get(targerTableColumn.getFieldName())+",' ') " + " as " + targerTableColumn.getFieldName()));
}else{//�����������Ӻ�������
insertCode.append(CodeUtil.formatInsert(":"+defaultValueMap.get(targerTableColumn.getFieldName())+ " as "+ targerTableColumn.getFieldName()));
}
}
else {
//��Ĭ��ֵ��,��������ͨ��ֵ(�DZ���)
insertCode.append(CodeUtil.formatInsert(defaultValueMap.get(targerTableColumn.getFieldName())+ " as "+ targerTableColumn.getFieldName()));
}
} else {
TableColumn sourceTableColumn = null;
// ����������Դ���в�����
for (TableColumn f : TableResourceUtil.getFieldsWithoutFlag("H", sourceTableName,project)) {
if (f.getFieldName().equals(targerTableColumn.getFieldName())) {
sourceTableColumn = f;
break;
}
}
if (sourceTableColumn != null)// Դ���д����ֶ�
{
insertCode.append(CodeUtil.formatInsert(targerTableColumn.getFieldName()));
} else {//���Դ���в�����
//�����α�������,proc��������,���,�ڲ������д���
if (getProcVarList().contains(targerTableColumn.getFieldName())|| getProcVarList().contains(targerTableColumn.getFieldName())||AtomFunctionCompilerUtil.isParameterINAtomFunctionParameterByName(getAtomFunction(), targerTableColumn.getFieldName(),project)) {
if(TypeRule.typeRuleCharArray(fieldDataType)||TypeRule.typeRuleChar(fieldDataType))
insertCode.append(CodeUtil.formatInsert("nvl(:@" + targerTableColumn.getFieldName()+",' ')"));
else {
insertCode.append(CodeUtil.formatInsert(":@"+ targerTableColumn.getFieldName()));
}
} else {
//�������ȡĬ��ֵ
TypeDefaultValue typeDefaultValue = MetadataServiceProvider.getTypeDefaultValueOfStdFieldByName((IARESProject)getContext().get(IAtomEngineContextConstant.Aresproject), targerTableColumn.getFieldName());
if(typeDefaultValue!=null){
String value = typeDefaultValue.getValue(MetadataServiceProvider.C_TYPE);
if(StringUtils.equals(value, "{0}")){
value = "' '";
}
insertCode.append(CodeUtil.formatInsert(value) + " as "+ targerTableColumn.getFieldName());
}
}
}
}
}
insertCode.append(NEWLINE).append("from " ).append(sourceTableName).append(" ;").append(NEWLINE);
return insertCode.toString();
}
private String genCodeSelect() throws Exception {
StringBuffer insertCode = new StringBuffer();
IARESProject project = (IARESProject) context.get(IAtomEngineContextConstant.Aresproject);
String targerTableName = getMacroToken().getParameters()[0];//���Ŀ�����
insertCode.append("-- select�����"+targerTableName+"��¼").append(NEWLINE);
List<TableColumn> targetColumns = TableResourceUtil.getFieldsWithoutFlag("H",targerTableName, project) ;//��ȡĿ���������
insertCode.append("insert "+"/*"+this.atomFunction.getObjectId()+"*/"+" into ");
insertCode.append(targerTableName);
insertCode.append(NEWLINE).append("(").append(NEWLINE);
for (int i = 0; i < targetColumns.size(); i++) {
TableColumn targerTableColumn = targetColumns.get(i);
StandardField tableFieldSTD = MetadataServiceProvider.getStandardFieldByName((IARESProject)getContext().get(IAtomEngineContextConstant.Aresproject), targerTableColumn.getFieldName());
if (tableFieldSTD != null) {
if (i != 0) {
insertCode.append(",");
if (i % 4 == 0) {
insertCode.append(NEWLINE);//ÿ�ĸ��ֶλ�һ��
}
}
insertCode.append(CodeUtil.formatInsert(targerTableColumn.getFieldName()));
} else {
insertCode.append(NEWLINE).append("���ֶβ����ڣ�" + targerTableColumn.getFieldName() ).append(NEWLINE);
throw new TableFieldNotFoundInStdFieldException(targerTableName,targerTableColumn.getFieldName());
}
}
insertCode.append(NEWLINE).append(")").append(NEWLINE);
String sqlStr = getSqlMacroParameter();//ȡ�ú�����ǵ�sql���
String fieldStr = "";
try {
fieldStr = GenStringUtil.getMainSelectContent(sqlStr);
} catch (Exception e) {
e.printStackTrace();
}
OldSelectFieldsBean old_selectFields = new OldSelectFieldsBean(getFieldString().split(","),splitOldField(getOldField()));
Map<String,String> selectFields1 = new HashMap<String,String>();
for(int i = 0;i <old_selectFields.getSelectFileds().length;i++){
String key = old_selectFields.getSelectFileds()[i];
String newkey = key;
if(key.indexOf(".") > 0){
newkey = removeOtherName(key);
}
if(!selectFields1.containsKey(newkey)){
selectFields1.put(newkey,old_selectFields.getOldFileds()[i]);
}else{
if(selectFields1.get(newkey).indexOf(".")>=0){
selectFields1.remove(newkey);
selectFields1.put(key,old_selectFields.getOldFileds()[i]);
}
}
}
StringBuffer realFields = new StringBuffer();
//����ȥ�Ҹò���ֵ
for (int i = 0; i < targetColumns.size(); i++) {
TableColumn targerTableColumn = targetColumns.get(i);
String fieldDataType= AtomFunctionCompilerUtil.getRealDataType(targerTableColumn.getFieldName(), project, MetadataServiceProvider.C_TYPE);
if (i != 0) {
realFields.append(",");
if(i%4 == 0 ){
realFields.append(NEWLINE);
}
}
//���û������Ĭ��ֵ��ȥ��
if (defaultValueMap.get(targerTableColumn.getFieldName()) != null) {//����ֶ���Ĭ��ֵ�б���
if(defaultValueMap.get(targerTableColumn.getFieldName()).startsWith("@") ){
//�ַ����ַ���������nvl����
if(TypeRule.typeRuleCharArray(fieldDataType)||TypeRule.typeRuleChar(fieldDataType)){
realFields.append(CodeUtil.formatInsert("nvl("+":"+defaultValueMap.get(targerTableColumn.getFieldName())+",' ') " + " as " + targerTableColumn.getFieldName()));
}else{//�����������Ӻ�������
realFields.append(CodeUtil.formatInsert(":"+defaultValueMap.get(targerTableColumn.getFieldName())+ " as "+ targerTableColumn.getFieldName()));
}
}
else {
//��Ĭ��ֵ��,��������ͨ��ֵ(�DZ���)
realFields.append(CodeUtil.formatInsert(defaultValueMap.get(targerTableColumn.getFieldName())+ " as "+ targerTableColumn.getFieldName()));
}
}else{
String sourceField = null;
for (int k = 0;k<old_selectFields.getSelectFileds().length;k++) {
if(selectFields1.containsKey(targerTableColumn.getFieldName())){
sourceField = selectFields1.get(targerTableColumn.getFieldName()).trim();
break;
}
}
if (sourceField != null)// Դ���д����ֶ�
{
realFields.append(CodeUtil.formatInsert(sourceField));
} else {//���Դ���в�����
//�����α�������,proc��������,���,�ڲ������д���
if (getProcVarList().contains(targerTableColumn.getFieldName())|| getPopVarList().contains(targerTableColumn.getFieldName())||AtomFunctionCompilerUtil.isParameterINAtomFunctionParameterByName(getAtomFunction(), targerTableColumn.getFieldName(),project)) {
if(TypeRule.typeRuleCharArray(fieldDataType)||TypeRule.typeRuleChar(fieldDataType))
realFields.append(CodeUtil.formatInsert("nvl(:@" + targerTableColumn.getFieldName()+",' ')"));
else {
realFields.append(CodeUtil.formatInsert(":@"+ targerTableColumn.getFieldName()));
}
} else {
//�������ȡĬ��ֵ
TypeDefaultValue typeDefaultValue = MetadataServiceProvider.getTypeDefaultValueOfStdFieldByName((IARESProject)getContext().get(IAtomEngineContextConstant.Aresproject), targerTableColumn.getFieldName());
if(typeDefaultValue!=null){
realFields.append(CodeUtil.formatInsert(typeDefaultValue.getValue(MetadataServiceProvider.C_TYPE))+" as "+ targerTableColumn.getFieldName());
}
}
}
}
}
realFields.append(NEWLINE);
int index = sqlStr.indexOf(fieldStr);
insertCode.append(sqlStr.substring(0,index)+NEWLINE+realFields.toString()+sqlStr.substring(index+fieldStr.length(),sqlStr.length()));
return insertCode.toString()+";";
}
/**
*
* @return ���غ�ĵ�һ�������е�sql(�Ѿ�ȥ��ע�͵�sql)
*/
private String getSqlMacroParameter() {
String str = getMacroToken().getParameters()[1];
str = str.replaceAll("\\-\\-[^\n]*\n", "\n");
return str;
}
/**
* ��SQL�������ȡ�ֶ�
*
* @return �ֶε��ַ������ö��ŷָ�
* @throws ErrorParameterNumberException
* �׳����������������쳣
* @throws MacroParameterDescNotDefineException
* �׳�����˵����Ϣû�����õ��쳣
*/
private String getFieldString() throws HSException {
String sqlStr = getSqlMacroParameter();
String sTableName = "";
if (getMacroToken().getParameters().length > 2) {
sTableName = getMacroToken().getParameters()[2];
}
Pattern p = Pattern.compile("\\s*select\\s+\\*\\s+from\\s*\\(");
Matcher m = p.matcher(sqlStr);
while (m.find()) {
if (m.start() == 0) {
sqlStr = sqlStr.substring(m.end());
m = p.matcher(sqlStr);
}
}
String fieldStr = "";
try {
fieldStr = GenStringUtil.getMainSelectContent(sqlStr);
} catch (Exception e) {
e.printStackTrace();
}
String sFieldStr = fieldStr + ",";
String result = "";
while (sFieldStr.indexOf(",") >= 0) {
// ��ı�������
String sOtherTableName = "";
// �滻*���ֶα���
String sOtherFieldStr = "";
String sTempField = sFieldStr.substring(0, sFieldStr.indexOf(",")).trim();
if(sTempField.indexOf ("*/") != -1 && sTempField.indexOf ("/*") != -1){
sTempField = sTempField.substring (sTempField.indexOf ("*/")+2);
}
if(sTempField.trim().startsWith("distinct") || sTempField.trim().startsWith("DISTINCT") || sTempField.trim().startsWith("Distinct")){
sTempField = sTempField.trim().substring(8);
}
// ����Ǵ��������ֶΣ�����ȥ������
if (sTempField.indexOf("(") >= 0) {
if (sTempField.toLowerCase().indexOf(" as ") < 0) {
sFieldStr = sFieldStr.substring(sFieldStr.indexOf(",") + 1).trim();
do {
if (sFieldStr.indexOf(",") >= 0) {
sTempField = sFieldStr.substring(0, sFieldStr.indexOf(",")).trim();
if (sTempField.toLowerCase().indexOf(" as ") >= 0) {
break;
} else {
sFieldStr = sFieldStr.substring(sFieldStr.indexOf(",") + 1).trim();
}
} else {
break;
}
} while (true);
}
}
// �п�����ȥ������ǰ�벿���Ժ����µ��ֶΣ���ʱӦ��AS����
if (sTempField.toLowerCase().indexOf(" as ") >= 0) {
sTempField = sTempField.substring(sTempField.toLowerCase().indexOf(" as ") + 4);
}
// ����Ǵ��������ֶΣ�����ȥ������
if (sTempField.indexOf(".") >= 0) {
// ȡ����
sOtherTableName = sTempField.substring(0, sTempField.indexOf("."));
sTempField = sTempField.substring(sTempField.toLowerCase().indexOf(".") + 1);
}
// ���ȡ�õ��ֶ��д�*�ţ�������Ҫ�ӱ���ȡ�ֶ�
if (sTempField.trim().endsWith("*")&& sTempField.indexOf("/*") < 0) {
if (!sTableName.equals("")) {
if (!sTableName.substring(1).equals(",")) {
sTableName = sTableName + ",";
}
if (sTableName.indexOf(",") >= 0) {
String sTempTableName = sTableName.substring(0, sTableName.indexOf(","));
if (!sTempTableName.equals("")) {
// �ӱ�ṹ�л�ȡ��������ֶ��б�
IARESProject project = (IARESProject) context.get(IAtomEngineContextConstant.Aresproject);
List<TableColumn> fields = TableResourceUtil.getFieldsWithoutFlag("H",sTempTableName, project);
if (fields.size() == 0) {
throw new TableFieldNotSettingException(sTempTableName);
}
// �����ֶ��ӵ��α��ֶ��б���
for (int index = 0; index < fields.size(); index++) {
TableColumn tfield = fields.get(index);
if (sOtherTableName.equals("")) {
if (index == fields.size() - 1) {
sOtherFieldStr = sOtherFieldStr + tfield.getName();
} else {
sOtherFieldStr = sOtherFieldStr + tfield.getName() + ",";
}
} else {
if (index == fields.size() - 1) {
sOtherFieldStr = sOtherFieldStr + sOtherTableName + "." + tfield.getName();
} else {
sOtherFieldStr = sOtherFieldStr + sOtherTableName + "." + tfield.getName() + ",";
}
}
}
}
if (result.equals("")) {
result += sOtherFieldStr;
} else {
result += "," + sOtherFieldStr;
}
sTableName = sTableName.substring(sTableName.length() - sTableName.indexOf(","));
}
}
} else {
if (sOtherTableName.equals("")) {
if (result.equals("")) {
result += sTempField;
} else {
result += "," + sTempField;
}
} else {
if (result.equals("")) {
result += sOtherTableName + "." + sTempField;
} else {
result += "," + sOtherTableName + "." + sTempField;
}
}
}
if (sFieldStr.length() > sFieldStr.indexOf(",")) {
sFieldStr = sFieldStr.substring(sFieldStr.indexOf(",") + 1);
} else {
sFieldStr = "";
}
}
return result;
}
// ȥ������ǰ�ı����
private String removeOtherName(String str) {
if(str.indexOf(".") == -1 || str.endsWith(".")){
return str;
}
return str.substring(str.indexOf(".")+1);
}
String[] splitOldField(String fields){
List<String> result = new ArrayList<String>();
String temp = "";
int i = 0;
while(fields.indexOf(",") >= 0){
i++;
temp = "";
temp = temp + fields.substring(0, fields.indexOf(","));
fields = fields.substring(fields.indexOf(",")+1, fields.length());
if(temp.indexOf("(") != -1){
if(temp.indexOf(" as ") != -1) {
//select as �������
}else {
int next = fields.indexOf(',', fields.indexOf(" as ")+ 4);
if(next == -1){
temp = temp + "," + fields;
fields = "";
result.add(temp.trim());
break;
}
temp = temp + "," + fields.substring(0, next);
fields = fields.substring(next+1, fields.length());
}
}
result.add(temp.trim());
}
if(fields.length() != 0)
result.add(fields);
return result.toArray(new String[result.size()]);
}
private String getOldField() throws HSException {
String sqlStr = getSqlMacroParameter();
String sTableName = "";
Stack<String> addHead = new Stack<String>();
if (getMacroToken().getParameters().length > 2) {
sTableName = getMacroToken().getParameters()[2];
}
// ȥ��Ƕ��select
Pattern p = Pattern.compile("\\s*select\\s+\\*\\s+from\\s*\\(");
Matcher m = p.matcher(sqlStr);
while (m.find()) {
if (m.start() == 0) {
addHead.add(sqlStr.substring(0, m.end()));
sqlStr = sqlStr.substring(m.end());
m = p.matcher(sqlStr);
}
}
String fieldStr = "";
try {
fieldStr = GenStringUtil.getMainSelectContent(sqlStr);
} catch (Exception e) {
e.printStackTrace();
}
String sFieldStr = fieldStr + ",";
// ����ij������
int k = 0;
while (sFieldStr.indexOf(",") >= 0) {
// ��ı�������
String sOtherTableName = "";
// �滻*���ֶα���
String sOtherFieldStr = "";
String sTempField = sFieldStr.substring(0, sFieldStr.indexOf(",")).trim();
if(sTempField.indexOf ("*/") != -1 && sTempField.indexOf ("/*") != -1){//����ע��
sTempField = sTempField.substring (sTempField.indexOf ("*/")+2);
}
// ����Ǵ��������ֶΣ�����ȥ������
if (sTempField.indexOf("(") >= 0) {
if (sTempField.toLowerCase().indexOf(" as ") < 0) {
sFieldStr = sFieldStr.substring(sFieldStr.indexOf(",") + 1).trim();
do {//��Ϊ�����к�������","�������кܶ��
if (sFieldStr.indexOf(",") >= 0) {
sTempField = sFieldStr.substring(0, sFieldStr.indexOf(",")).trim();
if (sTempField.toLowerCase().indexOf(" as ") >= 0) {
break;
} else {
sFieldStr = sFieldStr.substring(sFieldStr.indexOf(",") + 1).trim();
}
} else {
break;
}
} while (true);
}
}
// �п�����ȥ������ǰ�벿���Ժ����µ��ֶΣ���ʱӦ��AS����
if (sTempField.toLowerCase().indexOf(" as ") >= 0) {
sTempField = sTempField.substring(sTempField.toLowerCase().indexOf(" as ") + 4);
}
// ����Ǵ��������ֶΣ�����ȥ������
if (sTempField.indexOf(".") >= 0) {
// ȡ����
sOtherTableName = sTempField.substring(0, sTempField.indexOf("."));
sTempField = sTempField.substring(sTempField.toLowerCase().indexOf(".") + 1);
}
// ���ȡ�õ��ֶ��д�*�ţ�������Ҫ�ӱ���ȡ�ֶ�
if (sTempField.trim().endsWith("*")&& sTempField.indexOf("/*") < 0) {
if (!sTableName.equals("")) {
if (!sTableName.substring(1).equals(",")) {
sTableName = sTableName + ",";
}
if (sTableName.indexOf(",") >= 0) {
String sTempTableName = sTableName.substring(0, sTableName.indexOf(","));
if (!sTempTableName.equals("")) {
// �ӱ�ṹ�л�ȡ��������ֶ��б�
IARESProject project = (IARESProject) context.get(IAtomEngineContextConstant.Aresproject);
List<TableColumn> fields = TableResourceUtil.getFieldsWithoutFlag("H",sTempTableName, project);
if (fields.size() == 0) {
throw new TableFieldNotSettingException(sTempTableName);
}
// �����ֶ��ӵ��α��ֶ��б���
for (int index = 0; index < fields.size(); index++) {
TableColumn tfield = fields.get(index);
if (sOtherTableName.equals("")) {
if (index == fields.size() - 1) {
sOtherFieldStr = sOtherFieldStr + tfield.getName();
} else {
sOtherFieldStr = sOtherFieldStr + tfield.getName() + ",";
}
} else {
if (index == fields.size() - 1) {
sOtherFieldStr = sOtherFieldStr + sOtherTableName + "." + tfield.getName();
} else {
sOtherFieldStr = sOtherFieldStr + sOtherTableName + "." + tfield.getName() + ",";
}
}
}
}
// �滻.*
if (!sOtherFieldStr.equals("")) {
if (sOtherTableName.equals("")) {
sqlStr = sqlStr.replace("*", sOtherFieldStr);
} else {
sqlStr = sqlStr.replace(sOtherTableName + ".*", sOtherFieldStr);
}
}
sTableName = sTableName.substring(sTableName.length() - sTableName.indexOf(","));
}
}
}
if (sFieldStr.length() > sFieldStr.indexOf(",")) {//������һ���ֶ�
sFieldStr = sFieldStr.substring(sFieldStr.indexOf(",") + 1);
} else {
sFieldStr = "";
}
}
String result = "";
try {
result = GenStringUtil.getMainSelectContent(sqlStr);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* ����α����ʹ�ñ����б�
* @return
*/
private List<String> getPopVarList(){
return (List<String>)getContext().get(IEngineContextConstant.PSEUDO_CODE_PARA_LIST);
}
/**
* ����proc�����б�
* @return
*/
private Set<String> getProcVarList(){
ISkeletonAttributeHelper helper = (ISkeletonAttributeHelper)getContext().get(IAtomEngineContextConstant.SKELETON_ATTRIBUTE_HELPER);
return (Set<String>)helper.getAttribute(IAtomEngineContextConstant.ATTR_PROC_VARIABLE_LIST);
}
/**
* ����ԭ�Ӻ���ģ��
* @return
*/
private AtomFunction getAtomFunction(){
return this.atomFunction;
}
/**
* ��ú�
* @return IMacroToken
*/
private IMacroToken getMacroToken(){
return this.macroToken;
}
/**
* ���������
* @return
*/
private Map<Object,Object> getContext(){
return this.context;
}
/*
*
*/
private class OldSelectFieldsBean {
String[] oldFileds = {};
String[] selectFileds = {};
/**
* @return the oldFiledName
*/
public String[] getOldFileds() {
return oldFileds;
}
/**
* @param oldFiledName the oldFiledName to set
*/
public void setOldFileds(String[] oldFileds) {
this.oldFileds = oldFileds;
}
/**
* @return the selectFiledName
*/
public String[] getSelectFileds() {
return selectFileds;
}
/**
* @param selectFiledName the selectFiledName to set
*/
public void setSelectFileds(String[] selectFileds) {
this.selectFileds = selectFileds;
}
public OldSelectFieldsBean(String[] selectFileds,String[] oldFileds){
this.oldFileds = oldFileds;
this.selectFileds = selectFileds;
}
}
}