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