/*******************************************************************************
* Copyright (c) 2016 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.erd.core.utils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import com.hangum.tadpole.commons.libs.core.define.PublicTadpoleDefine;
import com.hangum.tadpole.engine.define.DBGroupDefine;
import com.hangum.tadpole.engine.manager.TadpoleSQLManager;
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.sqlite.SQLiteForeignKeyListDAO;
import com.hangum.tadpole.engine.query.dao.system.UserDBDAO;
import com.hangum.tadpole.engine.security.DBAccessCtlManager;
import com.hangum.tadpole.engine.sql.util.SQLUtil;
import com.hangum.tadpole.tajo.core.connections.TajoConnectionManager;
import com.ibatis.sqlmap.client.SqlMapClient;
/**
* 시스템 쿼리를 가져오기위해.
*
* @author hangum
*
*/
public class TDBDataHandler {
private static final Logger logger = Logger.getLogger(TDBDataHandler.class);
/**
* 선택된 Table의 컬럼 정보를 리턴합니다.
*
* @param userDB
* @param tableDao
* @throws Exception
*/
public static List<TableColumnDAO> getColumns(UserDBDAO userDB, TableDAO tableDao) throws Exception {
List<TableColumnDAO> returnColumns = new ArrayList<TableColumnDAO>();
Map<String, String> mapParam = new HashMap<String, String>();
mapParam.put("db", userDB.getDb());
String strTableName = "";
if(DBGroupDefine.SQLITE_GROUP == userDB.getDBGroup()) strTableName = tableDao.getSysName();
else strTableName = tableDao.getName();
if(DBGroupDefine.ALTIBASE_GROUP == userDB.getDBGroup()) {
mapParam.put("user", StringUtils.substringBefore(strTableName, "."));
mapParam.put("table", StringUtils.substringAfter(strTableName, "."));
} else {
mapParam.put("schema", tableDao.getSchema_name());
mapParam.put("table", strTableName);
}
if(DBGroupDefine.TAJO_GROUP == userDB.getDBGroup()) {
returnColumns = new TajoConnectionManager().tableColumnList(userDB, mapParam);
} else if(DBGroupDefine.POSTGRE_GROUP == userDB.getDBGroup()) {
if("".equals(mapParam.get("schema")) || null == mapParam.get("schema")) {
mapParam.put("schema", "public");
}
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(userDB);
returnColumns = sqlClient.queryForList("tableColumnList", mapParam); //$NON-NLS-1$
} else {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(userDB);
returnColumns = sqlClient.queryForList("tableColumnList", mapParam); //$NON-NLS-1$
}
if(DBGroupDefine.SQLITE_GROUP == userDB.getDBGroup()){
try{
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(userDB);
List<SQLiteForeignKeyListDAO> foreignKeyList = sqlClient.queryForList("tableForeignKeyList", mapParam); //$NON-NLS-1$
for (SQLiteForeignKeyListDAO fkeydao : foreignKeyList){
for (TableColumnDAO dao : returnColumns){
if (dao.getName().equals(fkeydao.getFrom() ) ){
if (PublicTadpoleDefine.isPK(dao.getKey())){
dao.setKey("MUL");
}else{
dao.setKey("FK");
}
}
}
}
}catch(Exception e){
logger.error("not found foreignkey for " + tableDao.getName());
}
}
// if find the keyword is add system quote.
for(TableColumnDAO td : returnColumns) {
td.setTableDao(tableDao);
td.setSysName(SQLUtil.makeIdentifierName(userDB, td.getField()));
// 코멘트에 행 분리자가 있다면 제거한다.
td.setComment(StringUtils.remove(td.getComment(), "\n"));
}
returnColumns = DBAccessCtlManager.getInstance().getColumnFilter(tableDao, returnColumns, userDB);
return returnColumns;
}
}