/**
* <p>Copyright: Copyright (c) 2013</p>
* <p>Company: �������ӹɷ�����˾</p>
*/
package com.hundsun.ares.studio.procedure.compiler.token;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import com.hundsun.ares.studio.biz.BizInterface;
import com.hundsun.ares.studio.engin.constant.IEngineContextConstant;
import com.hundsun.ares.studio.engin.constant.ITokenConstant;
import com.hundsun.ares.studio.engin.constant.MarkConfig;
import com.hundsun.ares.studio.engin.token.ICodeToken;
import com.hundsun.ares.studio.procedure.compiler.constant.IProcedureEngineContextConstant;
/**
* @author liaogc
*
*/
public class CommonSelectStatementToken implements ICodeToken{
public static final String NL = ITokenConstant.NL;
private String resultSetVarName ;//�����������
private String sql;//sql���
public CommonSelectStatementToken(String resultSetVarName,String sql){
this.resultSetVarName = resultSetVarName;
this.sql = StringUtils.defaultIfBlank(sql, "");
}
/* (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 {
StringBuffer code = new StringBuffer();
boolean flagR = false;
Object obj = context.get(IProcedureEngineContextConstant.ResourceModel);
if (obj instanceof BizInterface && StringUtils.equalsIgnoreCase(((BizInterface) obj).getInterfaceFlag(), com.hundsun.ares.studio.engin.constant.MarkConfig.MARK_IFLAG_R)) {
flagR = true;
}
if (!flagR) {
if(!isSqlVariable(context)){
code.append(resultSetVarName).append(MarkConfig.MARK_BLANK).append(MarkConfig.MARK_EQUAL).append(MarkConfig.MARK_BLANK).append(MarkConfig.MARK_BLANK).append("lpConn->executeQuery").append(MarkConfig.MARK_LEFTSIGN).append(MarkConfig.MARK_QUOTATION).append(sql).append(MarkConfig.MARK_QUOTATION).append(MarkConfig.MARK_RIGHTSIGN).append(";").append(NL);
}else{
code.append(resultSetVarName).append(MarkConfig.MARK_BLANK).append(MarkConfig.MARK_EQUAL).append(MarkConfig.MARK_BLANK).append(MarkConfig.MARK_BLANK).append("lpConn->executeQuery").append(MarkConfig.MARK_LEFTSIGN).append(sql).append(MarkConfig.MARK_RIGHTSIGN).append(";").append(NL);
}
code.append("if ").append(MarkConfig.MARK_LEFTSIGN).append(resultSetVarName).append(MarkConfig.MARK_RIGHTSIGN);
}
return code.toString();
}
private boolean isSqlVariable(Map<Object, Object> context){
List<String> popVarList = (List<String>)context.get(IEngineContextConstant.PSEUDO_CODE_PARA_LIST);
if(StringUtils.startsWith(sql, "@")){
if(popVarList.contains(StringUtils.remove(sql, "@"))){
return true;
}
}
return false;
}
}