/** * <p>Copyright: Copyright (c) 2013</p> * <p>Company: �������ӹɷ����޹�˾</p> */ package com.hundsun.ares.studio.atom.compiler.token; import java.util.Map; import java.util.Set; import org.apache.commons.lang.StringUtils; import com.hundsun.ares.studio.atom.compiler.constant.IAtomEngineContextConstant; import com.hundsun.ares.studio.atom.compiler.skeleton.util.ParamReplaceUtil; import com.hundsun.ares.studio.biz.BizInterface; import com.hundsun.ares.studio.core.model.BasicResourceInfo; import com.hundsun.ares.studio.engin.constant.ITokenConstant; import com.hundsun.ares.studio.engin.parser.PseudoCodeParser; 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; /** * @author liaogc * */ public class PROCResultSetStatementToken implements ICodeToken{ public static final String NL = ITokenConstant.NL; private IMacroToken macroToken ;//��ǰ����ĺ� private String cursorName;//�α����� private String sql = ""; public PROCResultSetStatementToken(IMacroToken macroToken,String cursorName,String sql){ this.macroToken = macroToken; this.cursorName = cursorName; this.sql = 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(); Object obj = context.get(IAtomEngineContextConstant.ResourceModel); boolean flagR = false; if (obj instanceof BizInterface && StringUtils.equalsIgnoreCase(((BizInterface) obj).getInterfaceFlag(), "R")) { flagR = true; } if (!flagR) { BasicResourceInfo brInfo = (BasicResourceInfo) context.get(IAtomEngineContextConstant.ResourceModel); String sql = PseudoCodeParser.insertCommonForSql(getSqlStatement(context), brInfo.getObjectId()); code.append("EXEC SQL DECLARE ").append(cursorName).append(" CURSOR FOR ").append(sql).append(";").append(NL); code.append("EXEC SQL OPEN ").append(cursorName).append(";").append(NL); code.append("if (CheckDbLinkMethod(lpConn,SQLCODE) < 0)").append(NL); code.append("{").append(NL); code.append("if ((SQLCODE<= ERR_DB_NO_CONTINUE_FETCH) && (SQLCODE>= ERR_DB_FAILOVER_NETWORK_OPER_FAIL))").append(NL); code.append("{").append(NL); code.append("iReturnCode = SQLCODE;").append(NL); code.append("@error_no = SQLCODE;").append(NL); code.append("hs_strncpy(v_error_info,sqlca.sqlerrm.sqlerrmc,sqlca.sqlerrm.sqlerrml);").append(NL); code.append("@error_id = SQLCODE;").append(NL); code.append("hs_strncpy(v_error_sysinfo,sqlca.sqlerrm.sqlerrmc,sqlca.sqlerrm.sqlerrml);").append(NL); code.append("EXEC SQL rollback;").append(NL).append(NL); code.append("goto svr_end;").append(NL); code.append("}").append(NL).append(NL); code.append("lpConn->setErrMessage(HSDB_CONNECTION_STATUS_DISCONN,SQLCODE,sqlca.sqlerrm.sqlerrmc);").append(NL); code.append("}").append(NL).append(NL); } code.append("if (SQLCODE == OK_SUCCESS)"); return code.toString(); } /** * ��������sql��� * @return */ private String getSqlStatement(Map<Object, Object> context){ ISkeletonAttributeHelper helper = (ISkeletonAttributeHelper)context.get(IAtomEngineContextConstant.SKELETON_ATTRIBUTE_HELPER); String[] params = helper.getAttribute(IAtomEngineContextConstant.ATTR_PROC_VARIABLE_LIST).toArray(new String[0]); Set<String> inoutParamList = helper.getAttribute(IAtomEngineContextConstant.ATTR_IN_OUT_PARAM_LIST); return ParamReplaceUtil.handleParams(":",sql, params, inoutParamList); } }