/******************************************************************************* * 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.dialog.table.mysql; import java.util.HashMap; import org.apache.commons.lang.StringUtils; import com.hangum.tadpole.engine.define.DBDefine; /** * alter define data type * * @author hangum * */ public class ColumnDataTypeDef { /** * java.sql.Types에 정의된 모든 데이터 타입의 각 dbms별로 type과 명칭으로 연결한다. */ public static final int LONGNVARCHAR = -16; public static final int NCHAR = -15; public static final int NVARCHAR = -9; public static final int ROWID = -8; public static final int BIT = -7; public static final int TINYINT = -6; public static final int BIGINT = -5; public static final int LONGVARBINARY = -4; public static final int VARBINARY = -3; public static final int BINARY = -2; public static final int LONGVARCHAR = -1; public static final int NULL = 0; public static final int CHAR = 1; public static final int NUMERIC = 2; public static final int DECIMAL = 3; public static final int INTEGER = 4; public static final int SMALLINT = 5; public static final int FLOAT = 6; public static final int REAL = 7; public static final int DOUBLE = 8; public static final int VARCHAR = 12; public static final int BOOLEAN = 16; public static final int DATALINK = 70; public static final int DATE = 91; public static final int TIME = 92; public static final int TIMESTAMP = 93; public static final int OTHER = 1111; public static final int JAVA_OBJECT = 2000; public static final int DISTINCT = 2001; public static final int STRUCT = 2002; public static final int ARRAY = 2003; public static final int BLOB = 2004; public static final int CLOB = 2005; public static final int REF = 2006; public static final int SQLXML = 2009; public static final int NCLOB = 2011; private static final HashMap<Integer, String> defaultNameMap = new HashMap<Integer, String>() { { put(LONGNVARCHAR, "LONGNVARCHAR"); put(NCHAR, "NCHAR"); put(NVARCHAR, "NVARCHAR"); put(ROWID, "ROWID"); put(BIT, "BIT"); put(TINYINT, "TINYINT"); put(BIGINT, "BIGINT"); put(LONGVARBINARY, "LONGVARBINARY"); put(VARBINARY, "VARBINARY"); put(BINARY, "BINARY"); put(LONGVARCHAR, "LONGVARCHAR"); //put(NULL, "NULL"); put(CHAR, "CHAR"); put(NUMERIC, "NUMERIC"); put(DECIMAL, "DECIMAL"); put(INTEGER, "INT"); put(SMALLINT, "SMALLINT"); put(FLOAT, "FLOAT"); put(REAL, "REAL"); put(DOUBLE, "DOUBLE"); put(VARCHAR, "VARCHAR"); put(BOOLEAN, "BOOLEAN"); put(DATALINK, "DATALINK"); put(DATE, "DATE"); put(TIME, "TIME"); put(TIMESTAMP, "TIMESTAMP"); put(OTHER, "OTHER"); put(JAVA_OBJECT, "JAVA_OBJECT"); put(DISTINCT, "DISTINCT"); put(STRUCT, "STRUCT"); put(ARRAY, "ARRAY"); put(BLOB, "BLOB"); put(CLOB, "CLOB"); put(REF, "REF"); put(SQLXML, "SQLXML"); put(NCLOB, "NCLOB"); }; }; private static final HashMap<Integer, String> mysqlNameMap = new HashMap<Integer, String>() { { put(TINYINT, "TINYINT"); put(SMALLINT, "SMALLINT"); // put(MEDIUMINT, "MEDIUMINT"); put(LONGNVARCHAR, "LONGNVARCHAR"); put(NCHAR, "NCHAR"); put(NVARCHAR, "NVARCHAR"); put(ROWID, "ROWID"); put(BIT, "BIT"); put(TINYINT, "TINYINT"); put(BIGINT, "BIGINT"); put(LONGVARBINARY, "LONGVARBINARY"); put(VARBINARY, "VARBINARY"); put(BINARY, "BINARY"); put(LONGVARCHAR, "LONGVARCHAR"); //put(NULL, "NULL"); put(CHAR, "CHAR"); put(NUMERIC, "NUMERIC"); put(DECIMAL, "DECIMAL"); put(INTEGER, "INTEGER"); put(SMALLINT, "SMALLINT"); put(FLOAT, "FLOAT"); put(REAL, "REAL"); put(DOUBLE, "DOUBLE"); put(VARCHAR, "VARCHAR2"); put(BOOLEAN, "BOOLEAN"); put(DATALINK, "DATALINK"); put(DATE, "DATE"); put(TIME, "TIME"); put(TIMESTAMP, "TIMESTAMP"); put(OTHER, "OTHER"); put(JAVA_OBJECT, "JAVA_OBJECT"); put(DISTINCT, "DISTINCT"); put(STRUCT, "STRUCT"); put(ARRAY, "ARRAY"); put(BLOB, "BLOB"); put(CLOB, "CLOB"); put(REF, "REF"); put(SQLXML, "SQLXML"); put(NCLOB, "NCLOB"); }; }; private static final HashMap<Integer, String> oracleNameMap = new HashMap<Integer, String>() { { put(LONGNVARCHAR, "LONGNVARCHAR"); put(NCHAR, "NCHAR"); put(NVARCHAR, "NVARCHAR"); put(ROWID, "ROWID"); put(BIT, "BIT"); put(TINYINT, "TINYINT"); put(BIGINT, "BIGINT"); put(LONGVARBINARY, "LONGVARBINARY"); put(VARBINARY, "VARBINARY"); put(BINARY, "BINARY"); put(LONGVARCHAR, "LONGVARCHAR"); //put(NULL, "NULL"); put(CHAR, "CHAR"); put(NUMERIC, "NUMERIC"); put(DECIMAL, "DECIMAL"); put(INTEGER, "INTEGER"); put(SMALLINT, "SMALLINT"); put(FLOAT, "FLOAT"); put(REAL, "REAL"); put(DOUBLE, "DOUBLE"); put(VARCHAR, "VARCHAR2"); put(BOOLEAN, "BOOLEAN"); put(DATALINK, "DATALINK"); put(DATE, "DATE"); put(TIME, "TIME"); put(TIMESTAMP, "TIMESTAMP"); put(OTHER, "OTHER"); put(JAVA_OBJECT, "JAVA_OBJECT"); put(DISTINCT, "DISTINCT"); put(STRUCT, "STRUCT"); put(ARRAY, "ARRAY"); put(BLOB, "BLOB"); put(CLOB, "CLOB"); put(REF, "REF"); put(SQLXML, "SQLXML"); put(NCLOB, "NCLOB"); }; }; /** * 데이터 타입을 받아서 문자 데이터를 저장하는 데이터 타입인지 판단하여 리턴한다. * 테이블 생성시 데이터 사이즈를 명시적으로 생성해야 하는지 여부를 판단한다. * @param type * @return */ public static boolean isCharType(int type){ switch(type){ case NCHAR : case NVARCHAR : case CHAR : case VARCHAR : return true; } return false; } public static boolean isNumericType(int type){ switch(type){ case TINYINT : case BIGINT : case BINARY : case NUMERIC : case DECIMAL : case INTEGER : case SMALLINT : case FLOAT : case REAL : case DOUBLE : return true; } return false; } public static boolean isDateType(int type){ switch(type){ case DATE : case TIME : case TIMESTAMP : return true; } return false; } public static boolean isBooleanType(int type){ switch(type){ case BIT : case BOOLEAN : return true; } return false; } public static boolean isOtherObjectType(int type){ switch(type){ case LONGNVARCHAR : case ROWID : case LONGVARBINARY : case VARBINARY : case LONGVARCHAR : case DATALINK : case OTHER : case JAVA_OBJECT : case DISTINCT : case STRUCT : case ARRAY : case BLOB : case CLOB : case REF : case SQLXML : case NCLOB : return true; } return false; } // /** * 콤보박스에 넣어줄 전체 데이터타입의 명칭을 조회하여 리턴한다. * @param dbDef * @return */ public static String[] getAllTypeNames(DBDefine dbDef) { String result = ""; switch (dbDef) { case ORACLE_DEFAULT: for (String name : oracleNameMap.values()) { result += name + ","; } return StringUtils.split(result, ","); // case AMAZONRDS_DEFAULT: case CUBRID_DEFAULT: case HIVE2_DEFAULT: case HIVE_DEFAULT: case MARIADB_DEFAULT: case MONGODB_DEFAULT: case MSSQL_8_LE_DEFAULT: case MSSQL_DEFAULT: case MYSQL_DEFAULT: case POSTGRE_DEFAULT: case SQLite_DEFAULT: case TADPOLE_SYSTEM_DEFAULT: case TADPOLE_SYSTEM_MYSQL_DEFAULT: case TAJO_DEFAULT: default: for (String name : defaultNameMap.values()) { result += name + ","; } return StringUtils.split(result, ","); } } /** * 데이터 타입으로 콤보박스 인덱스를 조회한다. * @param dbDef * @param dataType * @return */ public static int getIndexByType(DBDefine dbDef, int dataType) { int index = -1; try { switch (dbDef) { case ORACLE_DEFAULT: for (java.util.Map.Entry<Integer, String> entry : oracleNameMap .entrySet()) { index++; if (dataType == entry.getKey()) { return index; } } return index; default: for (java.util.Map.Entry<Integer, String> entry : defaultNameMap .entrySet()) { index++; if (dataType == entry.getKey()) { return index; } } return index; } } catch (Exception e) { return -1; } } /** * 데이터타입 콤보에서 인덱스 값을 이용해 타입코드를 조회한다. * @param dbDef * @param typeIndex * @return */ public static int getTypeByIndex(DBDefine dbDef, int typeIndex) { int index = 0; try { switch (dbDef) { case ORACLE_DEFAULT: for (java.util.Map.Entry<Integer, String> entry : oracleNameMap.entrySet()) { if (typeIndex == index++) { return entry.getKey(); } } return java.sql.Types.NULL; default: for (java.util.Map.Entry<Integer, String> entry : defaultNameMap.entrySet()) { if (typeIndex == index) { return entry.getKey(); } index++; } return java.sql.Types.NULL; } } catch (Exception e) { return java.sql.Types.NULL; } } /** * dbms종류와 데이터 타입을 가지고 데이터 타입 명칭을 조회. * @param dbDef * @param dataType * @return */ public static String getTypeName(DBDefine dbDef, int dataType) { try { switch (dbDef) { // case AMAZONRDS_DEFAULT: // return (String) defaultNameMap.get(dataType); case CUBRID_DEFAULT: return (String) defaultNameMap.get(dataType); case HIVE2_DEFAULT: return (String) defaultNameMap.get(dataType); case HIVE_DEFAULT: return (String) defaultNameMap.get(dataType); case MARIADB_DEFAULT: return (String) defaultNameMap.get(dataType); case MONGODB_DEFAULT: return (String) defaultNameMap.get(dataType); case MSSQL_8_LE_DEFAULT: return (String) defaultNameMap.get(dataType); case MSSQL_DEFAULT: return (String) defaultNameMap.get(dataType); case MYSQL_DEFAULT: return (String) defaultNameMap.get(dataType); case ORACLE_DEFAULT: return (String) oracleNameMap.get(dataType); case POSTGRE_DEFAULT: return (String) defaultNameMap.get(dataType); case SQLite_DEFAULT: return (String) defaultNameMap.get(dataType); case TADPOLE_SYSTEM_DEFAULT: return (String) defaultNameMap.get(dataType); case TADPOLE_SYSTEM_MYSQL_DEFAULT: return (String) defaultNameMap.get(dataType); case TAJO_DEFAULT: return (String) defaultNameMap.get(dataType); default: return (String) defaultNameMap.get(dataType); } } catch (Exception e) { return "NotDef:" + dataType; } } }