Author: aniedbala
Date: Mon Nov 24 15:34:32 2008
New Revision: 2844
Added:
trunk/src/ca/sqlpower/architect/ddl/Oracle8DDLGenerator.java
trunk/src/ca/sqlpower/architect/ddl/Oracle9PlusDDLGenerator.java
Modified:
trunk/src/ca/sqlpower/architect/ddl/OracleDDLGenerator.java
Log:
A fix for bug 1701.
The Oracle DDL generator has been split into 2 separate version-specific
classes, similar to SQL server. The generic Oracle generator remains so
that users with outdated PL.inis will still be able to forward engineer to
that. Ideally, a "Update PL.ini" feature would make this unnecessary.
Added: trunk/src/ca/sqlpower/architect/ddl/Oracle8DDLGenerator.java
==============================================================================
--- (empty file)
+++ trunk/src/ca/sqlpower/architect/ddl/Oracle8DDLGenerator.java Mon Nov 24
15:34:32 2008
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2008, SQL Power Group Inc.
+ *
+ * This file is part of Power*Architect.
+ *
+ * Power*Architect is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Power*Architect is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package ca.sqlpower.architect.ddl;
+
+import java.sql.DatabaseMetaData;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.HashMap;
+
+public class Oracle8DDLGenerator extends OracleDDLGenerator {
+
+ public static final String GENERATOR_VERSION = "$Revision: 2409 $";
+
+ public Oracle8DDLGenerator() throws SQLException {
+ super();
+ }
+
+ public String getName() {
+ return "Oracle 8i";
+ }
+
+ @Override
+ public void writeHeader() {
+ println("-- Created by SQLPower Oracle 8i DDL
Generator "+GENERATOR_VERSION+" --");
+ }
+
+ @Override
+ protected void createTypeMap() throws SQLException {
+ typeMap = new HashMap();
+
+ typeMap.put(Integer.valueOf(Types.BIGINT), new
GenericTypeDescriptor("NUMBER", Types.BIGINT, 38, null, null,
DatabaseMetaData.columnNullable, true, false));
+ typeMap.put(Integer.valueOf(Types.BINARY), new
GenericTypeDescriptor("RAW", Types.BINARY, 2000, null, null,
DatabaseMetaData.columnNullable, true, false));
+ typeMap.put(Integer.valueOf(Types.BIT), new
GenericTypeDescriptor("NUMBER", Types.BIT, 1, null, null,
DatabaseMetaData.columnNullable, true, false));
+ typeMap.put(Integer.valueOf(Types.BLOB), new
GenericTypeDescriptor("BLOB", Types.BLOB, 4000000000L, null, null,
DatabaseMetaData.columnNullable, false, false));
+ typeMap.put(Integer.valueOf(Types.BOOLEAN), new
GenericTypeDescriptor("NUMBER", Types.NUMERIC, 1, null, null,
DatabaseMetaData.columnNullable, true, true));
+ typeMap.put(Integer.valueOf(Types.CHAR), new
GenericTypeDescriptor("CHAR", Types.CHAR, 2000, "'", "'",
DatabaseMetaData.columnNullable, true, false));
+ typeMap.put(Integer.valueOf(Types.CLOB), new
GenericTypeDescriptor("CLOB", Types.CLOB, 4000000000L, null, null,
DatabaseMetaData.columnNullable, false, false));
+ typeMap.put(Integer.valueOf(Types.DATE), new
GenericTypeDescriptor("DATE", Types.DATE, 0, "'", "'",
DatabaseMetaData.columnNullable, false, false));
+ typeMap.put(Integer.valueOf(Types.DECIMAL), new
GenericTypeDescriptor("NUMBER", Types.DECIMAL, 38, null, null,
DatabaseMetaData.columnNullable, true, true));
+ typeMap.put(Integer.valueOf(Types.DOUBLE), new
GenericTypeDescriptor("NUMBER", Types.DOUBLE, 38, null, null,
DatabaseMetaData.columnNullable, false, false));
+ typeMap.put(Integer.valueOf(Types.FLOAT), new
GenericTypeDescriptor("FLOAT", Types.FLOAT, 38, null, null,
DatabaseMetaData.columnNullable, false, false));
+ typeMap.put(Integer.valueOf(Types.INTEGER), new
GenericTypeDescriptor("NUMBER", Types.INTEGER, 38, null, null,
DatabaseMetaData.columnNullable, true, false));
+ typeMap.put(Integer.valueOf(Types.LONGVARBINARY), new
GenericTypeDescriptor("LONG RAW", Types.LONGVARBINARY, 2000000000L, null,
null, DatabaseMetaData.columnNullable, false, false));
+ typeMap.put(Integer.valueOf(Types.NUMERIC), new
GenericTypeDescriptor("NUMBER", Types.NUMERIC, 38, null, null,
DatabaseMetaData.columnNullable, true, true));
+ typeMap.put(Integer.valueOf(Types.REAL), new
GenericTypeDescriptor("NUMBER", Types.REAL, 38, null, null,
DatabaseMetaData.columnNullable, false, false));
+ typeMap.put(Integer.valueOf(Types.SMALLINT), new
GenericTypeDescriptor("NUMBER", Types.SMALLINT, 38, null, null,
DatabaseMetaData.columnNullable, true, false));
+ typeMap.put(Integer.valueOf(Types.TIME), new
GenericTypeDescriptor("DATE", Types.TIME, 0, "'", "'",
DatabaseMetaData.columnNullable, false, false));
+ typeMap.put(Integer.valueOf(Types.TIMESTAMP), new
GenericTypeDescriptor("DATE", Types.TIMESTAMP, 0, "'", "'",
DatabaseMetaData.columnNullable, false, false));
+ typeMap.put(Integer.valueOf(Types.TINYINT), new
GenericTypeDescriptor("NUMBER", Types.TINYINT, 38, null, null,
DatabaseMetaData.columnNullable, true, false));
+ typeMap.put(Integer.valueOf(Types.LONGVARCHAR), new
GenericTypeDescriptor("LONG", Types.LONGVARCHAR, 2000000000L, null, null,
DatabaseMetaData.columnNullable, false, false));
+ typeMap.put(Integer.valueOf(Types.VARBINARY), new
GenericTypeDescriptor("LONG RAW", Types.VARBINARY, 2000000000L, null, null,
DatabaseMetaData.columnNullable, false, false));
+ typeMap.put(Integer.valueOf(Types.VARCHAR), new
GenericTypeDescriptor("VARCHAR2", Types.VARCHAR, 4000, "'", "'",
DatabaseMetaData.columnNullable, true, false));
+ }
+
+}
Added: trunk/src/ca/sqlpower/architect/ddl/Oracle9PlusDDLGenerator.java
==============================================================================
--- (empty file)
+++ trunk/src/ca/sqlpower/architect/ddl/Oracle9PlusDDLGenerator.java Mon
Nov 24 15:34:32 2008
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2008, SQL Power Group Inc.
+ *
+ * This file is part of Power*Architect.
+ *
+ * Power*Architect is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Power*Architect is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package ca.sqlpower.architect.ddl;
+
+import java.sql.DatabaseMetaData;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.HashMap;
+
+public class Oracle9PlusDDLGenerator extends OracleDDLGenerator {
+
+ public static final String GENERATOR_VERSION = "$Revision: 2409 $";
+
+ public Oracle9PlusDDLGenerator() throws SQLException {
+ super();
+ }
+
+ public String getName() {
+ return "Oracle 9i/10g";
+ }
+
+ @Override
+ public void writeHeader() {
+ println("-- Created by SQLPower Oracle 9i/10g DDL
Generator "+GENERATOR_VERSION+" --");
+ }
+
+ @Override
+ protected void createTypeMap() throws SQLException {
+ typeMap = new HashMap();
+
+ typeMap.put(Integer.valueOf(Types.BIGINT), new
GenericTypeDescriptor("NUMBER", Types.BIGINT, 38, null, null,
DatabaseMetaData.columnNullable, true, false));
+ typeMap.put(Integer.valueOf(Types.BINARY), new
GenericTypeDescriptor("RAW", Types.BINARY, 2000, null, null,
DatabaseMetaData.columnNullable, true, false));
+ typeMap.put(Integer.valueOf(Types.BIT), new
GenericTypeDescriptor("NUMBER", Types.BIT, 1, null, null,
DatabaseMetaData.columnNullable, true, false));
+ typeMap.put(Integer.valueOf(Types.BLOB), new
GenericTypeDescriptor("BLOB", Types.BLOB, 4000000000L, null, null,
DatabaseMetaData.columnNullable, false, false));
+ typeMap.put(Integer.valueOf(Types.BOOLEAN), new
GenericTypeDescriptor("NUMBER", Types.NUMERIC, 1, null, null,
DatabaseMetaData.columnNullable, true, true));
+ typeMap.put(Integer.valueOf(Types.CHAR), new
GenericTypeDescriptor("CHAR", Types.CHAR, 2000, "'", "'",
DatabaseMetaData.columnNullable, true, false));
+ typeMap.put(Integer.valueOf(Types.CLOB), new
GenericTypeDescriptor("CLOB", Types.CLOB, 4000000000L, null, null,
DatabaseMetaData.columnNullable, false, false));
+ typeMap.put(Integer.valueOf(Types.DATE), new
GenericTypeDescriptor("DATE", Types.DATE, 0, "'", "'",
DatabaseMetaData.columnNullable, false, false));
+ typeMap.put(Integer.valueOf(Types.DECIMAL), new
GenericTypeDescriptor("NUMBER", Types.DECIMAL, 38, null, null,
DatabaseMetaData.columnNullable, true, true));
+ typeMap.put(Integer.valueOf(Types.DOUBLE), new
GenericTypeDescriptor("NUMBER", Types.DOUBLE, 38, null, null,
DatabaseMetaData.columnNullable, false, false));
+ typeMap.put(Integer.valueOf(Types.FLOAT), new
GenericTypeDescriptor("FLOAT", Types.FLOAT, 38, null, null,
DatabaseMetaData.columnNullable, false, false));
+ typeMap.put(Integer.valueOf(Types.INTEGER), new
GenericTypeDescriptor("NUMBER", Types.INTEGER, 38, null, null,
DatabaseMetaData.columnNullable, true, false));
+ typeMap.put(Integer.valueOf(Types.LONGVARBINARY), new
GenericTypeDescriptor("LONG RAW", Types.LONGVARBINARY, 2000000000L, null,
null, DatabaseMetaData.columnNullable, false, false));
+ typeMap.put(Integer.valueOf(Types.NUMERIC), new
GenericTypeDescriptor("NUMBER", Types.NUMERIC, 38, null, null,
DatabaseMetaData.columnNullable, true, true));
+ typeMap.put(Integer.valueOf(Types.REAL), new
GenericTypeDescriptor("NUMBER", Types.REAL, 38, null, null,
DatabaseMetaData.columnNullable, false, false));
+ typeMap.put(Integer.valueOf(Types.SMALLINT), new
GenericTypeDescriptor("NUMBER", Types.SMALLINT, 38, null, null,
DatabaseMetaData.columnNullable, true, false));
+ typeMap.put(Integer.valueOf(Types.TIME), new
GenericTypeDescriptor("DATE", Types.TIME, 0, "'", "'",
DatabaseMetaData.columnNullable, false, false));
+ typeMap.put(Integer.valueOf(Types.TIMESTAMP), new
GenericTypeDescriptor("TIMESTAMP", Types.TIMESTAMP, 0, "'", "'",
DatabaseMetaData.columnNullable, false, false));
+ typeMap.put(Integer.valueOf(Types.TINYINT), new
GenericTypeDescriptor("NUMBER", Types.TINYINT, 38, null, null,
DatabaseMetaData.columnNullable, true, false));
+ typeMap.put(Integer.valueOf(Types.LONGVARCHAR), new
GenericTypeDescriptor("LONG", Types.LONGVARCHAR, 2000000000L, null, null,
DatabaseMetaData.columnNullable, false, false));
+ typeMap.put(Integer.valueOf(Types.VARBINARY), new
GenericTypeDescriptor("LONG RAW", Types.VARBINARY, 2000000000L, null, null,
DatabaseMetaData.columnNullable, false, false));
+ typeMap.put(Integer.valueOf(Types.VARCHAR), new
GenericTypeDescriptor("VARCHAR2", Types.VARCHAR, 4000, "'", "'",
DatabaseMetaData.columnNullable, true, false));
+ }
+
+}
Modified: trunk/src/ca/sqlpower/architect/ddl/OracleDDLGenerator.java
==============================================================================
--- trunk/src/ca/sqlpower/architect/ddl/OracleDDLGenerator.java (original)
+++ trunk/src/ca/sqlpower/architect/ddl/OracleDDLGenerator.java Mon Nov 24
15:34:32 2008
@@ -37,6 +37,12 @@
import ca.sqlpower.architect.SQLRelationship.UpdateDeleteRule;
import ca.sqlpower.architect.ddl.DDLStatement.StatementType;
+/**
+ * The base class for version-specific Oracle DDL generators. This class
exists
+ * in addition to the two version-specific ones in order to provide a
generic
+ * Oracle DDL generator for older PL.ini files that don't specify the
newer DDL
+ * generators
+ */
public class OracleDDLGenerator extends GenericDDLGenerator {
public OracleDDLGenerator() throws SQLException {
@@ -47,10 +53,10 @@
private static final Logger logger =
Logger.getLogger(OracleDDLGenerator.class);
- private static HashSet reservedWords;
+ private static HashSet<String> reservedWords;
static {
- reservedWords = new HashSet();
+ reservedWords = new HashSet<String>();
reservedWords.add("ACCESS");
reservedWords.add("ADD");
reservedWords.add("ALL");