/******************************************************************************* * Copyright (c) 2015 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.engine.query.sql; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import com.hangum.tadpole.commons.exception.TadpoleSQLManagerException; import com.hangum.tadpole.db.metadata.MakeContentAssistUtil; import com.hangum.tadpole.engine.define.DBGroupDefine; import com.hangum.tadpole.engine.manager.TadpoleSQLManager; import com.hangum.tadpole.engine.query.dao.mysql.ProcedureFunctionDAO; import com.hangum.tadpole.engine.query.dao.mysql.TableColumnDAO; import com.hangum.tadpole.engine.query.dao.mysql.TableDAO; import com.hangum.tadpole.engine.query.dao.mysql.TriggerDAO; import com.hangum.tadpole.engine.query.dao.system.UserDBDAO; import com.hangum.tadpole.engine.sql.util.SQLUtil; import com.ibatis.sqlmap.client.SqlMapClient; /** * Get db system schema * * @author hangum * */ public class DBSystemSchema { /** * return namespace * * @param userDB * @return * @throws TadpoleSQLManagerException * @throws SQLException */ public static List getSchemas(final UserDBDAO userDB) throws TadpoleSQLManagerException, SQLException { SqlMapClient sqlClient = TadpoleSQLManager.getInstance(userDB); return sqlClient.queryForList("getSchemas"); } /** * get table row count * * @param userDB * @param strTableName * @return * @throws TadpoleSQLManagerException * @throws SQLException */ public static int getTableRowCount(final UserDBDAO userDB, final String strTableName) throws TadpoleSQLManagerException, SQLException { SqlMapClient sqlClient = TadpoleSQLManager.getInstance(userDB); Integer listView = (Integer)sqlClient.queryForObject("tableRowCount", strTableName); return listView; } /** * get view List * * @param userDB * @return * @throws TadpoleSQLManagerException * @throws SQLException */ public static List<TableDAO> getViewList(final UserDBDAO userDB) throws TadpoleSQLManagerException, SQLException { if(DBGroupDefine.TAJO_GROUP == userDB.getDBGroup() || DBGroupDefine.HIVE_GROUP == userDB.getDBGroup()) return new ArrayList<TableDAO>(); List<TableDAO> listTblView = new ArrayList<TableDAO>(); SqlMapClient sqlClient = TadpoleSQLManager.getInstance(userDB); if(DBGroupDefine.POSTGRE_GROUP == userDB.getDBGroup()) { List<TableDAO> listView = sqlClient.queryForList("viewList", userDB.getSchema()); // 시스템에서 사용하는 용도록 수정합니다. '나 "를 붙이도록. StringBuffer strViewList = new StringBuffer(); for(TableDAO td : listView) { td.setSysName(SQLUtil.makeIdentifierName(userDB, td.getName())); strViewList.append(MakeContentAssistUtil.makeObjectPattern(td.getSchema_name(), td.getSysName(), "View")); //$NON-NLS-1$ } userDB.setTableListSeparator( StringUtils.removeEnd(strViewList.toString(), MakeContentAssistUtil._PRE_GROUP)); //$NON-NLS-1$ return listView; } else if(DBGroupDefine.ORACLE_GROUP == userDB.getDBGroup()) { List<HashMap<String,String>> listView = sqlClient.queryForList("viewList", userDB.getSchema()); // 1. 시스템에서 사용하는 용도록 수정합니다. '나 "를 붙이도록. // 2. keyword 를 만든다. StringBuffer strViewList = new StringBuffer(); for(HashMap<String,String> map : listView) { TableDAO tblDao = new TableDAO(); tblDao.setName(map.get("NAME")); tblDao.setSchema_name(map.get("SCHEMA_NAME")); tblDao.setSysName(SQLUtil.makeIdentifierName(userDB, map.get("NAME"))); tblDao.setComment(map.get("COMMENTS")); listTblView.add(tblDao); strViewList.append(MakeContentAssistUtil.makeObjectPattern(tblDao.getSchema_name(), tblDao.getSysName(), "View")); //$NON-NLS-1$ } userDB.setViewListSeparator( StringUtils.removeEnd(strViewList.toString(), MakeContentAssistUtil._PRE_GROUP)); //$NON-NLS-1$ return listTblView; } else if(DBGroupDefine.MYSQL_GROUP == userDB.getDBGroup()) { List<HashMap<String,String>> listView = sqlClient.queryForList("viewList", userDB.getSchema()); // 1. 시스템에서 사용하는 용도록 수정합니다. '나 "를 붙이도록. // 2. keyword 를 만든다. StringBuffer strViewList = new StringBuffer(); for(HashMap<String,String> map : listView) { TableDAO tblDao = new TableDAO(); tblDao.setName(map.get("VIEW_NAME")); tblDao.setSchema_name(map.get("SCHEMA_NAME")); tblDao.setSysName(SQLUtil.makeIdentifierName(userDB, map.get("VIEW_NAME"))); listTblView.add(tblDao); strViewList.append(MakeContentAssistUtil.makeObjectPattern(tblDao.getSchema_name(), tblDao.getSysName(), "View")); //$NON-NLS-1$ } userDB.setViewListSeparator( StringUtils.removeEnd(strViewList.toString(), MakeContentAssistUtil._PRE_GROUP)); //$NON-NLS-1$ return listTblView; } else { List<String> listView = sqlClient.queryForList("viewList", userDB.getDb()); // 1. 시스템에서 사용하는 용도록 수정합니다. '나 "를 붙이도록. // 2. keyword 를 만든다. StringBuffer strViewList = new StringBuffer(); for(String strView : listView) { TableDAO tblDao = new TableDAO(); tblDao.setName(strView); tblDao.setSysName(SQLUtil.makeIdentifierName(userDB, strView)); listTblView.add(tblDao); strViewList.append(MakeContentAssistUtil.makeObjectPattern(tblDao.getSchema_name(), tblDao.getSysName(), "View")); //$NON-NLS-1$ } userDB.setViewListSeparator( StringUtils.removeEnd(strViewList.toString(), MakeContentAssistUtil._PRE_GROUP)); //$NON-NLS-1$ return listTblView; } } /** * getViewColumn * * @param userDB * @param tableDao * @return * @throws TadpoleSQLManagerException * @throws SQLException */ public static List<TableColumnDAO> getViewColumnList(final UserDBDAO userDB, final TableDAO tableDao) throws TadpoleSQLManagerException, SQLException { List<TableColumnDAO> showViewColumns = new ArrayList<TableColumnDAO>(); Map<String, String> param = new HashMap<String, String>(); if(DBGroupDefine.ALTIBASE_GROUP == userDB.getDBGroup()) { param.put("user", StringUtils.substringBefore(tableDao.getName(), ".")); param.put("table", StringUtils.substringAfter(tableDao.getName(), ".")); } else { param.put("db", userDB.getDb()); //$NON-NLS-1$ param.put("schema", tableDao.getSchema_name()); //$NON-NLS-1$ param.put("table", tableDao.getName()); //$NON-NLS-1$ } SqlMapClient sqlClient = TadpoleSQLManager.getInstance(userDB); showViewColumns = sqlClient.queryForList("tableColumnList", param); //$NON-NLS-1$ // if find the keyword is add system quote. for(TableColumnDAO td : showViewColumns) { td.setSysName(SQLUtil.makeIdentifierName(userDB, td.getField())); } return showViewColumns; } /** * get function list * * @param userDB * @return * @throws TadpoleSQLManagerException * @throws SQLException */ public static List<ProcedureFunctionDAO> getFunctionList(final UserDBDAO userDB) throws TadpoleSQLManagerException, SQLException { if(DBGroupDefine.TAJO_GROUP == userDB.getDBGroup() || DBGroupDefine.HIVE_GROUP == userDB.getDBGroup() || DBGroupDefine.SQLITE_GROUP == userDB.getDBGroup()) { return new ArrayList<ProcedureFunctionDAO>(); } SqlMapClient sqlClient = TadpoleSQLManager.getInstance(userDB); List<ProcedureFunctionDAO> listFunction; if(DBGroupDefine.ORACLE_GROUP == userDB.getDBGroup() || DBGroupDefine.POSTGRE_GROUP == userDB.getDBGroup()){ listFunction = sqlClient.queryForList("functionList", userDB.getSchema()); //$NON-NLS-1$ }else if(DBGroupDefine.MYSQL_GROUP == userDB.getDBGroup()){ listFunction = sqlClient.queryForList("functionList", userDB.getSchema()); //$NON-NLS-1$ }else{ listFunction = sqlClient.queryForList("functionList", userDB.getDb()); //$NON-NLS-1$ } // 1. 시스템에서 사용하는 용도록 수정합니다. '나 "를 붙이도록. // 2. create to default keyword StringBuffer strFunctionlist = new StringBuffer(); for(ProcedureFunctionDAO pfDao : listFunction) { pfDao.setSysName(SQLUtil.makeIdentifierName(userDB, pfDao.getName())); strFunctionlist.append(MakeContentAssistUtil.makeObjectPattern(pfDao.getSchema_name(), pfDao.getSysName(), "Function")); //$NON-NLS-1$ } userDB.setFunctionLisstSeparator(StringUtils.removeEnd(strFunctionlist.toString(), MakeContentAssistUtil._PRE_GROUP)); return listFunction; } /** * return procedure list * * @param userDB * @return * @throws TadpoleSQLManagerException * @throws SQLException */ public static List<ProcedureFunctionDAO> getProcedure(final UserDBDAO userDB) throws TadpoleSQLManagerException, SQLException { if(DBGroupDefine.TAJO_GROUP == userDB.getDBGroup() || DBGroupDefine.HIVE_GROUP == userDB.getDBGroup() || DBGroupDefine.SQLITE_GROUP == userDB.getDBGroup()) { return new ArrayList<ProcedureFunctionDAO>(); } SqlMapClient sqlClient = TadpoleSQLManager.getInstance(userDB); List<ProcedureFunctionDAO> listProcedure; if(DBGroupDefine.ORACLE_GROUP == userDB.getDBGroup() || DBGroupDefine.POSTGRE_GROUP == userDB.getDBGroup() ){ listProcedure = sqlClient.queryForList("procedureList", userDB.getSchema()); //$NON-NLS-1$ }else if(DBGroupDefine.MYSQL_GROUP == userDB.getDBGroup()){ listProcedure = sqlClient.queryForList("procedureList", userDB.getSchema()); //$NON-NLS-1$ }else{ listProcedure = sqlClient.queryForList("procedureList", userDB.getDb()); //$NON-NLS-1$ } // 시스템에서 사용하는 용도록 수정합니다. '나 "를 붙이도록. for(ProcedureFunctionDAO pfDao : listProcedure) { pfDao.setSysName(SQLUtil.makeIdentifierName(userDB, pfDao.getName())); } return listProcedure; } /** * Return trigger information * * @param strObjectName */ public static List<TriggerDAO> getTrigger(final UserDBDAO userDB, String strObjectName) throws TadpoleSQLManagerException, SQLException { List<TriggerDAO> triggerList = null; if(DBGroupDefine.TAJO_GROUP == userDB.getDBGroup() || DBGroupDefine.HIVE_GROUP == userDB.getDBGroup()) { triggerList = new ArrayList<TriggerDAO>(); }else { SqlMapClient sqlClient = TadpoleSQLManager.getInstance(userDB); HashMap<String, String>paramMap = new HashMap<String, String>(); if(DBGroupDefine.ORACLE_GROUP == userDB.getDBGroup() || DBGroupDefine.POSTGRE_GROUP == userDB.getDBGroup()){ paramMap.put("table_schema", userDB.getSchema()); //$NON-NLS-1$ paramMap.put("table_name", strObjectName); //$NON-NLS-1$ }else if(DBGroupDefine.MYSQL_GROUP == userDB.getDBGroup()){ paramMap.put("table_schema", userDB.getSchema()); //$NON-NLS-1$ paramMap.put("table_name", strObjectName); //$NON-NLS-1$ }else{ paramMap.put("table_schema", userDB.getDb()); //$NON-NLS-1$ paramMap.put("table_name", strObjectName); //$NON-NLS-1$ } triggerList = sqlClient.queryForList("triggerList", paramMap); //$NON-NLS-1$ } for(TriggerDAO dao : triggerList) { dao.setSysName(SQLUtil.makeIdentifierName(userDB, dao.getName() )); } return triggerList; } /** * Return trigger all list * * @param userDB * @return * @throws TadpoleSQLManagerException * @throws SQLException */ public static List<TriggerDAO> getAllTrigger(UserDBDAO userDB) throws TadpoleSQLManagerException, SQLException { if(DBGroupDefine.TAJO_GROUP == userDB.getDBGroup() || DBGroupDefine.HIVE_GROUP == userDB.getDBGroup()) { return new ArrayList<TriggerDAO>(); } SqlMapClient sqlClient = TadpoleSQLManager.getInstance(userDB); List<TriggerDAO> triggerList = sqlClient.queryForList("triggerAllList", userDB.getDb()); //$NON-NLS-1$ for(TriggerDAO dao : triggerList) { dao.setSysName(SQLUtil.makeIdentifierName(userDB, dao.getName() )); } return triggerList; } }