/******************************************************************************* * Copyright (c) 2017 hangum. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v2.1 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * * Contributors: * hangum - initial API and implementation ******************************************************************************/ package com.hangum.tadpole.rdb.core.editors.main.utils.plan; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import com.hangum.tadpole.commons.libs.core.define.PublicTadpoleDefine; import com.hangum.tadpole.commons.util.Utils; import com.hangum.tadpole.engine.query.dao.system.UserDBDAO; import com.hangum.tadpole.engine.sql.util.PartQueryUtil; import com.hangum.tadpole.engine.sql.util.QueryUtils; import com.hangum.tadpole.engine.sql.util.resultset.QueryExecuteResultDTO; import com.hangum.tadpole.engine.utils.RequestQuery; /** * tibero execute plan * * @author hangum * */ public class TiberoExecutePlanUtils { private static final Logger logger = Logger.getLogger(TiberoExecutePlanUtils.class); /** * tibero query plan을 실행합니다. * * @param userDB * @param reqQuery * @param planTableName * @throws Exception */ public static String plan(UserDBDAO userDB, RequestQuery reqQuery, java.sql.Connection javaConn) throws Exception { String strUUID = Utils.getUniqueID(); String strExeSQL = "-- " + strUUID + PublicTadpoleDefine.LINE_SEPARATOR + reqQuery.getSql(); // 사용자 쿼리를 날린다. QueryExecuteResultDTO queryResultDTO = QueryUtils.executeQuery(userDB, strExeSQL, 0, 10000); // 사용자 쿼리의 실행 아이디를 얻는다. // 티베로에서 처음의 주석문자이면 해당 문자를 삭제해야한다. // String strSQL = StringUtils.replace(StringUtils.trim(strExeSQL), PublicTadpoleDefine.LINE_SEPARATOR, " "); String query = PartQueryUtil.makeExplainQuery(userDB, strUUID); if(logger.isDebugEnabled()) logger.debug("[plan query] " + strUUID); QueryExecuteResultDTO planIDResultDTO = QueryUtils.executeQuery(userDB, query, 0, 1000); List<Map<Integer, Object>> resultData = planIDResultDTO.getDataList().getData(); if(resultData.isEmpty()) { throw new Exception("Does not found sql plan."); } Map<Integer, Object> mapResult = resultData.get(0); return ""+mapResult.get(0); } }