View Javadoc
1 /* 2 LoaderGenerator - tool for generated xml, sql and doml file needed for Octopus. 3 Copyright (C) 2003 Together 4 This library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Lesser General Public 6 License as published by the Free Software Foundation; either 7 version 2.1 of the License, or (at your option) any later version. 8 This library is distributed in the hope that it will be useful, 9 but WITHOUT ANY WARRANTY; without even the implied warranty of 10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 11 Lesser General Public License for more details. 12 You should have received a copy of the GNU Lesser General Public 13 License along with this library; if not, write to the Free Software 14 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 15 */ 16 17 package org.webdocwf.util.loader.generator; 18 19 import java.util.*; 20 21 import org.webdocwf.util.loader.logging.Logger; 22 import org.webdocwf.util.loader.logging.StandardLogger; 23 24 /*** 25 * 26 * SqlStatements class creates the sql statements for building target database. 27 * @author Radoslav Dutina 28 * @version 1.0 29 */ 30 public class SqlStatements { 31 32 private List list = new ArrayList(); 33 private List hsqlPKlist = new ArrayList(); 34 // private String[] uncompatibileTypes = { 35 // "int", "integer", "datetime", "smalldatetime", 36 // "money", "smallmoney", "bigint", "smallint", "timestamp", "tinyint", 37 // "ntext", "bit", "int2", "int4", "int8", "bytea", 38 // "text", "real", "date", "time", "tiny", "long", "double", "identity", 39 // "image","longvarchar","long varchar","nvarchar","ntext", 40 // "binary", "blob", "graphic", "longraw", "long raw", "byte"}; 41 private String[] targetDBWithoutAlterTable = { "xml", "csv", "excel" }; 42 43 private boolean incompatible = false; 44 private boolean incompatibleDBTarget = false; 45 private boolean incompatibleDBSource = false; 46 private Logger logger = null; 47 /*** 48 * Construct object SqlStatements with associated parameters. 49 * @param nameSQL is the name of created sql file. 50 * @param tableName is name of the table form which we retrieve data. 51 * @param importDefinitionAttributes is references to ImportDefinitionAttributes object. 52 * @param relationshipsAttributes is references to RelationshipsAttributes object. 53 * @param k is the counter, whish are used for restricting same operations. 54 * @param generatorParameters represents the references to InputParameter object. 55 */ 56 57 public SqlStatements(String nameSQL, String tableName, ImportDefinitionAttributes importDefinitionAttributes, RelationshipsAttributes relationshipsAttributes, int k, InputParameters generatorParameters) { 58 setLogger(); 59 this.logger.write("full", "SqlStatements is started."); 60 String targetDBType = generatorParameters.getTargetType(); 61 String sourceDBType = generatorParameters.getSourceType(); 62 checkDBTypeTarget(targetDBType); 63 checkDBTypeSource(sourceDBType); 64 65 if (nameSQL.equalsIgnoreCase("CreateTables")) { 66 list.add("Create table" + " " + tableName); 67 list.add("("); 68 if (generatorParameters.getSourceType().equalsIgnoreCase("csv")) { 69 for (int i = 0; i < importDefinitionAttributes.getTagSourceColumnName().length; i++) { 70 if (i == importDefinitionAttributes.getTagSourceColumnName().length - 1) 71 list.add(importDefinitionAttributes.getTagSourceColumnName()[i] + " " + "VARCHAR" + " (254) " + " "); 72 else 73 list.add(importDefinitionAttributes.getTagSourceColumnName()[i] + " " + "VARCHAR" + " (254) " + " ,"); 74 } 75 list.add(");"); 76 list.add(""); 77 list.add(""); 78 list.add(""); 79 } else if (generatorParameters.getSourceType().equalsIgnoreCase("access")) { 80 String end = " ,"; 81 for (int i = 0; i < importDefinitionAttributes.getTagSourceColumnName().length; i++) { 82 if (i == importDefinitionAttributes.getTagSourceColumnName().length - 1) 83 end = " "; 84 if (importDefinitionAttributes.getTagColumnLenght()[i].equalsIgnoreCase("")) 85 list.add(importDefinitionAttributes.getTagSourceColumnName()[i] + " " + (importDefinitionAttributes.getTagColumnType()[i]).toUpperCase() + importDefinitionAttributes.getTagAllowNulls()[i] + end); 86 else 87 list.add(importDefinitionAttributes.getTagSourceColumnName()[i] + " " + (importDefinitionAttributes.getTagColumnType()[i]).toUpperCase() + "(" + importDefinitionAttributes.getTagColumnLenght()[i] + ") " + importDefinitionAttributes.getTagAllowNulls()[i] + end); 88 } 89 list.add(");"); 90 list.add(""); 91 list.add(""); 92 list.add(""); 93 } else { 94 String end = " "; 95 for (int i = 0; i < importDefinitionAttributes.getTagSourceColumnName().length; i++) { 96 boolean pk = true; 97 for (int j = 0; j < relationshipsAttributes.getPrimaryKeys().length; j = j + 2) { 98 if (relationshipsAttributes.getPrimaryKeys()[j + 1].equalsIgnoreCase(importDefinitionAttributes.getTagSourceColumnName()[i])) { 99 pk = false; 100 break; 101 } 102 } 103 if (i != importDefinitionAttributes.getTagSourceColumnName().length - 1) 104 end = " ,"; 105 else 106 end = " "; 107 108 // checkType(importDefinitionAttributes.getTagColumnType()[i]); 109 //incompatible atibile is parameter, which decide if we should put the 110 //length parameter in to sql expression. 111 // if (!incompatible) { 112 if (generatorParameters.getAlterTablePrimaryKey().equalsIgnoreCase("true")) { 113 list.add(importDefinitionAttributes.getTagSourceColumnName()[i] + " " + (importDefinitionAttributes.getTagColumnType()[i]).toUpperCase() //+ "(" 114 +importDefinitionAttributes.getTagColumnLenght()[i] //+ 115 //") " 116 +importDefinitionAttributes.getTagAllowNulls()[i] + end); 117 } else { 118 //pk parameter is used to decide if the fild in table is primary key. 119 //If it is, then we put the fild in to expression. 120 if (pk) { 121 //parameter isn't the primary key. 122 list.add(importDefinitionAttributes.getTagSourceColumnName()[i] + " " + (importDefinitionAttributes.getTagColumnType()[i]).toUpperCase() 123 // + "(" 124 +importDefinitionAttributes.getTagColumnLenght()[i] + 125 // ") " 126 // + 127 importDefinitionAttributes.getTagAllowNulls()[i] + end); 128 } else { 129 //TODO 23.8 2004 ZK added because of hsql problem with primary keys on 2,3,... columns. 130 //Change this to support other databases, not only hsql. 131 if (generatorParameters.getTargetType().equalsIgnoreCase("HypersonicSQL")){ 132 // 133 hsqlPKlist.add(importDefinitionAttributes.getTagSourceColumnName()[i]); 134 list.add(importDefinitionAttributes.getTagSourceColumnName()[i] + " " + (importDefinitionAttributes.getTagColumnType()[i]).toUpperCase() 135 +importDefinitionAttributes.getTagColumnLenght()[i] 136 +", "); 137 }else{ 138 //end 139 //parameter is the primary key. 140 list.add(importDefinitionAttributes.getTagSourceColumnName()[i] + " " + (importDefinitionAttributes.getTagColumnType()[i]).toUpperCase() //+ "(" 141 +importDefinitionAttributes.getTagColumnLenght()[i] //+ 142 //") " 143 +"PRIMARY KEY " + end); 144 } 145 } 146 } 147 // } 148 // else { 149 // if (generatorParameters.getAlterTablePrimaryKey().equalsIgnoreCase( 150 // "true")) { 151 // list.add(importDefinitionAttributes.getTagSourceColumnName()[i] + 152 // " " + 153 // (importDefinitionAttributes.getTagColumnType()[i]). 154 // toUpperCase() + " " 155 // + importDefinitionAttributes.getTagAllowNulls()[i] 156 // + end); 157 // } 158 // else { 159 // if (pk) { 160 // list.add(importDefinitionAttributes.getTagSourceColumnName()[i] + 161 // " " + 162 // (importDefinitionAttributes.getTagColumnType()[i]). 163 // toUpperCase() + " " 164 // + importDefinitionAttributes.getTagAllowNulls()[i] 165 // + end); 166 // } 167 // else { 168 // list.add(importDefinitionAttributes.getTagSourceColumnName()[i] + 169 // " " + 170 // (importDefinitionAttributes.getTagColumnType()[i]). 171 // toUpperCase() + " " 172 // + " PRIMARY KEY " 173 // + end); 174 // } 175 // } 176 // } 177 } 178 //TODO 23.8 2004 ZK added because of hsql problem with primary keys on 2,3,... columns. 179 //Change this to support other databases, not only hsql. 180 if (generatorParameters.getTargetType().equalsIgnoreCase("HypersonicSQL")){ 181 182 if (hsqlPKlist.size()>0) { 183 184 String columnNames = ""; 185 columnNames = columnNames+" ("; 186 187 for (int i = 0; i < hsqlPKlist.size()-1; i++) { 188 columnNames = columnNames + hsqlPKlist.get(i) + ","; 189 190 } 191 192 if (hsqlPKlist.size() >= 2){ 193 columnNames = columnNames + hsqlPKlist.get(hsqlPKlist.size()-1) + ")"; 194 195 }else if (hsqlPKlist.size() == 1){ 196 columnNames = columnNames + hsqlPKlist.get(0) + ")"; 197 198 } 199 list.add(", CONSTRAINT" + " " +importDefinitionAttributes.getTableName()+"_PK" +" " 200 +"PRIMARY KEY " + columnNames); 201 } 202 } 203 //end 204 list.add(");"); 205 list.add(""); 206 list.add(""); 207 list.add(""); 208 } 209 } else if (nameSQL.equalsIgnoreCase("CreatePrimary")) { 210 list.add(""); 211 if (incompatibleDBSource) { 212 if (k == 0) { 213 list.add(""); 214 } 215 } else if (incompatibleDBTarget) { 216 if (k == 0) { 217 list.add(""); 218 } 219 } else { 220 if (relationshipsAttributes.getPrimaryKeys().length != 0) { 221 int primaryCount = relationshipsAttributes.getPrimaryKeys().length; 222 for (int i = 0; i < primaryCount; i = i + 2) { 223 String arrayOfPrimaryNames = relationshipsAttributes.getPrimaryKeys()[i + 1]; 224 for (int m = i + 2; m < primaryCount; m = m + 2) { 225 if (relationshipsAttributes.getPrimaryKeys()[i].equalsIgnoreCase(relationshipsAttributes.getPrimaryKeys()[m])) { 226 227 arrayOfPrimaryNames = arrayOfPrimaryNames + "," + relationshipsAttributes.getPrimaryKeys()[m + 1]; 228 i = i + 2; 229 } else 230 break; 231 } 232 233 list.add("ALTER TABLE " + " " + relationshipsAttributes.getTableName() + " " + "ADD CONSTRAINT " + relationshipsAttributes.getPrimaryKeys()[i] + " PRIMARY KEY" + "(" + 234 //relationshipsAttributes.getPrimaryKeys()[i+1]+") ;"); 235 arrayOfPrimaryNames + ") ;"); 236 } 237 } else { 238 list.add(""); 239 } 240 } //end of main else 241 } else if (nameSQL.equalsIgnoreCase("CreateIndex")) { 242 list.add(""); 243 if (incompatibleDBSource) { 244 if (k == 0) { 245 list.add(""); 246 } 247 } else if (incompatibleDBTarget) { 248 if (k == 0) { 249 list.add(""); 250 } 251 } else { 252 if (relationshipsAttributes.getIndexVariables().length != 0) { 253 int indexCount = relationshipsAttributes.getIndexVariables().length; 254 for (int i = 0; i < indexCount; i = i + 3) { 255 String arrayOfIndexNames = relationshipsAttributes.getIndexVariables()[i + 2]; 256 for (int m = i + 3; m < indexCount; m = m + 3) { 257 if (relationshipsAttributes.getIndexVariables()[i + 1].equalsIgnoreCase(relationshipsAttributes.getIndexVariables()[m + 1])) { 258 arrayOfIndexNames = arrayOfIndexNames + "," + relationshipsAttributes.getIndexVariables()[m + 2]; 259 i = i + 3; 260 } else 261 break; 262 } 263 if (relationshipsAttributes.getIndexVariables()[i].equalsIgnoreCase("0") || relationshipsAttributes.getIndexVariables()[i].equalsIgnoreCase("1")) { 264 //unique mey have the value 0 or 1 265 int j = Integer.parseInt(relationshipsAttributes.getIndexVariables()[i]); 266 String unique; 267 if (j == 1) 268 unique = ""; 269 else 270 unique = "UNIQUE"; 271 list.add("CREATE " + unique + " INDEX " + relationshipsAttributes.getIndexVariables()[i + 1] + 272 //" ON "+tableName+"("+relationshipsAttributes.getIndexVariables()[i+2]+") ;"); 273 " ON " + tableName + "(" + arrayOfIndexNames + ") ;"); 274 275 } else if (relationshipsAttributes.getIndexVariables()[i].equalsIgnoreCase("true") || relationshipsAttributes.getIndexVariables()[i].equalsIgnoreCase("false")) { 276 //unique mey have the value true or false 277 String unique; 278 String j = relationshipsAttributes.getIndexVariables()[i]; 279 if (j.equalsIgnoreCase("true")) 280 unique = ""; 281 else 282 unique = "UNIQUE"; 283 list.add("CREATE " + unique + " INDEX " + relationshipsAttributes.getIndexVariables()[i + 1] + 284 //" ON "+tableName+"("+relationshipsAttributes.getIndexVariables()[i+2]+") ;"); 285 " ON " + tableName + "(" + arrayOfIndexNames + ") ;"); 286 } 287 } 288 } else { 289 //relationshipsAttributes.getIndexVariables().length==0 290 list.add(""); 291 } 292 } 293 } else if (nameSQL.equalsIgnoreCase("CreateIntegrity")) { 294 list.add(""); 295 if (incompatibleDBSource) { 296 if (k == 0) { 297 list.add(""); 298 } 299 } else if (incompatibleDBTarget) { 300 if (k == 0) { 301 list.add(""); 302 } 303 } else { 304 //TODO ZK added relationshipsAttributes.getForeignVariables().length >= 5 because problems with c-jdbc 305 if (relationshipsAttributes.getForeignVariables().length != 0 && relationshipsAttributes.getForeignVariables().length >= 5) { 306 307 for (int i = 0; i < relationshipsAttributes.getForeignVariables().length; i = i + 5) { 308 309 list.add("ALTER TABLE " + relationshipsAttributes.getForeignVariables()[i] + " ADD CONSTRAINT " + relationshipsAttributes.getForeignVariables()[i + 1] + " FOREIGN KEY (" + relationshipsAttributes.getForeignVariables()[i + 2] + ")" + " REFERENCES " + relationshipsAttributes.getForeignVariables()[i + 3] + " (" + relationshipsAttributes.getForeignVariables()[i + 4] + ") ;"); 310 } 311 } else { 312 list.add(""); 313 } 314 } 315 } else if (nameSQL.equalsIgnoreCase("DropTables")) { 316 list.add(""); 317 list.add("DROP TABLE " + tableName + " ;"); 318 list.add(""); 319 } else if (nameSQL.equalsIgnoreCase("DropIntegrity")) { 320 //TODO ZK added relationshipsAttributes.getForeignVariables().length >= 2 because problems with c-jdbc 321 if (relationshipsAttributes.getForeignVariables().length != 0 && relationshipsAttributes.getForeignVariables().length >= 2) { 322 323 for (int i = 0; i < relationshipsAttributes.getForeignVariables().length; i = i + 5) { 324 list.add(""); 325 list.add("ALTER TABLE " + relationshipsAttributes.getForeignVariables()[i] + " DROP CONSTRAINT " + relationshipsAttributes.getForeignVariables()[i + 1] + " ;"); 326 list.add(""); 327 } 328 329 } else { 330 list.add(""); 331 } 332 333 } 334 this.logger.write("full", "SqlStatements is finished."); 335 } 336 337 /*** 338 * This method sets the value of list patameter. 339 * @param create_Stream is the value of parameter. 340 */ 341 public void setCreateStream(String[] create_Stream) { 342 list = Arrays.asList(create_Stream); 343 } 344 345 /*** 346 * This method read the value of list patameter. 347 * @return value of parameter. 348 */ 349 public String[] getCreateStream() { 350 String[] ret = new String[list.size()]; 351 list.toArray(ret); 352 return ret; 353 } 354 355 // /*** 356 // * This method check the type of named data type. 357 // * @param type is data type which we wont to check. 358 // * @return true or false. 359 // */ 360 // private boolean checkType(String type) { 361 // for (int i = 0; i < uncompatibileTypes.length; i++) { 362 // if (type.toLowerCase().endsWith(uncompatibileTypes[i])) { 363 // this.incompatible = true; 364 // break; 365 // } 366 // else { 367 // this.incompatible = false; 368 // } 369 // } 370 // return incompatible; 371 // } 372 373 private boolean checkDBTypeTarget(String type) { 374 for (int i = 0; i < targetDBWithoutAlterTable.length; i++) { 375 if (type.equalsIgnoreCase(targetDBWithoutAlterTable[i])) { 376 this.incompatibleDBTarget = true; 377 break; 378 } else { 379 this.incompatibleDBTarget = false; 380 } 381 } 382 return incompatibleDBTarget; 383 } 384 385 private boolean checkDBTypeSource(String type) { 386 for (int i = 0; i < targetDBWithoutAlterTable.length; i++) { 387 if (type.equalsIgnoreCase(targetDBWithoutAlterTable[i])) { 388 this.incompatibleDBSource = true; 389 break; 390 } else { 391 this.incompatibleDBSource = false; 392 } 393 } 394 return incompatibleDBSource; 395 } 396 397 /*** 398 * This method will set logger object 399 * @param logger 400 */ 401 private void setLogger() { 402 this.logger = StandardLogger.getCentralLogger(); 403 } 404 }

This page was automatically generated by Maven