OSDN Git Service

20170630
[rapideact/rapideact.git] / com / rapide_act / RapideMetaUnloader.java
1 package com.rapide_act;
2
3 import java.io.BufferedInputStream;
4 import java.io.FileInputStream;
5 import java.io.IOException;
6 import java.io.InputStream;
7 import java.io.File;
8 import java.io.FileReader;
9 import java.io.FileWriter;
10 import java.io.BufferedWriter;
11 import java.io.BufferedReader;
12 import java.io.PrintWriter;
13 import java.io.PrintWriter;
14 import java.util.Date;
15 import java.util.ArrayList;
16 import java.util.Iterator;
17 import java.util.Properties;
18 import java.util.regex.Pattern;
19 import java.sql.Connection;
20 import java.sql.DriverManager;
21 import java.sql.ResultSet;
22 import java.sql.ResultSetMetaData;
23 import java.sql.SQLException;
24 import java.sql.PreparedStatement;
25 import java.sql.Timestamp;
26 import java.sql.Blob;
27 import java.sql.Clob;
28
29 public class RapideMetaUnloader{
30
31         private static final int CONTENTS = 0;
32         private static final int CREATE = 1;
33         private static final int DROP = 2;
34         private static final int TRUNCATE = 3;
35
36         private static final int WK_FILE = 0;
37         private static final int R_CREATE_PKEY = 1;
38         private static final int R_CREATE_UKEY = 2;
39         private static final int R_CREATE_INDEX = 3;
40         private static final int W_CREATE_PKEY = 0;
41         private static final int W_CREATE_UKEY = 1;
42         private static final int W_CREATE_INDEX = 2;
43         private static final int W_DROP_PKEY = 3;
44         private static final int W_DROP_UKEY = 4;
45         private static final int W_DROP_INDEX = 5;
46
47         private static final int LINE = 0;
48         private static final int TBL_CONTENTS = 1;
49         private static final int TBL_COMMENTS = 2;
50         private static final int IDX_CONTENTS_1 = 1;
51         private static final int IDX_CONTENTS_2 = 2;
52         private static final int IDX_CONTENTS_3 = 3;
53
54         private static final int COL01 = 0;
55         private static final int COL02 = 1;
56         private static final int COL03 = 2;
57         private static final int COL04 = 3;
58         private static final int COL05 = 4;
59         private static final int COL06 = 5;
60         private static final int COL07 = 6;
61         private static final int COL08 = 7;
62         private static final int COL09 = 8;
63         private static final int COL10 = 9;
64         private static final int COL11 = 10;
65         private static final int COL12 = 11;
66
67         private String database = null;
68         private String phyfileExtension = "phy";
69
70         public static void main(String args[]){
71                 try {
72                         if (args.length > 0){
73                                 RapideMetaUnloader RapideMetaUnloader = new RapideMetaUnloader(args[0]);
74                                 RapideMetaUnloader.metaUnload();
75                         } else {
76                                 RapideMetaUnloader RapideMetaUnloader = new RapideMetaUnloader(null);
77                                 RapideMetaUnloader.metaUnload();
78                         }
79                 } catch (Exception e) {
80                         e.printStackTrace();
81                 }
82         }
83
84         RapideMetaUnloader(String _database) {
85                 super();
86                 database = _database;
87         }
88
89
90         private void metaUnload(){
91                 Connection conn = null;
92                 PreparedStatement stmt = null;
93                 BufferedReader [] br = new BufferedReader[4];
94                 PrintWriter [] pw = new PrintWriter[6];
95                 File folder = null;
96                 File subFolder = null;
97                 String strLine = null;
98                 String strLine2 = null;
99                 String [][] strSplit = new String[4][];
100                 String strContents = null;
101                 ArrayList<String> alData = null;
102                 ArrayList<String> alData2 = null;
103                 int columnCount = 0;
104                 String tableName = null;
105                 String tableCmnt = null;
106                 String colName = null;
107                 String colCmnt = null;
108                 String colType = null;
109                 String colLen = null;
110                 String colPrec = null;
111                 String colScale = null;
112                 String colNoN = null;
113                 String colDflt = null;
114                 String indexName = null;
115                 String indexType = null;
116                 String constraintType = null;
117                 String colPos = null;
118                 String seqName = null;
119                 String minVal = null;
120                 String maxVal = null;
121                 String incSz = null;
122                 String cycFg = null;
123                 String odFg = null;
124                 String cacheSz = null;
125                 String lstNo = null;
126                 String synmOwner = null;
127                 String synmName = null;
128                 String tbOwner = null;
129                 String tbName = null;
130                 String dbLnk = null;
131                 String userName = null;
132                 String passWord = null;
133                 String host = null;
134                 String created = null;
135                 String acStat = null;
136                 String defTbsp = null;
137                 String tmpTbsp = null;
138                 String grntee = null;
139                 String grntor = null;
140                 String grntrl = null;
141                 String prvs = null;
142                 String grntabl = null;
143                 String hrchy = null;
144
145                 String objName = null;
146                 String objTyp = null;
147                 String pctFree = null;
148                 String pctUsed = null;
149                 String iniTrns = null;
150                 String freeLst = null;
151                 String flstGrp = null;
152                 String bufPool = null;
153                 String tblSpace = null;
154                 String logging = null;
155                 String segByts = null;
156
157                 String fkName = null;
158                 String fkCol = null;
159                 String fkColPos = null;
160                 String rtbName = null;
161                 String rfkName = null;
162                 String rfkCol = null;
163                 String rfkColPos = null;
164
165                 CmnProps cp = null;
166                 CmnAccessObjects dao = null;
167                 
168                 try {
169                         cp = new CmnProps();
170                         cp.setProperty(database);
171                         
172                         if (cp.dbType > cp.DB_TYPE_DB2 || cp.dbType <0){
173                                 throw new Exception("\83f\81[\83^\83x\81[\83X\82ª\91Î\8fÛ\8aO\82Å\82·\81B[" + cp.DB_TYPE_NAME[cp.dbType] + "]");
174                         }
175                         if(cp.outFolder != null){
176                                 folder = new File(cp.outFolder);
177                         } else {
178                                 if(database != null){
179                                         folder = new File(cp.DEFAULT_OUT_FOLDER + "/" + cp.metaFolder + "_" + database.toUpperCase() + "_" + CmnUtils.getYmdhm());
180                                 } else {
181                                         folder = new File(cp.DEFAULT_OUT_FOLDER + "/" + cp.metaFolder + "_" + cp.DB_TYPE_NAME[cp.dbType].toUpperCase() + "_" + CmnUtils.getYmdhm());
182                                 }
183                                 folder.mkdir();
184                         }
185
186                         CmnUtils.infoPrint("-->\8fo\97Í\90æ\83t\83H\83\8b\83_='" + folder + "'");
187                         CmnUtils.infoPrint("\83\81\83^\83f\81[\83^\83A\83\93\83\8d\81[\83h\82ð\8aJ\8en\82µ\82Ü\82µ\82½\81B");
188
189                         // Connect
190                         dao = new CmnAccessObjects(cp);
191                         conn = dao.connect();
192                         // Def tsv Writing start
193                         for(int i=0;i<cp.meta_sql[cp.dbType].length;i++){
194                                 if(!cp.meta_sql[cp.dbType][i].equals("")){
195                                         dao.select(cp.meta_sql[cp.dbType][i]);
196                                         CmnUtils.writeSeparator(folder + "/" + cp.WK_FILE_NAME[i] + "_" + database +"." + cp.fileExtension, dao.getColumnCount(), dao.getArrayList(), cp.delimiter);
197                                 } else {
198                                         CmnUtils.emptyFile(folder + "/" + cp.WK_FILE_NAME[i] + "_" + database +"." + cp.fileExtension);
199                                 }
200                         }
201                         // Def tsv Writing end
202
203                         // Table Contents start
204                         br[WK_FILE] = new BufferedReader(new FileReader(folder + "/" + cp.WK_FILE_NAME[cp.TYPE_TABLE] + "_" + database + "." + cp.fileExtension));
205                         subFolder = new File(folder + "/TABLES");
206                         subFolder.mkdir();
207                         pw[CREATE] = new PrintWriter(new BufferedWriter(new FileWriter(new File(folder + "/" + cp.SQL_FILE_NAME[cp.CREATE_TABLE]))));
208                         pw[DROP] = new PrintWriter(new BufferedWriter(new FileWriter(new File(folder + "/" + cp.SQL_FILE_NAME[cp.DROP_TABLE]))));
209                         pw[TRUNCATE] = new PrintWriter(new BufferedWriter(new FileWriter(new File(folder + "/" + cp.SQL_FILE_NAME[cp.TRUNCATE_TABLE]))));
210
211                         tableName = "";
212                         tableCmnt = "";
213                         colName = "";
214                         colCmnt = "";
215                         colType = "";
216                         colLen = "";
217                         colPrec = "";
218                         colScale = "";
219                         colNoN = "";
220                         colDflt = "";
221
222                         StringBuffer sbTbCnts = new StringBuffer();
223                         StringBuffer sbTbCmnt = new StringBuffer();
224                         while((strLine=br[WK_FILE].readLine()) != null){
225                                 if(!strLine.equals("")){
226                                         strSplit[LINE] = CmnUtils.split(strLine, cp.delimiter);
227                                         if (!tableName.equals("")){
228                                                 sbTbCnts.append("    " + cp.DB_SQL_QUOTEDS[cp.dbType]+ colName + cp.DB_SQL_QUOTEDE[cp.dbType]);
229                                                 sbTbCnts.append(" " + colType);
230                                                 if(!colCmnt.equals(""))sbTbCmnt.append(commentOnColumn(cp, tableName, colName, colCmnt, cp.TYPE_TABLE));
231                                                 if(!colCmnt.equals(""))sbTbCmnt.append(cp.lineSeparator);
232                                                 if(CmnUtils.isColPrec(colType, colPrec)){
233                                                         sbTbCnts.append("(" + colPrec);
234                                                         if (!CmnUtils.isEmpty(colScale) && !colScale.equals("0"))sbTbCnts.append("," + colScale);
235                                                         sbTbCnts.append(")");
236                                                 } else if (CmnUtils.isColLength(colType)){
237                                                         if(colLen.equals("-1")){
238                                                                 sbTbCnts.append("(max)");
239                                                         } else {
240                                                                 sbTbCnts.append("(" + CmnUtils.getColLength(colType, colLen) + ")");
241                                                         }
242                                                 }
243                                                 if (!CmnUtils.isEmpty(colDflt)){
244                                                         if(CmnUtils.split(strLine, cp.SQL_COMMENT_MARK[cp.dbType]).length > 0){
245                                                                 String [] colDfltAry = CmnUtils.split(colDflt, cp.SQL_COMMENT_MARK[cp.dbType]);
246                                                                 if (cp.dbType == cp.DB_TYPE_MYSQL && !CmnUtils.isReserved(colDfltAry[0].trim())){
247                                                                         sbTbCnts.append(" DEFAULT '" + colDfltAry[0].trim() + "'");
248                                                                 } else {
249                                                                         sbTbCnts.append(" DEFAULT " + colDfltAry[0].trim());
250                                                                 }
251                                                         } else {
252                                                                 if (cp.dbType == cp.DB_TYPE_MYSQL && !CmnUtils.isReserved(colDflt.trim())){
253                                                                         sbTbCnts.append(" DEFAULT " + colDflt.trim() + "'");
254                                                                 } else {
255                                                                         sbTbCnts.append(" DEFAULT " + colDflt.trim());
256                                                                 }
257                                                         }
258                                                 }
259                                                 if (!CmnUtils.isEmpty(colNoN)){
260                                                         sbTbCnts.append(" NOT NULL");
261                                                 } else {
262                                                         sbTbCnts.append(" NULL");
263                                                 }
264                                                 if (!strSplit[LINE][COL01].equals(tableName)){
265                                                         pw[CREATE].println(cp.SQL_PREFIX[cp.dbType] + "TABLES/" + tableName + ".sql");
266                                                         pw[DROP].print("DROP TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ tableName + cp.DB_SQL_QUOTEDE[cp.dbType]+ cp.DROP_OPTION[cp.dbType] + cp.SQL_TERMINATOR[cp.dbType]);
267                                                         pw[TRUNCATE].print("TRUNCATE TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ tableName + cp.DB_SQL_QUOTEDE[cp.dbType]+ cp.SQL_TERMINATOR[cp.dbType]);
268                                                         sbTbCnts.append(cp.lineSeparator);
269                                                         sbTbCnts.append(")" + cp.SQL_TERMINATOR[cp.dbType]);
270                                                         sbTbCnts.append(cp.lineSeparator);
271                                                         pw[CONTENTS] = new PrintWriter(new BufferedWriter(new FileWriter(new File(subFolder + "/" + tableName + ".sql"))));
272                                                         strSplit[TBL_CONTENTS] = CmnUtils.split(sbTbCnts.toString(), cp.lineSeparator);
273                                                         for(int i=0;i<strSplit[TBL_CONTENTS].length;i++)if(!strSplit[TBL_CONTENTS][i].trim().equals(""))pw[CONTENTS].println(strSplit[TBL_CONTENTS][i]);
274                                                         strSplit[TBL_COMMENTS] = CmnUtils.split(sbTbCmnt.toString(), cp.lineSeparator);
275                                                         for(int i=0;i<strSplit[TBL_COMMENTS].length;i++)if(!strSplit[TBL_COMMENTS][i].trim().equals(""))pw[CONTENTS].println(strSplit[TBL_COMMENTS][i]);
276                                                         pw[CONTENTS].close();
277                                                         pw[CONTENTS] = null;
278                                                         CmnUtils.infoPrint(String.format("%1$-42s","[TABLE] " + tableName) + " \83\81\83^\83f\81[\83^\82ª\83A\83\93\83\8d\81[\83h\82³\82ê\82Ü\82µ\82½\81B");
279                                                         sbTbCnts = new StringBuffer();
280                                                         sbTbCmnt = new StringBuffer();
281                                                         sbTbCnts.append("CREATE TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]);
282                                                         sbTbCnts.append(cp.lineSeparator);
283                                                         sbTbCnts.append("(");
284                                                         sbTbCnts.append(cp.lineSeparator);
285                                                         if(!CmnUtils.isEmpty(strSplit[LINE][COL02]))sbTbCmnt.append(commentOnTable(cp, strSplit[LINE][COL01], strSplit[LINE][COL02], cp.TYPE_TABLE));
286                                                         if(!CmnUtils.isEmpty(strSplit[LINE][COL02]))sbTbCmnt.append(cp.lineSeparator);
287                                                 } else {
288                                                         sbTbCnts.append(",");
289                                                         sbTbCnts.append(cp.lineSeparator);
290                                                 }
291                                         }
292                                         else {
293                                                 sbTbCnts.append("CREATE TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]);
294                                                 sbTbCnts.append(cp.lineSeparator);
295                                                 sbTbCnts.append("(");
296                                                 sbTbCnts.append(cp.lineSeparator);
297                                                 if(!CmnUtils.isEmpty(strSplit[LINE][COL02]))sbTbCmnt.append(commentOnTable(cp, strSplit[LINE][COL01], strSplit[LINE][COL02], cp.TYPE_TABLE));
298                                                 if(!CmnUtils.isEmpty(strSplit[LINE][COL02]))sbTbCmnt.append(cp.lineSeparator);
299                                         }
300                                         for(int i=0;i<strSplit[LINE].length;i++)CmnUtils.debugPrint("'" + strSplit[LINE][i] + "'");
301
302                                         tableName = strSplit[LINE][COL01];
303                                         tableCmnt = strSplit[LINE][COL02];
304                                         colName = strSplit[LINE][COL03];
305                                         colCmnt = strSplit[LINE][COL04];
306                                         colType = strSplit[LINE][COL05];
307                                         colLen = strSplit[LINE][COL06];
308                                         colPrec = strSplit[LINE][COL07];
309                                         colScale = strSplit[LINE][COL08];
310                                         colNoN = strSplit[LINE][COL09];
311                                         colDflt = strSplit[LINE][COL10];
312                                 }
313                         }
314
315                         if (!tableName.equals("")){
316                                 sbTbCnts.append("    " + cp.DB_SQL_QUOTEDS[cp.dbType]+ colName + cp.DB_SQL_QUOTEDE[cp.dbType]);
317                                 sbTbCnts.append(" " + colType);
318                                 if(!colCmnt.equals("")){
319                                         sbTbCmnt.append(commentOnColumn(cp, tableName, colName, colCmnt, cp.TYPE_TABLE));
320                                         sbTbCmnt.append(cp.lineSeparator);
321                                 }
322                                 if(CmnUtils.isColPrec(colType, colPrec)){
323                                         sbTbCnts.append("(" + colPrec);
324                                         if (!CmnUtils.isEmpty(colScale) && !CmnUtils.isEmpty(colScale))sbTbCnts.append("," + colScale);
325                                         sbTbCnts.append(")");
326                                 } else if (CmnUtils.isColLength(colType)){
327                                         if(colLen.equals("-1")){
328                                                 sbTbCnts.append("(max)");
329                                         } else {
330                                                 sbTbCnts.append("(" + CmnUtils.getColLength(colType, colLen) + ")");
331                                         }
332                                 }
333                                 if (!CmnUtils.isEmpty(colDflt)){
334                                         if (cp.dbType == cp.DB_TYPE_MYSQL && !CmnUtils.isReserved(colDflt.trim())){
335                                                 sbTbCnts.append(" DEFAULT '" + colDflt.trim() + "'");
336                                         } else {
337                                                 sbTbCnts.append(" DEFAULT " + colDflt.trim());
338                                         }
339                                 }
340                                 if (!CmnUtils.isEmpty(colNoN)){
341                                         sbTbCnts.append(" NOT NULL");
342                                 } else {
343                                         sbTbCnts.append(" NULL");
344                                 }
345                                 pw[CREATE].println(cp.SQL_PREFIX[cp.dbType] + "TABLES/" + tableName + ".sql");
346                                 pw[DROP].print("DROP TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ tableName + cp.DB_SQL_QUOTEDE[cp.dbType]+ cp.DROP_OPTION[cp.dbType] + cp.SQL_TERMINATOR[cp.dbType]);
347                                 pw[TRUNCATE].print("TRUNCATE TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ tableName + cp.DB_SQL_QUOTEDE[cp.dbType]+ cp.SQL_TERMINATOR[cp.dbType]);
348                                 sbTbCnts.append(cp.lineSeparator);
349                                 sbTbCnts.append(")" + cp.SQL_TERMINATOR[cp.dbType]);
350                                 sbTbCnts.append(cp.lineSeparator);
351                                 pw[CONTENTS] = new PrintWriter(new BufferedWriter(new FileWriter(new File(subFolder + "/" + tableName + ".sql"))));
352                                 strSplit[TBL_CONTENTS] = CmnUtils.split(sbTbCnts.toString(), cp.lineSeparator);
353                                 for(int i=0;i<strSplit[TBL_CONTENTS].length;i++)if(!strSplit[TBL_CONTENTS][i].trim().equals(""))pw[CONTENTS].println(strSplit[TBL_CONTENTS][i]);
354                                 strSplit[TBL_COMMENTS] = CmnUtils.split(sbTbCmnt.toString(), cp.lineSeparator);
355                                 for(int i=0;i<strSplit[TBL_COMMENTS].length;i++)if(!strSplit[TBL_COMMENTS][i].trim().equals(""))pw[CONTENTS].println(strSplit[TBL_COMMENTS][i]);
356                                 pw[CONTENTS].close();
357                                 pw[CONTENTS] = null;
358                                 CmnUtils.infoPrint(String.format("%1$-42s","[TABLE] " + tableName) + " \83\81\83^\83f\81[\83^\82ª\83A\83\93\83\8d\81[\83h\82³\82ê\82Ü\82µ\82½\81B");
359                         }
360                         for(int i=0;i<pw.length;i++){
361                                 if(pw[i]!=null){
362                                         pw[i].close();
363                                         pw[i]=null;
364                                 }
365                         }
366                         br[WK_FILE].close();
367                         br[WK_FILE] = null;
368                         // Table Contents end
369
370                         // Index Contents start
371                         br[WK_FILE] = new BufferedReader(new FileReader(folder + "/" + cp.WK_FILE_NAME[cp.TYPE_INDEX] + "_" + database + "." + cp.fileExtension));
372                         pw[W_CREATE_PKEY] = new PrintWriter(new BufferedWriter(new FileWriter(new File(folder + "/" + cp.SQL_FILE_NAME[cp.CREATE_PKEY]))));
373                         pw[W_CREATE_UKEY] = new PrintWriter(new BufferedWriter(new FileWriter(new File(folder + "/" + cp.SQL_FILE_NAME[cp.CREATE_UKEY]))));
374                         pw[W_CREATE_INDEX] = new PrintWriter(new BufferedWriter(new FileWriter(new File(folder + "/" + cp.SQL_FILE_NAME[cp.CREATE_INDEX]))));
375                         pw[W_DROP_PKEY] = new PrintWriter(new BufferedWriter(new FileWriter(new File(folder + "/" + cp.SQL_FILE_NAME[cp.DROP_PKEY]))));
376                         pw[W_DROP_UKEY] = new PrintWriter(new BufferedWriter(new FileWriter(new File(folder + "/" + cp.SQL_FILE_NAME[cp.DROP_UKEY]))));
377                         pw[W_DROP_INDEX] = new PrintWriter(new BufferedWriter(new FileWriter(new File(folder + "/" + cp.SQL_FILE_NAME[cp.DROP_INDEX]))));
378
379                         //Initial Process
380                         tableName = "";
381                         indexName = "";
382                         indexType = "";
383                         constraintType = "";
384                         colName = "";
385                         colPos = "";
386                         StringBuffer sbIxCnts = new StringBuffer();
387                         StringBuffer sbIx2Cnts = new StringBuffer();
388                         StringBuffer sbIx3Cnts = new StringBuffer();
389
390                         //Loop Process
391                         while((strLine=br[WK_FILE].readLine()) != null){
392                                 if(!strLine.equals("")){
393                                         strSplit[LINE] = CmnUtils.split(strLine, cp.delimiter);
394                                         //Not 1st Line Process
395                                         if (!indexName.equals("")){
396                                                 if (!strSplit[LINE][COL02].equals(indexName) || !strSplit[LINE][COL01].equals(tableName)){
397                                                         //Post Process
398                                                         if (colPos.equals("1")){
399                                                                 sbIxCnts.append(cp.DB_SQL_QUOTEDS[cp.dbType]+ colName + cp.DB_SQL_QUOTEDE[cp.dbType]);
400                                                                 if (constraintType.equals("U"))sbIx2Cnts.append(cp.DB_SQL_QUOTEDS[cp.dbType]+ colName + cp.DB_SQL_QUOTEDE[cp.dbType]);
401                                                         } else {
402                                                                 sbIxCnts.append(", " + cp.DB_SQL_QUOTEDS[cp.dbType]+ colName + cp.DB_SQL_QUOTEDE[cp.dbType]);
403                                                                 if (constraintType.equals("U"))sbIx2Cnts.append(", " + cp.DB_SQL_QUOTEDS[cp.dbType]+ colName + cp.DB_SQL_QUOTEDE[cp.dbType]);
404                                                         }
405                                                         sbIxCnts.append(")" + cp.SQL_TERMINATOR[cp.dbType]);
406                                                         sbIxCnts.append(cp.lineSeparator);
407                                                         if (constraintType.equals("U"))sbIx2Cnts.append(")" + cp.SQL_TERMINATOR[cp.dbType]);
408                                                         sbIx2Cnts.append(cp.lineSeparator);
409                                                         sbIx3Cnts.append(cp.lineSeparator);
410
411                                                         //Write Buffer
412                                                         if (constraintType.equals("P")){
413                                                                 strSplit[IDX_CONTENTS_1] = CmnUtils.split(sbIxCnts.toString(), cp.lineSeparator);
414                                                                 for(int i=0;i<strSplit[IDX_CONTENTS_1].length;i++)if(!strSplit[IDX_CONTENTS_1][i].trim().equals(""))pw[W_CREATE_PKEY].println(strSplit[IDX_CONTENTS_1][i]);
415                                                                 strSplit[IDX_CONTENTS_2] = CmnUtils.split(sbIx2Cnts.toString(), cp.lineSeparator);
416                                                                 for(int i=0;i<strSplit[IDX_CONTENTS_2].length;i++)if(!strSplit[IDX_CONTENTS_2][i].trim().equals(""))pw[W_DROP_PKEY].println(strSplit[IDX_CONTENTS_2][i]);
417                                                         } else if (constraintType.equals("U")){
418                                                                 strSplit[IDX_CONTENTS_1] = CmnUtils.split(sbIxCnts.toString(), cp.lineSeparator);
419                                                                 for(int i=0;i<strSplit[IDX_CONTENTS_1].length;i++)if(!strSplit[IDX_CONTENTS_1][i].trim().equals(""))pw[W_CREATE_UKEY].println(strSplit[IDX_CONTENTS_1][i]);
420                                                                 strSplit[IDX_CONTENTS_2] = CmnUtils.split(sbIx2Cnts.toString(), cp.lineSeparator);
421                                                                 for(int i=0;i<strSplit[IDX_CONTENTS_2].length;i++)if(!strSplit[IDX_CONTENTS_2][i].trim().equals(""))pw[W_DROP_UKEY].println(strSplit[IDX_CONTENTS_2][i]);
422                                                         } else {
423                                                                 strSplit[IDX_CONTENTS_1] = CmnUtils.split(sbIxCnts.toString(), cp.lineSeparator);
424                                                                 for(int i=0;i<strSplit[IDX_CONTENTS_1].length;i++)if(!strSplit[IDX_CONTENTS_1][i].trim().equals(""))pw[W_CREATE_INDEX].println(strSplit[IDX_CONTENTS_1][i]);
425                                                         }
426                                                         strSplit[IDX_CONTENTS_3] = CmnUtils.split(sbIx3Cnts.toString(), cp.lineSeparator);
427                                                         for(int i=0;i<strSplit[IDX_CONTENTS_3].length;i++)if(!strSplit[IDX_CONTENTS_3][i].trim().equals(""))pw[W_DROP_INDEX].println(strSplit[IDX_CONTENTS_3][i]);
428
429                                                         //Initial Process
430                                                         sbIxCnts = new StringBuffer();
431                                                         sbIx2Cnts = new StringBuffer();
432                                                         sbIx3Cnts = new StringBuffer();
433
434                                                         //Index Changed Process
435                                                         if (strSplit[LINE][COL04].equals("P")){
436                                                                 if (cp.dbType == cp.DB_TYPE_MYSQL){
437                                                                         sbIxCnts.append("ALTER TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]+ " ADD CONSTRAINT PRIMARY KEY(");
438                                                                         sbIx2Cnts.append("ALTER TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]+ " DROP PRIMARY KEY" + cp.SQL_TERMINATOR[cp.dbType]);
439                                                                 } else {
440                                                                         sbIxCnts.append("ALTER TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]+ " ADD CONSTRAINT " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL02] + cp.DB_SQL_QUOTEDE[cp.dbType]+ " PRIMARY KEY(");
441                                                                         sbIx2Cnts.append("ALTER TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]+ " DROP CONSTRAINT " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL02] + cp.DB_SQL_QUOTEDE[cp.dbType]+ cp.SQL_TERMINATOR[cp.dbType]);
442                                                                 }
443                                                         } else if (strSplit[LINE][COL04].equals("U")){
444                                                                 if (cp.dbType == cp.DB_TYPE_DB2){
445                                                                         sbIxCnts.append("CREATE UNIQUE INDEX " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL02] + cp.DB_SQL_QUOTEDE[cp.dbType] + " ON " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]+ " (");
446                                                                         sbIx2Cnts.append("ALTER TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]+ " DROP UNIQUE(");
447                                                                 } else {
448                                                                         sbIxCnts.append("ALTER TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]+ " ADD CONSTRAINT " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL02] + cp.DB_SQL_QUOTEDE[cp.dbType]+ " UNIQUE(");
449                                                                         sbIx2Cnts.append("ALTER TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]+ " DROP UNIQUE(");
450                                                                 }
451                                                         } else {
452                                                                 if (cp.dbType == cp.DB_TYPE_MYSQL && !strSplit[LINE][COL03].equals("") && !strSplit[LINE][COL03].equals("BTREE")){
453                                                                         sbIxCnts.append("CREATE " + strSplit[LINE][COL03] + " INDEX " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL02] + cp.DB_SQL_QUOTEDE[cp.dbType]+ " ON " + strSplit[LINE][COL01] + "(");
454                                                                 } else {
455                                                                         sbIxCnts.append("CREATE INDEX " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL02] + cp.DB_SQL_QUOTEDE[cp.dbType]+ " ON " + strSplit[LINE][COL01] + "(");
456                                                                 }
457                                                         }
458                                                         sbIx3Cnts.append("DROP INDEX " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL02] + cp.DB_SQL_QUOTEDE[cp.dbType]+ cp.SQL_TERMINATOR[cp.dbType]);
459                                                 } else if (strSplit[LINE][COL02].equals(indexName) && strSplit[LINE][COL01].equals(tableName)){
460                                                         if (colPos.equals("1")){
461                                                                 sbIxCnts.append(cp.DB_SQL_QUOTEDS[cp.dbType]+ colName + cp.DB_SQL_QUOTEDE[cp.dbType]);
462                                                                 if (constraintType.equals("U"))sbIx2Cnts.append(cp.DB_SQL_QUOTEDS[cp.dbType]+ colName + cp.DB_SQL_QUOTEDE[cp.dbType]);
463                                                         } else {
464                                                                 sbIxCnts.append(", " + cp.DB_SQL_QUOTEDS[cp.dbType]+ colName + cp.DB_SQL_QUOTEDE[cp.dbType]);
465                                                                 if (constraintType.equals("U"))sbIx2Cnts.append(", " + cp.DB_SQL_QUOTEDS[cp.dbType]+ colName + cp.DB_SQL_QUOTEDE[cp.dbType]);
466                                                         }
467                                                 }
468                                         }
469
470                                         //1st Line Process
471                                         else {
472                                                 if (strSplit[LINE][COL04].equals("P")){
473                                                         if (cp.dbType == cp.DB_TYPE_MYSQL){
474                                                                 sbIxCnts.append("ALTER TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]+ " ADD CONSTRAINT  PRIMARY KEY(");
475                                                                 sbIx2Cnts.append("ALTER TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]+ " DROP PRIMARY KEY" + cp.SQL_TERMINATOR[cp.dbType]);
476                                                         } else {
477                                                                 sbIxCnts.append("ALTER TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]+ " ADD CONSTRAINT " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL02] + cp.DB_SQL_QUOTEDE[cp.dbType]+ " PRIMARY KEY(");
478                                                                 sbIx2Cnts.append("ALTER TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]+ " DROP CONSTRAINT " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL02] + cp.DB_SQL_QUOTEDE[cp.dbType]+ cp.SQL_TERMINATOR[cp.dbType]);
479                                                         }
480                                                 } else if (strSplit[LINE][COL04].equals("U")){
481                                                         if (cp.dbType == cp.DB_TYPE_DB2){
482                                                                 sbIxCnts.append("CREATE UNIQUE INDEX " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL02] + cp.DB_SQL_QUOTEDE[cp.dbType] + " ON " + cp.DB_SQL_QUOTEDS[cp.dbType] + strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]+ " (");
483                                                         } else {
484                                                                 sbIxCnts.append("ALTER TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]+ " ADD CONSTRAINT " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL02] + cp.DB_SQL_QUOTEDE[cp.dbType]+ " UNIQUE(");
485                                                         }
486                                                         sbIx2Cnts.append("ALTER TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]+ " DROP UNIQUE(");
487                                                 } else {
488                                                         if (cp.dbType == cp.DB_TYPE_MYSQL && !strSplit[LINE][COL03].equals("") && !strSplit[LINE][COL03].equals("BTREE")){
489                                                                 sbIxCnts.append("CREATE " + strSplit[LINE][COL03] + " INDEX " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL02] + cp.DB_SQL_QUOTEDE[cp.dbType]+ " ON " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]+ "(");
490                                                         } else {
491                                                                 sbIxCnts.append("CREATE INDEX " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL02] + cp.DB_SQL_QUOTEDE[cp.dbType]+ " ON " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]+ "(");
492                                                         }
493                                                 }
494                                                 sbIx3Cnts.append("DROP INDEX " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL02] + cp.DB_SQL_QUOTEDE[cp.dbType]+ cp.SQL_TERMINATOR[cp.dbType]);
495                                         }
496                                         for(int i=0;i<strSplit[LINE].length;i++)CmnUtils.debugPrint("'" + strSplit[LINE][i] + "'");
497
498                                         tableName = strSplit[LINE][COL01];
499                                         indexName = strSplit[LINE][COL02];
500                                         indexType = strSplit[LINE][COL03];
501                                         constraintType = strSplit[LINE][COL04];
502                                         colName = strSplit[LINE][COL05];
503                                         colPos = strSplit[LINE][COL06];
504                                 }
505                         }
506                         if (!indexName.equals("")){
507                                 //Post Process
508                                 if (colPos.equals("1")){
509                                         sbIxCnts.append(cp.DB_SQL_QUOTEDS[cp.dbType]+ colName + cp.DB_SQL_QUOTEDE[cp.dbType]);
510                                         if (constraintType.equals("U"))sbIx2Cnts.append(cp.DB_SQL_QUOTEDS[cp.dbType]+ colName + cp.DB_SQL_QUOTEDE[cp.dbType]);
511                                 } else {
512                                         sbIxCnts.append(", " + cp.DB_SQL_QUOTEDS[cp.dbType]+ colName + cp.DB_SQL_QUOTEDE[cp.dbType]);
513                                         if (constraintType.equals("U"))sbIx2Cnts.append(", " + cp.DB_SQL_QUOTEDS[cp.dbType]+ colName + cp.DB_SQL_QUOTEDE[cp.dbType]);
514                                 }
515                                 sbIxCnts.append(")" + cp.SQL_TERMINATOR[cp.dbType]);
516                                 sbIxCnts.append(cp.lineSeparator);
517                                 if (constraintType.equals("U"))sbIx2Cnts.append(")" + cp.SQL_TERMINATOR[cp.dbType]);
518                                 sbIx2Cnts.append(cp.lineSeparator);
519                                 sbIx3Cnts.append(cp.lineSeparator);
520
521                                 //Write Buffer
522                                 if (constraintType.equals("P")){
523                                         strSplit[IDX_CONTENTS_1] = CmnUtils.split(sbIxCnts.toString(), cp.lineSeparator);
524                                         for(int i=0;i<strSplit[IDX_CONTENTS_1].length;i++)if(!strSplit[IDX_CONTENTS_1][i].trim().equals(""))pw[W_CREATE_PKEY].println(strSplit[IDX_CONTENTS_1][i]);
525                                         strSplit[IDX_CONTENTS_2] = CmnUtils.split(sbIx2Cnts.toString(), cp.lineSeparator);
526                                         for(int i=0;i<strSplit[IDX_CONTENTS_2].length;i++)if(!strSplit[IDX_CONTENTS_2][i].trim().equals(""))pw[W_DROP_PKEY].println(strSplit[IDX_CONTENTS_2][i]);
527                                 } else if (constraintType.equals("U")){
528                                         strSplit[IDX_CONTENTS_1] = CmnUtils.split(sbIxCnts.toString(), cp.lineSeparator);
529                                         for(int i=0;i<strSplit[IDX_CONTENTS_1].length;i++)if(!strSplit[IDX_CONTENTS_1][i].trim().equals(""))pw[W_CREATE_UKEY].println(strSplit[IDX_CONTENTS_1][i]);
530                                         strSplit[IDX_CONTENTS_2] = CmnUtils.split(sbIx2Cnts.toString(), cp.lineSeparator);
531                                         for(int i=0;i<strSplit[IDX_CONTENTS_2].length;i++)if(!strSplit[IDX_CONTENTS_2][i].trim().equals(""))pw[W_DROP_UKEY].println(strSplit[IDX_CONTENTS_2][i]);
532                                 } else {
533                                         strSplit[IDX_CONTENTS_1] = CmnUtils.split(sbIxCnts.toString(), cp.lineSeparator);
534                                         for(int i=0;i<strSplit[IDX_CONTENTS_1].length;i++)if(!strSplit[IDX_CONTENTS_1][i].trim().equals(""))pw[W_CREATE_INDEX].println(strSplit[IDX_CONTENTS_1][i]);
535                                 }
536                                 strSplit[IDX_CONTENTS_3] = CmnUtils.split(sbIx3Cnts.toString(), cp.lineSeparator);
537                                 for(int i=0;i<strSplit[IDX_CONTENTS_3].length;i++)if(!strSplit[IDX_CONTENTS_3][i].trim().equals(""))pw[W_DROP_INDEX].println(strSplit[IDX_CONTENTS_3][i]);
538                         }
539
540                         //Close Buffer
541                         for(int i=0;i<pw.length;i++){
542                                 if(pw[i]!=null){
543                                         pw[i].close();
544                                         pw[i]=null;
545                                 }
546                         }
547                         br[WK_FILE].close();
548                         br[WK_FILE] = null;
549                         // Index Contents end
550
551                         // View Contents start
552                         br[WK_FILE] = new BufferedReader(new FileReader(folder + "/" + cp.WK_FILE_NAME[cp.TYPE_VIEW] + "_" + database + "." + cp.fileExtension));
553                         subFolder = new File(folder + "/VIEWS");
554                         subFolder.mkdir();
555                         pw[CREATE] = new PrintWriter(new BufferedWriter(new FileWriter(new File(folder + "/" + cp.SQL_FILE_NAME[cp.CREATE_VIEW]))));
556                         pw[DROP] = new PrintWriter(new BufferedWriter(new FileWriter(new File(folder + "/" + cp.SQL_FILE_NAME[cp.DROP_VIEW]))));
557                         while((strLine=br[WK_FILE].readLine()) != null){
558                                 strSplit[LINE] = CmnUtils.split(strLine, cp.delimiter);
559                                 CmnUtils.debugPrint("'" + strSplit[LINE][COL01] + "'");
560                                 pw[CREATE].println(cp.SQL_PREFIX[cp.dbType] + "VIEWS/" + strSplit[LINE][COL01] + ".sql");
561                                 pw[DROP].print("DROP VIEW " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]+ cp.SQL_TERMINATOR[cp.dbType]);
562                                 if (strSplit[LINE].length>1)CmnUtils.debugPrint("'" + strSplit[LINE][COL02] + "'");
563                                 pw[CONTENTS] = new PrintWriter(new BufferedWriter(new FileWriter(new File(subFolder + "/" + strSplit[LINE][COL01] + ".sql"))));
564                                 
565                                 stmt = dao.prepareSql(cp.sql_view_column_and_comment[cp.dbType]);
566                                 stmt.setString(1,strSplit[LINE][COL01]);
567                                 dao.executeSql();
568                                 alData = dao.getArrayList();
569                                 columnCount = dao.getColumnCount();
570                                 if (cp.dbType == cp.DB_TYPE_ORACLE || cp.dbType == cp.DB_TYPE_MYSQL){
571                                         pw[CONTENTS].println("/* " + strSplit[LINE][COL01] + " */");
572                                         if (cp.dbType == cp.DB_TYPE_ORACLE){
573                                                 pw[CONTENTS].println("CREATE OR REPLACE VIEW " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]);
574                                         } else {
575                                                 pw[CONTENTS].println("CREATE VIEW " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]);
576                                         }
577                                         pw[CONTENTS].println("(");
578                                         for(int i=0;i<alData.size();i++){
579                                                 if ((i+1) % columnCount == 1){
580                                                         if (i == 0){
581                                                                 if (!alData.get(i+1).trim().equals("")){
582                                                                         pw[CONTENTS].println("    " + cp.DB_SQL_QUOTEDS[cp.dbType]+ alData.get(i) + cp.DB_SQL_QUOTEDE[cp.dbType]+ "    -- " + alData.get(i+1));
583                                                                 } else {
584                                                                         pw[CONTENTS].println("    " + cp.DB_SQL_QUOTEDS[cp.dbType]+ alData.get(i) + cp.DB_SQL_QUOTEDE[cp.dbType]);
585                                                                 }
586                                                         } else {
587                                                                 if (!alData.get(i+1).trim().equals("")){
588                                                                         pw[CONTENTS].println("    ," + cp.DB_SQL_QUOTEDS[cp.dbType]+ alData.get(i) + cp.DB_SQL_QUOTEDE[cp.dbType]+ "    -- " + alData.get(i+1));
589                                                                 } else {
590                                                                         pw[CONTENTS].println("    ," + cp.DB_SQL_QUOTEDS[cp.dbType]+ alData.get(i) + cp.DB_SQL_QUOTEDE[cp.dbType]);
591                                                                 }
592                                                         }
593                                                 }
594                                         }
595                                         pw[CONTENTS].println(")");
596                                         pw[CONTENTS].println("AS");
597                                 }
598                                 stmt = dao.prepareSql(cp.sql_view_text[cp.dbType]);
599                                 stmt.setString(1,strSplit[LINE][COL01]);
600                                 dao.executeSql();
601                                 alData2 = dao.getArrayList();
602                                 strContents = alData2.get(0).trim();
603                                 strSplit[1] = CmnUtils.split(strContents, cp.lineSeparator);
604                                 for(int i=0;i<strSplit[1].length;i++)if(!strSplit[1][i].trim().equals(""))pw[CONTENTS].println(strSplit[1][i].replaceAll("\"\"","\"").replaceAll(Pattern.quote(cp.user.toUpperCase() + "."),"").replaceAll(Pattern.quote(cp.user.toLowerCase() + "."),""));
605                                 pw[CONTENTS].print(cp.SQL_TERMINATOR[cp.dbType]);
606
607                                 if (!strSplit[LINE][COL02].trim().equals(""))pw[CONTENTS].print(commentOnTable(cp, strSplit[LINE][COL01], strSplit[LINE][COL02], cp.TYPE_VIEW));
608                                 for(int i=0;i<alData.size();i++){
609                                         if ((i+1) % columnCount == 0){
610                                                 if (!alData.get(i).trim().equals(""))pw[CONTENTS].print(commentOnColumn(cp, strSplit[LINE][COL01], alData.get(i-1), alData.get(i), cp.TYPE_VIEW));
611                                         }
612                                 }
613                                 pw[CONTENTS].close();
614                                 pw[CONTENTS] = null;
615                                 CmnUtils.infoPrint(String.format("%1$-42s", "[VIEW] " + strSplit[LINE][COL01]) + " \83\81\83^\83f\81[\83^\82ª\83A\83\93\83\8d\81[\83h\82³\82ê\82Ü\82µ\82½\81B");
616                         }
617                         for(int i=0;i<pw.length;i++){
618                                 if(pw[i]!=null){
619                                         pw[i].close();
620                                         pw[i]=null;
621                                 }
622                         }
623                         br[WK_FILE].close();
624                         br[WK_FILE] = null;
625                         // View Contents end
626
627                         // Procedure Contents start
628                         br[WK_FILE] = new BufferedReader(new FileReader(folder + "/" + cp.WK_FILE_NAME[cp.TYPE_PROCEDURE] + "_" + database + "." + cp.fileExtension));
629                         subFolder = new File(folder + "/PROCEDURES");
630                         subFolder.mkdir();
631                         pw[CREATE] = new PrintWriter(new BufferedWriter(new FileWriter(new File(folder + "/" + cp.SQL_FILE_NAME[cp.CREATE_PROCEDURE]))));
632                         pw[DROP] = new PrintWriter(new BufferedWriter(new FileWriter(new File(folder + "/" + cp.SQL_FILE_NAME[cp.DROP_PROCEDURE]))));
633                         while((strLine=br[WK_FILE].readLine()) != null){
634                                 strSplit[LINE] = CmnUtils.split(strLine, cp.delimiter);
635                                 CmnUtils.debugPrint("'" + strSplit[LINE][COL01] + "'");
636                                 pw[CREATE].println(cp.SQL_PREFIX[cp.dbType] + "PROCEDURES/" + strSplit[LINE][COL01] + ".sql");
637                                 pw[DROP].print("DROP " + strSplit[LINE][COL02] + " " + cp.DB_SQL_QUOTEDS[cp.dbType] + strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType] + cp.SQL_TERMINATOR[cp.dbType]);
638                                 if (strSplit[LINE].length>1)CmnUtils.debugPrint("'" + strSplit[LINE][COL02] + "'");
639                                 pw[CONTENTS] = new PrintWriter(new BufferedWriter(new FileWriter(new File(subFolder + "/" + strSplit[LINE][COL01] + ".sql"))));
640                                 if (cp.dbType == cp.DB_TYPE_ORACLE){
641                                         pw[CONTENTS].println("/* " + strSplit[LINE][COL01] + " */");
642                                         pw[CONTENTS].print("CREATE OR REPLACE ");
643                                 }
644                                 if (cp.dbType == cp.DB_TYPE_MYSQL){
645                                         if(strSplit[LINE][COL02].equals("TRIGGER")){
646                                                 stmt = dao.prepareSql("show create trigger " + cp.DB_SQL_QUOTEDS[cp.dbType] + strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]);
647                                         } else if (strSplit[LINE][COL02].equals("PROCEDURE")){
648                                                 stmt = dao.prepareSql("show create procedure " + cp.DB_SQL_QUOTEDS[cp.dbType] + strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]);
649                                         } else if (strSplit[LINE][COL02].equals("FUNCTION")){
650                                                 stmt = dao.prepareSql("show create function " + cp.DB_SQL_QUOTEDS[cp.dbType] + strSplit[LINE][COL01] + cp.DB_SQL_QUOTEDE[cp.dbType]);
651                                         }
652                                 } else {
653                                         stmt = dao.prepareSql(cp.sql_proc[cp.dbType]);
654                                         stmt.setString(1,strSplit[LINE][COL02]);
655                                         stmt.setString(2,strSplit[LINE][COL01]);
656                                 }
657                                 dao.executeSql();
658                                 alData = dao.getArrayList();
659                                 boolean mysql_s_flag = false;
660                                 boolean mysql_e_flag = false;
661                                 for(int i=0;i<alData.size();i++){
662                                         strContents = alData.get(i);
663                                         if (cp.dbType == cp.DB_TYPE_MYSQL){
664                                                 if(!mysql_s_flag){
665                                                         String [] spcDiv = CmnUtils.split(strContents," ");
666                                                         if(spcDiv.length >0 && spcDiv[0].toUpperCase().equals("CREATE")){
667                                                                 mysql_s_flag = true;
668                                                                 for(int j=0;j<spcDiv.length;j++){
669                                                                         if(j==0){
670                                                                                 pw[CONTENTS].print(spcDiv[j]);
671                                                                         } else if(j!=1) {
672                                                                                 pw[CONTENTS].print(" " + spcDiv[j]);
673                                                                         }
674                                                                 }
675                                                         }
676                                                 } else if(mysql_s_flag && !mysql_e_flag){
677                                                         String [] spcDiv = CmnUtils.split(strContents," ");
678                                                         if(spcDiv.length >0 && CmnUtils.isCharacterSet(spcDiv[0])){
679                                                                 mysql_e_flag = true;
680                                                                 pw[CONTENTS].println("");
681                                                         } else {
682                                                                 for(int j=0;j<spcDiv.length;j++){
683                                                                         if(j==0){
684                                                                                 pw[CONTENTS].print(spcDiv[j]);
685                                                                         } else {
686                                                                                 pw[CONTENTS].print(" " + spcDiv[j]);
687                                                                         }
688                                                                 }
689                                                         }
690                                                 }
691                                         } else {
692                                                 if(!strContents.equals(""))pw[CONTENTS].println(strContents.replaceAll("\"\"","\"").replaceAll(Pattern.quote(cp.user.toUpperCase() + "."),"").replaceAll(Pattern.quote(cp.user.toLowerCase() + "."),""));
693                                         }
694                                 }
695                                 
696                                 if (cp.dbType == cp.DB_TYPE_SQLSERVER){
697                                         pw[CONTENTS].print(cp.SQL_TERMINATOR[cp.dbType]);
698                                 }
699                                 pw[CONTENTS].close();
700                                 pw[CONTENTS] = null;
701                                 CmnUtils.infoPrint(String.format("%1$-42s","[PROCEDURE] " + strSplit[LINE][COL01]) + " \83\81\83^\83f\81[\83^\82ª\83A\83\93\83\8d\81[\83h\82³\82ê\82Ü\82µ\82½\81B");
702                         }
703                         for(int i=0;i<pw.length;i++){
704                                 if(pw[i]!=null){
705                                         pw[i].close();
706                                         pw[i]=null;
707                                 }
708                         }
709                         br[WK_FILE].close();
710                         br[WK_FILE] = null;
711                         // Procedure Contents end
712
713                         // Sequence Contents start
714                         br[WK_FILE] = new BufferedReader(new FileReader(folder + "/" + cp.WK_FILE_NAME[cp.TYPE_SEQ] + "_" + database + "." + cp.fileExtension));
715                         pw[CREATE] = new PrintWriter(new BufferedWriter(new FileWriter(new File(folder + "/" + cp.SQL_FILE_NAME[cp.CREATE_SEQUENCE]))));
716                         pw[DROP] = new PrintWriter(new BufferedWriter(new FileWriter(new File(folder + "/" + cp.SQL_FILE_NAME[cp.DROP_SEQUENCE]))));
717
718                         while((strLine=br[WK_FILE].readLine()) != null){
719                                 strSplit[LINE] = CmnUtils.split(strLine, cp.delimiter);
720                                 seqName = strSplit[LINE][COL01];
721                                 minVal = strSplit[LINE][COL02];
722                                 maxVal = strSplit[LINE][COL03];
723                                 incSz = strSplit[LINE][COL04];
724                                 cycFg = strSplit[LINE][COL05];
725                                 odFg = strSplit[LINE][COL06];
726                                 cacheSz = strSplit[LINE][COL07];
727                                 if(cacheSz.equals("0"))cacheSz="10";
728                                 lstNo = strSplit[LINE][COL08];
729                                 if (cp.dbType == cp.DB_TYPE_DB2){
730                                         pw[CREATE].print("CREATE SEQUENCE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ seqName + cp.DB_SQL_QUOTEDE[cp.dbType]+ " AS BIGINT MINVALUE " + minVal + " MAXVALUE " + maxVal + " INCREMENT BY " + incSz + " START WITH " + lstNo);
731                                 } else {
732                                         pw[CREATE].print("CREATE SEQUENCE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ seqName + cp.DB_SQL_QUOTEDE[cp.dbType]+ " MINVALUE " + minVal + " MAXVALUE " + maxVal + " INCREMENT BY " + incSz + " START WITH " + lstNo);
733                                 }
734                                 if (cp.dbType == cp.DB_TYPE_ORACLE){
735                                         pw[CREATE].print(" CACHE " + cacheSz);
736                                         if (odFg.equals("N")){
737                                                 pw[CREATE].print(" NOORDER");
738                                         } else {
739                                                 pw[CREATE].print(" ORDER");
740                                         }
741                                         if (cycFg.equals("N")){
742                                                 pw[CREATE].print(" NOCYCLE");
743                                         } else {
744                                                 pw[CREATE].print(" CYCLE");
745                                         }
746                                 } else if (cp.dbType == cp.DB_TYPE_SQLSERVER){
747                                         if (cacheSz.equals("")){
748                                                 pw[CREATE].print(" NO CACHE");
749                                         } else {
750                                                 pw[CREATE].print(" CACHE " + cacheSz);
751                                         }
752                                         if (cycFg.equals("N")){
753                                                 pw[CREATE].print(" NO CYCLE");
754                                         } else {
755                                                 pw[CREATE].print(" CYCLE");
756                                         }
757                                 } else if (cp.dbType == cp.DB_TYPE_DB2){
758                                         if (cacheSz.equals("")){
759                                                 pw[CREATE].print(" NO CACHE");
760                                         } else {
761                                                 pw[CREATE].print(" CACHE " + cacheSz);
762                                         }
763                                         if (cycFg.equals("N")){
764                                                 pw[CREATE].print(" NO CYCLE");
765                                         } else {
766                                                 pw[CREATE].print(" CYCLE");
767                                         }
768                                         if (odFg.equals("N")){
769                                                 pw[CREATE].print(" NO ORDER");
770                                         } else {
771                                                 pw[CREATE].print(" ORDER");
772                                         }
773                                 }
774                                 pw[CREATE].print(cp.SQL_TERMINATOR[cp.dbType]);
775                                 pw[DROP].print("DROP SEQUENCE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ seqName + cp.DB_SQL_QUOTEDE[cp.dbType]+ cp.SQL_TERMINATOR[cp.dbType]);
776                                 for(int i=0;i<strSplit[LINE].length;i++)CmnUtils.debugPrint("'" + strSplit[LINE][i] + "'");
777                         }
778                         for(int i=0;i<pw.length;i++){
779                                 if(pw[i]!=null){
780                                         pw[i].close();
781                                         pw[i]=null;
782                                 }
783                         }
784                         br[WK_FILE].close();
785                         br[WK_FILE] = null;
786                         // Sequence Contents end
787
788                         // Synonym Contents start
789                         br[WK_FILE] = new BufferedReader(new FileReader(folder + "/" + cp.WK_FILE_NAME[cp.TYPE_SYNONYM] + "_" + database + "." + cp.fileExtension));
790                         pw[CREATE] = new PrintWriter(new BufferedWriter(new FileWriter(new File(folder + "/" + cp.SQL_FILE_NAME[cp.CREATE_SYNONYM]))));
791                         pw[DROP] = new PrintWriter(new BufferedWriter(new FileWriter(new File(folder + "/" + cp.SQL_FILE_NAME[cp.DROP_SYNONYM]))));
792
793                         while((strLine=br[WK_FILE].readLine()) != null){
794                                 strSplit[LINE] = CmnUtils.split(strLine, cp.delimiter);
795                                 synmName = strSplit[LINE][COL01];
796                                 tbOwner = strSplit[LINE][COL02];
797                                 tbName = strSplit[LINE][COL03];
798                                 dbLnk = strSplit[LINE][COL04];
799                                 
800                                 pw[CREATE].print("CREATE SYNONYM " + cp.DB_SQL_QUOTEDS[cp.dbType] + synmName + cp.DB_SQL_QUOTEDE[cp.dbType] + " FOR ");
801                                 if(cp.dbType == cp.DB_TYPE_ORACLE){
802                                         if(!dbLnk.equals("")){
803                                                 pw[CREATE].print(cp.DB_SQL_QUOTEDS[cp.dbType] + tbName + cp.DB_SQL_QUOTEDE[cp.dbType] + "@" + cp.DB_SQL_QUOTEDS[cp.dbType]+ dbLnk + cp.DB_SQL_QUOTEDS[cp.dbType]);
804                                         } else {
805                                                 pw[CREATE].print(cp.DB_SQL_QUOTEDS[cp.dbType] + tbOwner + cp.DB_SQL_QUOTEDE[cp.dbType] + "." + cp.DB_SQL_QUOTEDS[cp.dbType]+ tbName + cp.DB_SQL_QUOTEDE[cp.dbType]);
806                                         }
807                                 } else {
808                                         pw[CREATE].print(cp.DB_SQL_QUOTEDS[cp.dbType] + tbName + cp.DB_SQL_QUOTEDE[cp.dbType]);
809                                 }
810                                 pw[CREATE].print(cp.SQL_TERMINATOR[cp.dbType]);
811                                 pw[DROP].print("DROP SYNONYM " + cp.DB_SQL_QUOTEDS[cp.dbType] + synmName + cp.DB_SQL_QUOTEDE[cp.dbType] + cp.SQL_TERMINATOR[cp.dbType]);
812                                 for(int i=0;i<strSplit[LINE].length;i++)CmnUtils.debugPrint("'" + strSplit[LINE][i] + "'");
813                         }
814                         for(int i=0;i<pw.length;i++){
815                                 if(pw[i]!=null){
816                                         pw[i].close();
817                                         pw[i]=null;
818                                 }
819                         }
820                         br[WK_FILE].close();
821                         br[WK_FILE] = null;
822                         // Synonym Contents end
823
824                         // Fk Contents start
825                         File tsvFile = new File(folder + "/" + cp.WK_FILE_NAME[cp.TYPE_FK] + "_" + database + "." + cp.fileExtension);
826                         if (tsvFile.length() > 0) {
827                                 br[WK_FILE] = new BufferedReader(new FileReader(folder + "/" + cp.WK_FILE_NAME[cp.TYPE_FK] + "_" + database + "." + cp.fileExtension));
828                                 pw[CREATE] = new PrintWriter(new BufferedWriter(new FileWriter(new File(folder + "/" + cp.SQL_FILE_NAME[cp.CREATE_FK]))));
829                                 pw[DROP] = new PrintWriter(new BufferedWriter(new FileWriter(new File(folder + "/" + cp.SQL_FILE_NAME[cp.DROP_FK]))));
830                                 tbName = "";
831                                 fkName = "";
832                                 fkCol = "";
833                                 fkColPos = "";
834                                 rtbName = "";
835                                 rfkCol = "";
836                                 rfkColPos = "";
837                                 
838                                 while((strLine=br[WK_FILE].readLine()) != null){
839                                         strSplit[LINE] = CmnUtils.split(strLine, cp.delimiter);
840                                         if(!fkName.equals(strSplit[LINE][COL02]) && !fkName.equals("")){
841                                                 pw[CREATE].print("ALTER TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ tbName + cp.DB_SQL_QUOTEDE[cp.dbType]+ " ADD CONSTRAINT " + cp.DB_SQL_QUOTEDS[cp.dbType]+ fkName + cp.DB_SQL_QUOTEDE[cp.dbType]+ " FOREIGN KEY (" + cp.DB_SQL_QUOTEDS[cp.dbType]+ fkCol + cp.DB_SQL_QUOTEDE[cp.dbType]+ ") REFERENCES " + cp.DB_SQL_QUOTEDS[cp.dbType]+ rtbName + cp.DB_SQL_QUOTEDE[cp.dbType]+ " (" + cp.DB_SQL_QUOTEDS[cp.dbType]+ rfkCol + cp.DB_SQL_QUOTEDE[cp.dbType]+ ")" + cp.SQL_TERMINATOR[cp.dbType]);
842                                                 if(cp.dbType == cp.DB_TYPE_MYSQL){
843                                                         pw[DROP].print("ALTER TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ tbName + cp.DB_SQL_QUOTEDE[cp.dbType]+ " DROP FOREIGN KEY " + cp.DB_SQL_QUOTEDS[cp.dbType]+ fkName + cp.DB_SQL_QUOTEDE[cp.dbType]+ cp.SQL_TERMINATOR[cp.dbType]);
844                                                 } else {
845                                                         pw[DROP].print("ALTER TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ tbName + cp.DB_SQL_QUOTEDE[cp.dbType]+ " DROP CONSTRAINT " + cp.DB_SQL_QUOTEDS[cp.dbType]+ fkName + cp.DB_SQL_QUOTEDE[cp.dbType]+ cp.SQL_TERMINATOR[cp.dbType]);
846                                                 }
847                                                 for(int i=0;i<strSplit[LINE].length;i++)CmnUtils.debugPrint("'" + strSplit[LINE][i] + "'");
848                                                 tbName = strSplit[LINE][COL01];
849                                                 fkName = strSplit[LINE][COL02];
850                                                 fkCol = strSplit[LINE][COL03];
851                                                 fkColPos = strSplit[LINE][COL04];
852                                                 rtbName = strSplit[LINE][COL05];
853                                                 rfkCol = strSplit[LINE][COL06];
854                                                 rfkColPos = strSplit[LINE][COL07];
855                                         } else {
856                                                 if(fkName.equals("")){
857                                                         tbName = strSplit[LINE][COL01];
858                                                         fkName = strSplit[LINE][COL02];
859                                                         fkCol = strSplit[LINE][COL03];
860                                                         fkColPos = strSplit[LINE][COL04];
861                                                         rtbName = strSplit[LINE][COL05];
862                                                         rfkCol = strSplit[LINE][COL06];
863                                                         rfkColPos = strSplit[LINE][COL07];
864                                                 } else {
865                                                         if (
866                                                                 (cp.dbType == cp.DB_TYPE_ORACLE && strSplit[LINE][COL04].equals(strSplit[LINE][COL07])) ||
867                                                                  cp.dbType != cp.DB_TYPE_ORACLE
868                                                         ) {
869                                                                 fkCol = fkCol + cp.DB_SQL_QUOTEDE[cp.dbType]+ ", " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL03];
870                                                                 rfkCol = rfkCol + cp.DB_SQL_QUOTEDE[cp.dbType]+ ", " + cp.DB_SQL_QUOTEDS[cp.dbType]+ strSplit[LINE][COL06];
871                                                         }
872                                                 }
873                                         }
874                                         
875                                 }
876                                 pw[CREATE].print("ALTER TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ tbName + cp.DB_SQL_QUOTEDE[cp.dbType]+ " ADD CONSTRAINT " + cp.DB_SQL_QUOTEDS[cp.dbType]+ fkName + cp.DB_SQL_QUOTEDE[cp.dbType]+ " FOREIGN KEY (" + cp.DB_SQL_QUOTEDS[cp.dbType]+ fkCol + cp.DB_SQL_QUOTEDE[cp.dbType]+ ") REFERENCES " + cp.DB_SQL_QUOTEDS[cp.dbType]+ rtbName + cp.DB_SQL_QUOTEDE[cp.dbType]+ " (" + cp.DB_SQL_QUOTEDS[cp.dbType]+ rfkCol + cp.DB_SQL_QUOTEDE[cp.dbType]+ ")" + cp.SQL_TERMINATOR[cp.dbType]);
877                                 if(cp.dbType == cp.DB_TYPE_MYSQL){
878                                         pw[DROP].print("ALTER TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ tbName + cp.DB_SQL_QUOTEDE[cp.dbType]+ " DROP FOREIGN KEY " + cp.DB_SQL_QUOTEDS[cp.dbType]+ fkName + cp.DB_SQL_QUOTEDE[cp.dbType]+ cp.SQL_TERMINATOR[cp.dbType]);
879                                 } else {
880                                         pw[DROP].print("ALTER TABLE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ tbName + cp.DB_SQL_QUOTEDE[cp.dbType]+ " DROP CONSTRAINT " + cp.DB_SQL_QUOTEDS[cp.dbType]+ fkName + cp.DB_SQL_QUOTEDE[cp.dbType]+ cp.SQL_TERMINATOR[cp.dbType]);
881                                 }
882                                         for(int i=0;i<pw.length;i++){
883                                         if(pw[i]!=null){
884                                                 pw[i].close();
885                                                 pw[i]=null;
886                                         }
887                                 }
888                                 br[WK_FILE].close();
889                                 br[WK_FILE] = null;
890                         }
891                         // Fk Contents end
892
893                         // Rhysical Contents start
894                         if(cp.isPhysical && cp.dbType == cp.DB_TYPE_ORACLE){
895                                 // physical index setting
896                                 br[WK_FILE] = new BufferedReader(new FileReader(folder + "/" + cp.WK_FILE_NAME[cp.TYPE_OBJ] + "_" + database + "." + cp.fileExtension));
897                                 br[R_CREATE_PKEY] = new BufferedReader(new FileReader(folder + "/" + cp.SQL_FILE_NAME[cp.CREATE_PKEY]));
898                                 br[R_CREATE_UKEY] = new BufferedReader(new FileReader(folder + "/" + cp.SQL_FILE_NAME[cp.CREATE_UKEY]));
899                                 br[R_CREATE_INDEX] = new BufferedReader(new FileReader(folder + "/" + cp.SQL_FILE_NAME[cp.CREATE_INDEX]));
900                                 pw[W_CREATE_PKEY] = new PrintWriter(new BufferedWriter(new FileWriter(new File(folder + "/" + cp.SQL_FILE_NAME[cp.CREATE_PKEY] + "." + phyfileExtension))));
901                                 pw[W_CREATE_UKEY] = new PrintWriter(new BufferedWriter(new FileWriter(new File(folder + "/" + cp.SQL_FILE_NAME[cp.CREATE_UKEY] + "." + phyfileExtension))));
902                                 pw[W_CREATE_INDEX] = new PrintWriter(new BufferedWriter(new FileWriter(new File(folder + "/" + cp.SQL_FILE_NAME[cp.CREATE_INDEX] + "." + phyfileExtension))));
903                                 alData = new ArrayList<String>();
904                                 int rowNo;
905                                 String [] rowData;
906                                 while((strLine=br[WK_FILE].readLine()) != null){
907                                         strSplit[LINE] = CmnUtils.split(strLine, cp.delimiter);
908                                         for(int i=0;i<strSplit[LINE].length;i++)alData.add(strSplit[LINE][i]);
909                                 }
910                                 while((strLine=br[R_CREATE_PKEY].readLine()) != null){
911                                         strSplit[LINE] = CmnUtils.splitSpace(strLine);
912                                         rowNo = CmnUtils.getArrayRowNo(alData, 12, 1, strSplit[LINE][COL06].replaceAll("\"",""));
913                                         if (rowNo != -1){
914                                                 rowData = CmnUtils.getArrayRowData(alData, 12, rowNo);
915                                                 CmnUtils.debugPrint(strSplit[LINE][COL06] + ":" + rowNo);
916                                                 for(int i=0;i<rowData.length;i++)CmnUtils.debugPrint(rowData[i]);
917                                                 tbName = rowData[COL01];
918                                                 objName = rowData[COL02];
919                                                 objTyp = rowData[COL03];
920                                                 pctFree = rowData[COL04];
921                                                 pctUsed = rowData[COL05];
922                                                 iniTrns = rowData[COL06];
923                                                 freeLst = rowData[COL07];
924                                                 flstGrp = rowData[COL08];
925                                                 bufPool = rowData[COL09];
926                                                 tblSpace = rowData[COL10];
927                                                 logging = rowData[COL11];
928                                                 segByts = rowData[COL12];
929                                                 pw[W_CREATE_PKEY].print(strLine.replace(';',' '));
930                                                 pw[W_CREATE_PKEY].print("USING INDEX PCTFREE " + pctFree);
931                                                 pw[W_CREATE_PKEY].print(" INITRANS " + iniTrns + " STORAGE(");
932                                                 if(!freeLst.equals(""))pw[W_CREATE_PKEY].print(" FREELISTS " + freeLst);
933                                                 if(!flstGrp.equals(""))pw[W_CREATE_PKEY].print(" FREELIST GROUPS " + flstGrp);
934                                                 pw[W_CREATE_PKEY].print(" BUFFER_POOL " + bufPool + ")");
935                                                 pw[W_CREATE_PKEY].print(" TABLESPACE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ tblSpace + cp.DB_SQL_QUOTEDE[cp.dbType]);
936                                                 if(logging.equals("NO")){
937                                                         pw[W_CREATE_PKEY].print(" NOLOGGING" + cp.SQL_TERMINATOR[cp.dbType]);
938                                                 } else {
939                                                         pw[W_CREATE_PKEY].print(cp.SQL_TERMINATOR[cp.dbType]);
940                                                 }
941                                         } else {
942                                                 pw[W_CREATE_PKEY].println(strLine);
943                                                 CmnUtils.errorPrint(strSplit[LINE][COL06] + ",UNUSABLE INDEX");
944                                         }
945                                 }
946                                 while((strLine=br[R_CREATE_UKEY].readLine()) != null){
947                                         strSplit[LINE] = CmnUtils.splitSpace(strLine);
948                                         rowNo = CmnUtils.getArrayRowNo(alData, 12, 1, strSplit[LINE][COL06].replaceAll("\"",""));
949                                         if (rowNo != -1){
950                                                 rowData = rowData = CmnUtils.getArrayRowData(alData, 12, rowNo);
951                                                 CmnUtils.debugPrint(strSplit[LINE][COL06] + ":" + rowNo);
952                                                 for(int i=0;i<rowData.length;i++)CmnUtils.debugPrint(rowData[i]);
953                                                 tbName = rowData[COL01];
954                                                 objName = rowData[COL02];
955                                                 objTyp = rowData[COL03];
956                                                 pctFree = rowData[COL04];
957                                                 pctUsed = rowData[COL05];
958                                                 iniTrns = rowData[COL06];
959                                                 freeLst = rowData[COL07];
960                                                 flstGrp = rowData[COL08];
961                                                 bufPool = rowData[COL09];
962                                                 tblSpace = rowData[COL10];
963                                                 logging = rowData[COL11];
964                                                 segByts = rowData[COL12];
965                                                 pw[W_CREATE_UKEY].print(strLine.replace(';',' '));
966                                                 pw[W_CREATE_UKEY].print("USING INDEX PCTFREE " + pctFree);
967                                                 pw[W_CREATE_UKEY].print(" INITRANS " + iniTrns + " STORAGE(");
968                                                 if(!freeLst.equals(""))pw[W_CREATE_UKEY].print(" FREELISTS " + freeLst);
969                                                 if(!flstGrp.equals(""))pw[W_CREATE_UKEY].print(" FREELIST GROUPS " + flstGrp);
970                                                 pw[W_CREATE_UKEY].print(" BUFFER_POOL " + bufPool + ")");
971                                                 pw[W_CREATE_UKEY].print(" TABLESPACE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ tblSpace + cp.DB_SQL_QUOTEDE[cp.dbType]);
972                                                 if(logging.equals("NO")){
973                                                         pw[W_CREATE_UKEY].print(" NOLOGGING" + cp.SQL_TERMINATOR[cp.dbType]);
974                                                 } else {
975                                                         pw[W_CREATE_UKEY].print(cp.SQL_TERMINATOR[cp.dbType]);
976                                                 }
977                                         } else {
978                                                 pw[W_CREATE_UKEY].println(strLine);
979                                                 CmnUtils.errorPrint(strSplit[LINE][COL06] + ",UNUSABLE INDEX");
980                                         }
981                                 }
982                                 while((strLine=br[R_CREATE_INDEX].readLine()) != null){
983                                         strSplit[LINE] = CmnUtils.splitSpace(strLine);
984                                         rowNo = CmnUtils.getArrayRowNo(alData, 12, 1, strSplit[LINE][COL03].replaceAll("\"",""));
985                                         CmnUtils.debugPrint("rowNo=" + rowNo);
986                                         if (rowNo != -1){
987                                                 rowData = CmnUtils.getArrayRowData(alData, 12, rowNo);
988                                                 for(int i=0;i<rowData.length;i++)CmnUtils.debugPrint(rowData[i]);
989                                                 tbName = rowData[COL01];
990                                                 objName = rowData[COL02];
991                                                 objTyp = rowData[COL03];
992                                                 pctFree = rowData[COL04];
993                                                 pctUsed = rowData[COL05];
994                                                 iniTrns = rowData[COL06];
995                                                 freeLst = rowData[COL07];
996                                                 flstGrp = rowData[COL08];
997                                                 bufPool = rowData[COL09];
998                                                 tblSpace = rowData[COL10];
999                                                 logging = rowData[COL11];
1000                                                 segByts = rowData[COL12];
1001                                                 pw[W_CREATE_INDEX].print(strLine.replace(';',' '));
1002                                                 pw[W_CREATE_INDEX].print("PCTFREE " + pctFree);
1003                                                 pw[W_CREATE_INDEX].print(" INITRANS " + iniTrns + " STORAGE(");
1004                                                 if(!freeLst.equals(""))pw[W_CREATE_INDEX].print(" FREELISTS " + freeLst);
1005                                                 if(!flstGrp.equals(""))pw[W_CREATE_INDEX].print(" FREELIST GROUPS " + flstGrp);
1006                                                 pw[W_CREATE_INDEX].print(" BUFFER_POOL " + bufPool + ")");
1007                                                 pw[W_CREATE_INDEX].print(" TABLESPACE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ tblSpace + cp.DB_SQL_QUOTEDE[cp.dbType]);
1008                                                 if(logging.equals("NO")){
1009                                                         pw[W_CREATE_INDEX].print(" NOLOGGING" + cp.SQL_TERMINATOR[cp.dbType]);
1010                                                 } else {
1011                                                         pw[W_CREATE_INDEX].print(cp.SQL_TERMINATOR[cp.dbType]);
1012                                                 }
1013                                         } else {
1014                                                 pw[W_CREATE_INDEX].println(strLine);
1015                                                 CmnUtils.errorPrint(strSplit[LINE][COL03] + ",UNUSABLE INDEX");
1016                                         }
1017                                 }
1018                                 for(int i=0;i<pw.length;i++){
1019                                         if(pw[i]!=null){
1020                                                 pw[i].close();
1021                                                 pw[i]=null;
1022                                         }
1023                                 }
1024                                 for(int i=0;i<br.length;i++){
1025                                         if(br[i]!=null){
1026                                                 br[i].close();
1027                                                 br[i]=null;
1028                                         }
1029                                 }
1030                                 
1031                                 File [] fmFl = new File[3];
1032                                 File [] toFl = new File[3];
1033                                 
1034                                 fmFl[W_CREATE_PKEY] = new File(folder + "/" + cp.SQL_FILE_NAME[cp.CREATE_PKEY] + "." + phyfileExtension);
1035                                 fmFl[W_CREATE_UKEY] = new File(folder + "/" + cp.SQL_FILE_NAME[cp.CREATE_UKEY] + "." + phyfileExtension);
1036                                 fmFl[W_CREATE_INDEX] = new File(folder + "/" + cp.SQL_FILE_NAME[cp.CREATE_INDEX] + "." + phyfileExtension);
1037                                 toFl[W_CREATE_PKEY] = new File(folder + "/" + cp.SQL_FILE_NAME[cp.CREATE_PKEY]);
1038                                 toFl[W_CREATE_UKEY] = new File(folder + "/" + cp.SQL_FILE_NAME[cp.CREATE_UKEY]);
1039                                 toFl[W_CREATE_INDEX] = new File(folder + "/" + cp.SQL_FILE_NAME[cp.CREATE_INDEX]);
1040                                 for(int i=0;i<toFl.length;i++){
1041                                         CmnUtils.debugPrint(fmFl[i].toString() + ">" + toFl[i].toString());
1042                                         toFl[i].delete();
1043                                         fmFl[i].renameTo(toFl[i]);
1044                                 }
1045                                 
1046                                 // physical table setting
1047                                 File tbDir = new File(folder + "/TABLES");
1048                                 File [] tbFiles = tbDir.listFiles();
1049                                 File tb = null;
1050                                 File oTb = null;
1051                                 for(int i=0;i<tbFiles.length;i++){
1052                                         tb = tbFiles[i];
1053                                         tbName = tb.getName().replaceAll(".sql","");
1054                                         oTb = new File(tb + "." + phyfileExtension);
1055                                         CmnUtils.debugPrint(tbName);
1056                                         br[WK_FILE] = new BufferedReader(new FileReader(tb));
1057                                         pw[CONTENTS] = new PrintWriter(new BufferedWriter(new FileWriter(oTb)));
1058                                         while((strLine=br[WK_FILE].readLine()) != null){
1059                                                 if(strLine.equals(");")){
1060                                                         rowNo = CmnUtils.getArrayRowNo(alData, 12, 1, tbName);
1061                                                         if (rowNo != -1){
1062                                                                 rowData = CmnUtils.getArrayRowData(alData, 12, rowNo);
1063                                                                 CmnUtils.debugPrint(tbName + ":" + rowNo);
1064                                                                 //for(int j=0;j<rowData.length;i++)CmnUtils.debugPrint(rowData[j]);
1065                                                                 tbName = rowData[COL01];
1066                                                                 objName = rowData[COL02];
1067                                                                 objTyp = rowData[COL03];
1068                                                                 pctFree = rowData[COL04];
1069                                                                 pctUsed = rowData[COL05];
1070                                                                 iniTrns = rowData[COL06];
1071                                                                 freeLst = rowData[COL07];
1072                                                                 flstGrp = rowData[COL08];
1073                                                                 bufPool = rowData[COL09];
1074                                                                 tblSpace = rowData[COL10];
1075                                                                 logging = rowData[COL11];
1076                                                                 segByts = rowData[COL12];
1077                                                                 pw[CONTENTS].print(") PCTFREE " + pctFree);
1078                                                                 if(!pctUsed.equals(""))pw[CONTENTS].print(" PCTUSED " + pctUsed);
1079                                                                 pw[CONTENTS].print(" INITRANS " + iniTrns + " STORAGE(");
1080                                                                 if(!freeLst.equals(""))pw[CONTENTS].print(" FREELISTS " + freeLst);
1081                                                                 if(!flstGrp.equals(""))pw[CONTENTS].print(" FREELIST GROUPS " + flstGrp);
1082                                                                 pw[CONTENTS].print(" BUFFER_POOL " + bufPool + ")");
1083                                                                 pw[CONTENTS].print(" TABLESPACE " + cp.DB_SQL_QUOTEDS[cp.dbType]+ tblSpace + cp.DB_SQL_QUOTEDE[cp.dbType]);
1084                                                                 if(logging.equals("NO")){
1085                                                                         pw[CONTENTS].print(" NOLOGGING" + cp.SQL_TERMINATOR[cp.dbType]);
1086                                                                 } else {
1087                                                                         pw[CONTENTS].print(cp.SQL_TERMINATOR[cp.dbType]);
1088                                                                 }
1089                                                         } else {
1090                                                                 pw[CONTENTS].print(")" + cp.SQL_TERMINATOR[cp.dbType]);
1091                                                         }
1092                                                 } else {
1093                                                         pw[CONTENTS].println(strLine);
1094                                                 }
1095                                         }
1096                                         pw[CONTENTS].close();
1097                                         pw[CONTENTS]=null;
1098                                         br[WK_FILE].close();
1099                                         br[WK_FILE]=null;
1100                                         tb.delete();
1101                                         oTb.renameTo(tb);
1102                                 }
1103                         }
1104                         // Rhysical Contents end
1105
1106                         // Remove work file
1107                         File fl= null;
1108                         for(int i=0;i<cp.meta_sql[cp.dbType].length;i++){
1109                                 fl= new File(folder + "/" + cp.WK_FILE_NAME[i] + "_" + database + "." + cp.fileExtension);
1110                                 CmnUtils.debugPrint(fl.toString());
1111                                 fl.delete();
1112                         }
1113
1114                         // disconnect database
1115                         dao.disconnect();
1116                         CmnUtils.infoPrint("\83\81\83^\83f\81[\83^\83A\83\93\83\8d\81[\83h\82ð\8fI\97¹\82µ\82Ü\82µ\82½\81B");
1117
1118                 } catch(SQLException se) {
1119                         try{
1120                                 CmnUtils.errorPrint(se.toString());
1121                                 se.printStackTrace();
1122                                 se = se.getNextException();
1123                                 if(se != null) {
1124                                         System.out.println(se.getMessage());
1125                                 }
1126                                 dao.rollback();
1127                         } catch (Exception see) {}
1128                 } catch (Exception e) {                 
1129                         try{
1130                                 CmnUtils.errorPrint(e.toString());
1131                                 e.printStackTrace();
1132                                 dao.rollback();
1133                         } catch (Exception ee) {}
1134                 } finally{
1135                         try{
1136                                 for(int i=0;i<6;i++){
1137                                         if(pw[i]!=null){
1138                                                 pw[i].close();
1139                                                 pw[i]=null;
1140                                         }
1141                                 }
1142                                 for(int i=0;i<4;i++){
1143                                         if(br[i]!=null){
1144                                                 br[i].close();
1145                                                 br[i]=null;
1146                                         }
1147                                 }
1148                         } catch (Exception e) {}
1149                 }
1150         }
1151         
1152         private String commentOnTable(CmnProps _cp, String _tableName, String _tableCmnt, int _type) throws Exception{
1153                 String retVal = "";
1154                 if(!_tableCmnt.equals("")){
1155                         if(_cp.dbType == _cp.DB_TYPE_ORACLE){
1156                                 retVal = "COMMENT ON TABLE " + _cp.DB_SQL_QUOTEDS[_cp.dbType]+ _tableName + _cp.DB_SQL_QUOTEDE[_cp.dbType]+ " IS '" + _tableCmnt.replaceAll("'","''") + "'" + _cp.SQL_TERMINATOR[_cp.dbType];
1157                         } else if(_cp.dbType == _cp.DB_TYPE_SQLSERVER){
1158                                 if(_type == _cp.TYPE_TABLE){
1159                                         retVal = "exec sys.sp_addextendedproperty @name=N'MS_Description',@value=N'" + _tableCmnt.replaceAll("'","''") + "',@level0type=N'schema',@level0name=N'dbo',@level1type=N'table',@level1name=N'" + _tableName + "'" + _cp.SQL_TERMINATOR[_cp.dbType];
1160                                 } else if(_type == _cp.TYPE_VIEW){
1161                                         retVal = "exec sys.sp_addextendedproperty @name=N'MS_Description',@value=N'" + _tableCmnt.replaceAll("'","''") + "',@level0type=N'schema',@level0name=N'dbo',@level1type=N'view',@level1name=N'" + _tableName + "'" + _cp.SQL_TERMINATOR[_cp.dbType];
1162                                 }
1163                         }
1164                 }
1165                 return retVal;
1166         }
1167         private String commentOnColumn(CmnProps _cp, String _tableName, String _colName, String _colCmnt, int _type) throws Exception{
1168                 String retVal = "";
1169                 if(!_colCmnt.equals("")){
1170                         if(_cp.dbType == _cp.DB_TYPE_ORACLE){
1171                                 retVal = "COMMENT ON COLUMN " + _cp.DB_SQL_QUOTEDS[_cp.dbType]+ _tableName + _cp.DB_SQL_QUOTEDE[_cp.dbType]+ "." + _cp.DB_SQL_QUOTEDS[_cp.dbType]+ _colName + _cp.DB_SQL_QUOTEDE[_cp.dbType]+ " IS '" + _colCmnt.replaceAll("'","''") + "'" + _cp.SQL_TERMINATOR[_cp.dbType];
1172                         } else if(_cp.dbType == _cp.DB_TYPE_SQLSERVER){
1173                                 if(_type == _cp.TYPE_TABLE){
1174                                         retVal = "exec sys.sp_addextendedproperty @name=N'MS_Description',@value=N'" + _colCmnt.replaceAll("'","''") + "',@level0type=N'schema',@level0name=N'dbo',@level1type=N'table',@level1name=N'" + _tableName + "',@level2type=N'column',@level2name=N'" + _colName + "'" + _cp.SQL_TERMINATOR[_cp.dbType];
1175                                 } else if(_type == _cp.TYPE_VIEW){
1176                                         retVal = "exec sys.sp_addextendedproperty @name=N'MS_Description',@value=N'" + _colCmnt.replaceAll("'","''") + "',@level0type=N'schema',@level0name=N'dbo',@level1type=N'view',@level1name=N'" + _tableName + "',@level2type=N'column',@level2name=N'" + _colName + "'" + _cp.SQL_TERMINATOR[_cp.dbType];
1177                                 }
1178                         }
1179                 }
1180                 return retVal;
1181         }
1182 }
1183