/*******************************************************************************
* Copyright (c) 2013 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.sql.PreparedStatement;
import org.apache.commons.lang.StringUtils;
import com.hangum.tadpole.commons.libs.core.define.PublicTadpoleDefine;
import com.hangum.tadpole.commons.libs.core.define.PublicTadpoleDefine.SQL_STATEMENT_TYPE;
import com.hangum.tadpole.engine.query.dao.system.UserDBDAO;
import com.hangum.tadpole.engine.sql.util.PartQueryUtil;
import com.hangum.tadpole.engine.utils.RequestQuery;
/**
* oracle execute plan
*
* @author hangum
*
*/
public class OracleExecutePlanUtils {
/**
* oracle query plan을 실행합니다.
*
* @param userDB
* @param reqQuery
* @param planTableName
* @throws Exception
*/
public static void plan(UserDBDAO userDB, RequestQuery reqQuery, String planTableName, java.sql.Connection javaConn, String statement_id ) throws Exception {
PreparedStatement pstmt = null;
try {
String query = PartQueryUtil.makeExplainQuery(userDB, reqQuery.getSql());
query = StringUtils.replaceOnce(query, PublicTadpoleDefine.STATEMENT_ID, statement_id);
query = StringUtils.replaceOnce(query, PublicTadpoleDefine.DELIMITER, planTableName);
pstmt = javaConn.prepareStatement( query );
if(reqQuery.getSqlStatementType() == SQL_STATEMENT_TYPE.PREPARED_STATEMENT) {
final Object[] statementParameter = reqQuery.getStatementParameter();
for (int i=1; i<=statementParameter.length; i++) {
pstmt.setObject(i, statementParameter[i-1]);
}
}
pstmt.execute();
} finally {
try { if(pstmt != null) pstmt.close(); } catch(Exception e) {}
}
}
}