1 30 package com.genimen.djeneric.tools.modeler.schemagenerator; 31 32 import com.genimen.djeneric.repository.DjDomain; 33 import com.genimen.djeneric.repository.DjExtent; 34 import com.genimen.djeneric.repository.DjPersistenceManager; 35 import com.genimen.djeneric.repository.DjProperty; 36 import com.genimen.djeneric.repository.DjRelation; 37 import com.genimen.djeneric.repository.rdbmsdirect.RdbmsDirectPersistenceManager; 38 39 public class OracleSchemaGenerator extends SchemaGenerator 40 { 41 public OracleSchemaGenerator(DjPersistenceManager mgr) 42 { 43 super(mgr); 44 } 45 46 public String getTableCreateStart(DjExtent extent) throws Exception 47 { 48 return "-- Objects of type " + extent.getObjectType() + "\n" + "create table " + getTableName(extent) + "(\n"; 49 } 50 51 public String getTypeColumnCreate(DjExtent extent) throws Exception 52 { 53 return " " + RdbmsDirectPersistenceManager.OBJECT_TYPE_COLUMN + " varchar2(" 54 + RdbmsDirectPersistenceManager.MAX_INTERNAL_CODE_LENGTH + ") not null,\n"; 55 } 56 57 public String getColumnCreate(DjProperty prop, boolean isFirst, boolean isLast) throws Exception 58 { 59 String result = " " + prop.getName() + " "; 60 if (prop.getTypeCode() == DjDomain.BIGDECIMAL_TYPE) result += " number(" + prop.getLength() + ", " 61 + prop.getDecimals() + ") "; 62 else if (prop.getTypeCode() == DjDomain.BYTE_TYPE) result += " long raw "; 63 else if (prop.getTypeCode() == DjDomain.DATE_TYPE) result += " date "; 64 else if (prop.getTypeCode() == DjDomain.INT_TYPE) result += " number(" + prop.getLength() + ", 0) "; 65 else if (prop.getTypeCode() == DjDomain.LONG_TYPE) result += " number(" + prop.getLength() + ", 0) "; 66 else if (prop.getTypeCode() == DjDomain.STRING_TYPE) 67 { 68 if (prop.getLength() < 4000) result += " varchar2(" + prop.getLength() + ") "; 69 else result += " clob "; 70 } 71 else throw new Exception ("Unknown property type: " + prop.getTypeCode()); 72 73 if (prop.isRequired()) result += " not null"; 74 if (!isLast) result += ","; 75 result += "\n"; 76 77 return result; 78 } 79 80 public String getTableCreateEnd(DjExtent extent) throws Exception 81 { 82 return ");\n\n"; 83 } 84 85 public String getTablePk(DjExtent extent, int idx) throws Exception 86 { 87 String result = ""; 88 if (idx == 0) result += "\n-- Primary keys\n"; 89 90 result += "alter table " + getTableName(extent) + " add constraint " + getTableName(extent) + "_pk primary key(" 91 + extent.getIdProperty().getName() + ");\n"; 92 return result; 93 } 94 95 public String getRelation(DjRelation relation, int idx, int idxInTable) throws Exception 96 { 97 String result = ""; 98 if (idx == 0) result += "\n-- Foreign keys\n"; 99 100 DjExtent extent = relation.getDetailExtent(); 101 result += "alter table " + getTableName(extent) + " add constraint " + getTableName(extent) + "_fk" + idxInTable 102 + " foreign key(" + relation.getDetailProperty().getName() + ") references " 103 + getTableName(relation.getMasterExtent()) + "(" + relation.getMasterExtent().getIdProperty().getName() 104 + ");\n"; 105 return result; 106 } 107 108 public String getIndex(DjRelation relation, int idx, int idxInTable) throws Exception 109 { 110 String result = ""; 111 if (idx == 0) result += "\n-- Indexes on foreign key columns\n"; 112 113 DjExtent extent = relation.getDetailExtent(); 114 result += "create index " + getTableName(extent) + "_" + idxInTable + " on " + getTableName(extent) + "(" 115 + relation.getDetailProperty().getName() + ");\n"; 116 return result; 117 } 118 } | Popular Tags |