View Javadoc
1 /* 2 * PROJECT : DAR Runtime and Tools 3 * COPYRIGHT : Copyright (C) 1999-2004 tim.stephenson@enableit.org 4 * LICENSE : GNU LESSER GENERAL PUBLIC LICENSE 5 * Version 2.1, February 1999 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 */ 21 package org.enableit.db.darrt; 22 23 import java.util.ArrayList; 24 import java.util.List; 25 26 import org.apache.log4j.Logger; 27 import org.enableit.db.beans.Column; 28 import org.enableit.db.beans.Index; 29 import org.enableit.db.beans.Table; 30 import org.enableit.db.beans.View; 31 import org.enableit.db.darrt.beans.DiffData; 32 33 /*** 34 * @author tim.stephenson@enableit.org 35 * @deprecated Cannot fulfil requirements such as functions. 36 * Use DDLFactory to obtain the correct DeclarativeDDLGenerator. 37 */ 38 public class GenericDDLImpl extends AbstractDDLGenerator { 39 /*** 40 * The RDBMS-specific command separator. 41 */ 42 private static String RDBMS_CMD_SEPARATOR = ";"; 43 44 /*** 45 * The Log4J <code>Logger</code> doing the logging. 46 */ 47 private static Logger logger = Logger.getLogger(GenericDDLImpl.class); 48 49 /*** 50 * Key used to obtain the generic DDLGenerator. 51 */ 52 public static final String GENERIC = "Generic"; 53 54 /*** 55 * Default constructor. 56 */ 57 public GenericDDLImpl() { 58 EOL = System.getProperty("line.separator"); 59 } 60 61 /*** 62 * Return the name of this DDLGenerator. 63 */ 64 public String getName() { 65 return GENERIC; 66 } 67 68 /*** 69 * Create a database object that does not currently exist. 70 * 71 * @param dataObject Java representation of the data object to create. 72 * @return <code>List</code> of DDL statements (<code>String</code> type). 73 */ 74 public List getCreate(Object dataObject) { 75 logger.info("METHOD_ENTRY: getCreate"); 76 77 List ddlList = new ArrayList(); 78 StringBuffer ddl = new StringBuffer(); 79 80 if (dataObject instanceof Table) { 81 Table table = (Table) dataObject; 82 83 ddl.append("CREATE TABLE " + table.getName() + "(" + EOL); 84 85 for (int i = 0; i < table.getColumnCount(); i++) { 86 Column col = (Column) table.getColumn(i); 87 88 ddl.append(col.getColName() + " "); 89 ddl.append(getDataType(col.getColType()) + " "); 90 ddl.append(col.getNull().equalsIgnoreCase("false") ? "NOT NULL" 91 : "NULL"); 92 93 if ((i + 1) < table.getColumnCount()) { 94 ddl.append("," + EOL); 95 } else { 96 ddl.append(")" + EOL); 97 } 98 } 99 100 ddlList.add(ddl.toString()); 101 102 // Now get DDL for any indexes 103 for (int i = 0; i < table.getIndexCount(); i++) { 104 ddlList.addAll(getCreate(table.getIndex(i))); 105 } 106 } else if (dataObject instanceof Column) { 107 Column col = (Column) dataObject; 108 String table = col.getTableName(); 109 110 ddl.append("ALTER TABLE " + table + EOL); 111 ddl.append("ADD "); 112 ddl.append(col.getColName() + " "); 113 ddl.append(getDataType(col.getColType()) + " "); 114 ddl.append(col.getNull().equalsIgnoreCase("false") ? "NOT NULL" 115 : "NULL"); 116 ddl.append(EOL); 117 ddlList.add(ddl.toString()); 118 } else if (dataObject instanceof Index) { 119 ddlList.add(getCreateIndex((Index) dataObject)); 120 } else if (dataObject instanceof View) { 121 View view = (View) dataObject; 122 123 if ((view.getDefinition() == null) 124 || (view.getDefinition().trim().length() < 1)) { 125 ddl.append(DDLGenerator.NO_DEFINITION_AVAILABLE); 126 } else if (!view.getDefinition().toUpperCase().startsWith("CREATE VIEW")) { 127 // Oracle 128 ddl.append("CREATE VIEW " + view.getName() + EOL); 129 ddl.append(" AS "); 130 ddl.append(view.getDefinition()); 131 } else { 132 // Sybase 133 ddl.append(view.getDefinition()); 134 } 135 136 ddlList.add(ddl.toString()); 137 } else { 138 ddl.append("Unsupported database object " 139 + dataObject.getClass().getName()); 140 } 141 142 logger.info("METHOD_EXIT: getCreate, ddl=" + ddlList); 143 144 return ddlList; 145 } 146 147 /*** 148 * Returns the same data type passed in. 149 * <br/> 150 * Specialisations should override this method to 151 * cater for the different data-types supported by their RDBMS. 152 */ 153 private String getDataType(String schemaDataType) { 154 logger.info("METHOD_ENTRY: getDataType"); 155 156 logger.info("METHOD_EXIT: getDataType"); 157 158 return schemaDataType; 159 } 160 161 /*** 162 * @param diff 163 * @return <code>List</code> of DDL statements (<code>String</code> type). 164 */ 165 public List getModify(DiffData diff) { 166 logger.info("METHOD_ENTRY: getModify"); 167 168 List ddlList = new ArrayList(); 169 StringBuffer ddl = new StringBuffer(); 170 Object refObject = diff.getRefObj(); 171 172 if (refObject instanceof Column) { 173 Column rColumn = (Column) refObject; 174 Column tColumn = (Column) diff.getTargetObj(); 175 String table = diff.getName().substring(0, 176 diff.getName().indexOf(".")); 177 178 // Handle column def'n change in one go. (supported by Sybase ASA) 179 ddl.append("ALTER TABLE " + table + EOL); 180 ddl.append("MODIFY "); 181 ddl.append(rColumn.getColName() + " "); 182 ddl.append(getDataType(rColumn.getColType()) + " "); 183 ddl.append(rColumn.getNull().equalsIgnoreCase("false") ? "NOT NULL" 184 : "NULL"); 185 ddl.append(EOL); 186 ddlList.add(ddl.toString()); 187 } else if (refObject instanceof Table) { 188 // TODO: 189 ddl.append("Unsupported database object " 190 + refObject.getClass().getName()); 191 } else if (refObject instanceof Index) { 192 Index index = (Index) refObject; 193 194 ddl.append("DROP INDEX "); 195 ddl.append(index.getTableName()); 196 ddl.append("."); 197 ddl.append(index.getName()); 198 ddlList.add(ddl.toString()); 199 ddlList.add(getCreateIndex(index)); 200 } else { 201 ddl.append("Unsupported database object " 202 + refObject.getClass().getName()); 203 } 204 205 logger.info("METHOD_EXIT: getModify, ddl=" + ddlList); 206 207 return ddlList; 208 } 209 210 }

This page was automatically generated by Maven