diff --git a/Post/Post/ProcessDatabase.cs b/Post/Post/ProcessDatabase.cs index 1de32bc87e7f646b6bbc7c8284894ad11b0e5656..9425028e6d1ccd02914682419a5164332d256e7e 100644 --- a/Post/Post/ProcessDatabase.cs +++ b/Post/Post/ProcessDatabase.cs @@ -14,6 +14,8 @@ namespace Post { public ExecuteOracleDatabase executeOracle; public ExecuteSqlserverDatabase executeSqlserver; + public SqlConnection sqlConn; + public OracleConnection orclConn; public string DB_TYPE { get; set; } @@ -35,7 +37,6 @@ namespace Post try { - // conn validation check if (ip.Length == 0) { @@ -76,20 +77,20 @@ namespace Post public SqlConnection ConnectSqlserver(string ip, int port, string dbname, string username, string password) { Console.WriteLine("ConnectSqlserver"); - SqlConnection connection = new SqlConnection(); + sqlConn = new SqlConnection(); string dataSource = String.Format(@"{0},{1}", ip, port); - connection.ConnectionString = String.Format("DATA SOURCE={0};Initial Catalog={1};User id={2};Password={3};Pooling={4};Connection TImeout={5};Min Pool Size={6};Max pool Size={7}", dataSource, dbname, username, password, "true", 120, 1, 10); - connection.Open(); - Console.WriteLine("sqlserver state : " + connection.State); + sqlConn.ConnectionString = String.Format("DATA SOURCE={0};Initial Catalog={1};User id={2};Password={3};Pooling={4};Connection TImeout={5};Min Pool Size={6};Max pool Size={7}", dataSource, dbname, username, password, "true", 120, 1, 10); + sqlConn.Open(); + Console.WriteLine("sqlserver state : " + sqlConn.State); - if (connection.State == ConnectionState.Broken || connection.State == ConnectionState.Closed) + if (sqlConn.State == ConnectionState.Broken || sqlConn.State == ConnectionState.Closed) { return null; } - executeSqlserver = new ExecuteSqlserverDatabase(connection); - return connection; + executeSqlserver = new ExecuteSqlserverDatabase(sqlConn); + return sqlConn; } #endregion @@ -97,20 +98,230 @@ namespace Post public OracleConnection ConnectOracle(string ip, int port, string dbname, string username, string password) { Console.WriteLine("ConnectOracle"); - OracleConnection connection = new OracleConnection(); + orclConn = new OracleConnection(); string dataSource = String.Format("{0}:{1}/{2}", ip, port, dbname); - connection.ConnectionString = String.Format("DATA SOURCE={0};USER ID={1};Password={2};Pooling={3};Connection Timeout={4};Min Pool Size={5};Max pool Size={6}", dataSource, username, password, "true", 120, 1, 10); - connection.Open(); + orclConn.ConnectionString = String.Format("DATA SOURCE={0};USER ID={1};Password={2};Pooling={3};Connection Timeout={4};Min Pool Size={5};Max pool Size={6}", dataSource, username, password, "true", 120, 1, 10); + orclConn.Open(); + + Console.WriteLine("oracle state : " + orclConn.State); + + executeOracle = new ExecuteOracleDatabase(orclConn); + return orclConn; + } + #endregion + + #region ExecuteQuery() : execute query(create, insert) + public bool ExecuteQuery(string type, List tracingRecordDmlList, List tracingDefinitionDataList) + { + bool isEecute = true; + ConstValuesTracing constValuesTracing = new ConstValuesTracing(); + Console.WriteLine("partition : " + tracingRecordDmlList[0].partition); + + try + { + Console.WriteLine("tracingDefinitionDataList *** " + tracingDefinitionDataList.Count); + Console.WriteLine("tracingRecordDmlList *** " + tracingRecordDmlList.Count); + + } catch(Exception e) + { + Console.WriteLine("execute : " + e.ToString()); + } + + return isEecute; + } + #endregion + + #region ExecuteDdl() : execute ddl + public bool ExecuteDdl(string ddlQuery) + { + bool isExecute = true; + ConstValues constValues = new ConstValues(); + ConstValuesTracing constValuesTracing = new ConstValuesTracing(); + Console.WriteLine("ddlQuery *** " + ddlQuery); + + try + { + if (DB_TYPE.Equals(constValues.CONST_DBTYPE_ORACLE, StringComparison.OrdinalIgnoreCase)) + { + + } + else if (DB_TYPE.Equals(constValues.CONST_DBTYPE_MSSQL, StringComparison.OrdinalIgnoreCase)) + { + using (SqlCommand cmd = new SqlCommand(ddlQuery, sqlConn)) + { + int cnt = cmd.ExecuteNonQuery(); + Console.WriteLine("cnt : " + cnt); + } + } + } + catch(SqlException e) + { + //Console.WriteLine("중복 create : " + e.ToString()); + return false; + } + catch (Exception e) + { + Console.WriteLine("execute : " + e.ToString()); + } + + return isExecute; + } + #endregion + + #region SetMetaInfoListByTraceDmlList() + public void SetMetaInfoListByTraceDmlList(List tracingRecordDmlList, ref List metaInfoList) + { + try + { + for(int i = 0; i < tracingRecordDmlList.Count; i++) + { + string schema = tracingRecordDmlList[i].schema; + string table = tracingRecordDmlList[i].object_n; - Console.WriteLine("oracle state : " + connection.State); + DataTable dt = ExcuteSelectTableMetaInfo("", schema, table); + ConstStruct.MetaInfo info = new ConstStruct.MetaInfo(); + info.schema = schema; + info.tablename = table; + info.data = dt; + metaInfoList.Add(info); - executeOracle = new ExecuteOracleDatabase(connection); - return connection; + dt = null; + info = null; + } + } catch(Exception e) + { + Console.WriteLine("setmet : " + e.ToString()); + } } #endregion + #region ExcuteSelectTableMetaInfo() : table 메타 정보 select control, virtual column 미포함 + public DataTable ExcuteSelectTableMetaInfo(string container, string schema, string table) + { + Console.WriteLine("--ExcuteSelectTableMetaInfo--"); + ConstValues constValues = new ConstValues(); + ConstFunc constFunc = new ConstFunc(); + //constFunc.WriteTraceLog("Control ExcuteSelectTableMetaInfo()", constLoggertype, constAlias, constLogconfig, new string[] { "container:" + container, "schema:" + schema, "table:" + table }, isTrace); + + DataTable result = new DataTable(); + + try + { + if (DB_TYPE.Equals(constValues.CONST_DBTYPE_ORACLE, StringComparison.OrdinalIgnoreCase)) + { + Console.WriteLine("oracle process : "+ executeOracle.orclConn); + + result = executeOracle.SelectTableMetaInfo(schema, table); + Console.WriteLine("result >>>>>>> :: " + result.Rows.Count); + } + else if (DB_TYPE.Equals(constValues.CONST_DBTYPE_SQLSERVER, StringComparison.OrdinalIgnoreCase)) + result = executeSqlserver.SelectTableMetaInfo(container, schema, table); + } + catch (Exception e) + { + Console.WriteLine("ExcuteSelectTableMetaInfo :: " + e.ToString()); + return null; + } + + return result; + } + #endregion + + #region GetTableMetaInfo() : 메타 정보 조회하고 없으면 새로 조회하여 meta list 에 추가 + public DataTable GetTableMetaInfo(string container, string schema, string tablename) + { + Console.WriteLine("--------GetTableMetaInfo-----------"); + DataTable result = new DataTable(); + List metaInfoList = new List(); + + try + { + // 메타정보 리스트에 존재여부 체크, 있으면 리턴 + // 메타정보 리스트에 없으면 메타정보 조회후 리스트에 추가하고 리턴 + bool isExist = false; + + for (int i = 0; i < metaInfoList.Count; i++) + { + if (metaInfoList[i].schema.Equals(schema, StringComparison.OrdinalIgnoreCase) && metaInfoList[i].tablename.Equals(tablename, StringComparison.OrdinalIgnoreCase)) + { + isExist = true; + result = metaInfoList[i].data; + break; + } + } + if (!isExist) + { + Console.WriteLine("GetTableMetaInfo ] not exist"); + DataTable dt = ExcuteSelectTableMetaInfo(container, schema, tablename); + ConstStruct.MetaInfo item = new ConstStruct.MetaInfo(); + item.schema = schema; + item.tablename = tablename; + item.data = dt; + Console.WriteLine(">>>>> dt :: " + dt.Rows); + metaInfoList.Add(item); + result = dt; + + dt = null; + item = null; + } + } + catch (Exception e) + { + //logMessage = "[System Exception] PostProgram GetTableMetaInfo() exception : " + ex.Message.ToString(); + //constFunc.WriteLog(constValues.CONST_LOGGER_TYPE_FATAL, logMessage, constValues.CONST_LOGGER_POST, alias, config); + result = null; + } + + return result; + } + #endregion + + #region GetMetaInfo() : meta list 에서 해당 meta info 구함 + public DataTable GetMetaInfo(List metaInfoList, string schema, string table) + { + DataTable metaInfo = new DataTable(); + try + { + for (int i = 0; i < metaInfoList.Count; i++) + { + if (metaInfoList[i].schema.Equals(schema, StringComparison.OrdinalIgnoreCase) && metaInfoList[i].tablename.Equals(table, StringComparison.OrdinalIgnoreCase)) + { + metaInfo = metaInfoList[i].data; + break; + } + } + } + catch (Exception e) + { + //logMessage = "[System Exception] QueryFunc GetMetaInfo() exception : " + ex.Message.ToString(); + //constFunc.WriteLog(constValues.CONST_LOGGER_TYPE_FATAL, logMessage, constValues.CONST_LOGGER_POST, alias, config); + return null; + } + + return metaInfo; + } + #endregion + + #region GetMetaDefList() : meta, definition 정보 + public List GetMetaDefList(string schema, string table, DataTable metaInfo, List definitionDataList) + { + List metaDefList = new List(); + + + + return metaDefList; + } + #endregion + + + + + + + + #region CheckConnState() : check db connection - public bool CheckConnState() + public bool CheckConnState() { bool result = true; ConstValues constValues = new ConstValues(); @@ -121,7 +332,8 @@ namespace Post if (DB_TYPE.Equals(constValues.CONST_DBTYPE_ORACLE, StringComparison.OrdinalIgnoreCase)) { state = executeOracle.orclConn.State; - } else if (DB_TYPE.Equals(constValues.CONST_DBTYPE_MSSQL, StringComparison.OrdinalIgnoreCase)) + } + else if (DB_TYPE.Equals(constValues.CONST_DBTYPE_MSSQL, StringComparison.OrdinalIgnoreCase)) { Console.WriteLine("== : " + executeSqlserver.sqlConn.State); state = executeSqlserver.sqlConn.State; @@ -142,19 +354,54 @@ namespace Post } #endregion - #region DisconnectDB() : db disconnection - public void DisconnectDB(String type, Object conn) + #region IsExistTable() : check table exist + public int IsExistTable(String schemaName, String tableName, Object conn) + { + int isExist = 1; + ConstValues constValues = new ConstValues(); + + if (DB_TYPE.Equals(constValues.CONST_DBTYPE_ORACLE, StringComparison.OrdinalIgnoreCase)) + { + OracleConnection orclConn = (OracleConnection)conn; + using (OracleCommand cmd = orclConn.CreateCommand()) + { + cmd.CommandText = String.Format(@"SELECT count(*) FROM all_tables where table_name = '{0}'", tableName); + OracleDataReader rd = cmd.ExecuteReader(); + rd.Read(); + isExist = int.Parse(rd[0].ToString()); + } + } + else if (DB_TYPE.Equals(constValues.CONST_DBTYPE_MSSQL, StringComparison.OrdinalIgnoreCase)) + { + SqlConnection sqlConn = (SqlConnection)conn; + using (SqlCommand cmd = sqlConn.CreateCommand()) + { + cmd.CommandText = String.Format("SELECT count(*) FROM INFORMATION_SCHEMA.tables WITH(NOLOCK) WHERE TABLE_SCHEMA = '{0}' AND TABLE_NAME = '{1}'", schemaName, tableName); + SqlDataReader rd = cmd.ExecuteReader(); + rd.Read(); + isExist = int.Parse(rd[0].ToString()); + Console.WriteLine("isExist2 : " + isExist); + rd.Close(); + } + } + + return isExist; + } + #endregion + + #region DisconnectDatabase() : db disconnection + public void DisconnectDatabase(Object conn) { Console.WriteLine("database 종료"); ConstValues constValues = new ConstValues(); try { - if (type.Equals(constValues.CONST_DBTYPE_ORACLE, StringComparison.OrdinalIgnoreCase)) + if (DB_TYPE.Equals(constValues.CONST_DBTYPE_ORACLE, StringComparison.OrdinalIgnoreCase)) { OracleConnection oracleconn = (OracleConnection)conn; oracleconn.Close(); } - else if (type.Equals(constValues.CONST_DBTYPE_MSSQL, StringComparison.OrdinalIgnoreCase)) + else if (DB_TYPE.Equals(constValues.CONST_DBTYPE_MSSQL, StringComparison.OrdinalIgnoreCase)) { SqlConnection sqlconn = (SqlConnection)conn; sqlconn.Close(); diff --git a/Post/Post/Program.cs b/Post/Post/Program.cs index a1618d167dfacbbf529c84cce7c03dda6856361e..3c2230fae36c94801fcf9c6df12fe402f728c039 100644 --- a/Post/Post/Program.cs +++ b/Post/Post/Program.cs @@ -20,7 +20,9 @@ namespace Post ConvertQuery convertQuery = new ConvertQuery(); ConstValues constValues = new ConstValues(); ConstFunc constFunc = new ConstFunc(); - SqlFile sqlFile = new SqlFile(); + + string homePath = Environment.GetEnvironmentVariable("POST_HOME"); + SqlFileCreater sqlFileCreater = new SqlFileCreater(homePath, "test3"); List tracingRecordDmlList = new List(); List tracingDefinitionDataList = new List(); @@ -34,7 +36,7 @@ namespace Post //} //config = cxs.LoadPostConfig(args[0]); - config = config.LoadConfig("test3"); + config = config.LoadConfig("test"); if (config == null) { KillProcess(config.DB_TYPE, null); @@ -76,17 +78,23 @@ namespace Post { Console.WriteLine("no on_db"); // create sql file - bool isWrite = sqlFile.WriteFile(ddlQuery, "test3"); + bool isWrite = sqlFileCreater.WriteFile(ddlQuery); if(!isWrite) { Console.WriteLine("failed write sql file"); } } + Console.WriteLine("+++++++++++++++++++++++++++++++ : "+ config.CREATE_TABLE); if (config.CREATE_TABLE != "ON_SCRIPT") { Console.WriteLine("no_onscript"); - // execute database + bool isExecute = processDatabase.ExecuteDdl(ddlQuery); + Console.WriteLine("isExecute :: " + isExecute); + if(!isExecute) + { + Console.WriteLine("해당 테이블이 이미 존재 합니다."); + } } } @@ -227,16 +235,16 @@ namespace Post if (trc_record_type == constValuesTracing.CONST_RECORD_TYPE_DML_INSERT) { // # todo - //processDatabase.SetMetaInfoListByTraceDmlList(tracingRecordDmlList, ref metaInfoList); - //Console.WriteLine("metaInfoList :: " + metaInfoList[0].schema); - //dtMeta = processDatabase.GetTableMetaInfo("", schemaName, tableName); - - //if (dtMeta == null) - //{ - // Console.WriteLine("dtMeta null"); - // KillProcess(type, conn); - //} - //Console.WriteLine("dtMeta :: " + dtMeta.Rows.Count); + processDatabase.SetMetaInfoListByTraceDmlList(tracingRecordDmlList, ref metaInfoList); + Console.WriteLine("metaInfoList :: " + metaInfoList[0].schema); + dtMeta = processDatabase.GetTableMetaInfo("", schemaName, tableName); + + if (dtMeta == null) + { + Console.WriteLine("dtMeta null"); + KillProcess(type, conn); + } + Console.WriteLine("dtMeta :: " + dtMeta.Rows.Count); Console.WriteLine("file load end"); break;