public DatabaseModel create() {\r
final DatabaseModel dbModel = new DatabaseModel();\r
final TPackage pkg = getPackage();\r
- final List<TObject> objectList = _tObjectBhv.selectListByStereotype(pkg, Constants.STEREOTYPE_TABLE);\r
+ final List<TObject> objectList = _tObjectBhv.selectListByStereotype(\r
+ pkg, Constants.STEREOTYPE_TABLE);\r
_log.debug(objectList.size());\r
\r
for (TObject object : objectList) {\r
}\r
\r
protected TPackage getPackage() {\r
- return _tPackageBhv.selectPackage(_config.getProperty(ConfigKey.ER_PACKAGE_TREE));\r
+ return _tPackageBhv.selectPackage(_config\r
+ .getProperty(ConfigKey.ER_PACKAGE_TREE));\r
}\r
\r
protected TableModel generateTableModel(TObject tobject) {\r
table.setAlias(tobject.getAlias());\r
table.setNote(tobject.getNote());\r
if (_config.getBoolean(_config.getProperty(ConfigKey.USE_SCHEMA))) {\r
- table.setSchema(_tObjectpropertiesBhv.getValue(tobject, Constants.OBJECT_PROPERTIES_OWNER));\r
+ table.setSchema(_tObjectpropertiesBhv.getValue(tobject,\r
+ Constants.OBJECT_PROPERTIES_OWNER));\r
}\r
- table.setSuppressCommonColumn(_tObjectconstraintBhv.hasConstraint(tobject, Constants.SUPPRESS_COMMON_COLUMN));\r
+ table.setSuppressCommonColumn(_tObjectconstraintBhv.hasConstraint(\r
+ tobject, Constants.SUPPRESS_COMMON_COLUMN));\r
generateColumnModel(table, tobject);\r
generatePKModel(table, tobject);\r
generateFKModel(table, tobject);\r
generateUniqueModel(table, tobject);\r
generateIndexModel(table, tobject);\r
-\r
return table;\r
}\r
\r
protected void generateColumnModel(TableModel table, TObject tobject) {\r
- final List<TAttribute> attributes = _tAttributeBhv.selectColumns(tobject);\r
+ final List<TAttribute> attributes = _tAttributeBhv\r
+ .selectColumns(tobject);\r
for (TAttribute attribute : attributes) {\r
- final ColumnModel column = new ColumnModel();\r
- column.setName(attribute.getName());\r
- column.setAlias(attribute.getStyle());\r
- column.setType(getColumnType(attribute));\r
- column.setLength(attribute.getLength());\r
- column.setPrecision(attribute.getPrecision());\r
- column.setScale(attribute.getScale());\r
- column.setNullable(Integer.valueOf(0).equals(attribute.getAllowduplicates()));\r
- column.setNote(attribute.getNotes());\r
- table.addColumn(column);\r
+ table.addColumn(ColumnModel.create(attribute, _config));\r
}\r
}\r
\r
protected String getColumnType(TAttribute attribute) {\r
- final String dictionary = _config.getProperty(attribute.getName());\r
+ final String dictionary = _config.getProperty(attribute.getType());\r
if (dictionary != null) {\r
return dictionary;\r
}\r
}\r
\r
protected void generatePKModel(TableModel table, TObject tobject) {\r
- final ListResultBean<TOperation> pkList = _tOperationBhv.selectOperation(tobject,\r
- Constants.STEREOTYPE_PRIMARY_KEY);\r
+ final ListResultBean<TOperation> pkList = _tOperationBhv\r
+ .selectOperation(tobject, Constants.STEREOTYPE_PRIMARY_KEY);\r
if (pkList.isEmpty()) {\r
return;\r
}\r
final TOperation opePK = pkList.get(0);\r
- final ListResultBean<TOperationparams> params = _tOperationparamsBhv.selectOperationParams(opePK);\r
+ final ListResultBean<TOperationparams> params = _tOperationparamsBhv\r
+ .selectOperationParams(opePK);\r
if (!params.isEmpty()) {\r
final PrimaryKeyModel pk = new PrimaryKeyModel();\r
pk.setName(opePK.getName());\r
}\r
\r
protected void generateFKModel(TableModel table, TObject tobject) {\r
- final ListResultBean<TOperation> fkList = _tOperationBhv.selectOperation(tobject,\r
- Constants.STEREOTYPE_FOREIGN_KEY);\r
+ final ListResultBean<TOperation> fkList = _tOperationBhv\r
+ .selectOperation(tobject, Constants.STEREOTYPE_FOREIGN_KEY);\r
for (TOperation opeFK : fkList) {\r
final ForeignKeyModel fkModel = new ForeignKeyModel();\r
fkModel.setName(opeFK.getName());\r
\r
{\r
- final ListResultBean<TOperationparams> params = _tOperationparamsBhv.selectOperationParams(opeFK);\r
+ final ListResultBean<TOperationparams> params = _tOperationparamsBhv\r
+ .selectOperationParams(opeFK);\r
for (TOperationparams param : params) {\r
fkModel.addColumnName(param.getName());\r
}\r
conCB.query().setSourcerole_Equal(opeFK.getName());\r
final TConnector con = _tConnectorBhv.selectEntity(conCB);\r
\r
- final TObject targetTable = _tObjectBhv.selectEntity(con.getEndObjectId());\r
+ final TObject targetTable = _tObjectBhv.selectEntity(con\r
+ .getEndObjectId());\r
fkModel.setTargetTable(targetTable.getName());\r
\r
final TOperationCB targetOpeCB = new TOperationCB();\r
targetOpeCB.query().setObjectId_Equal(con.getEndObjectId());\r
targetOpeCB.query().setName_Equal(con.getDestrole());\r
- final TOperation targetOpe = _tOperationBhv.selectEntity(targetOpeCB);\r
+ final TOperation targetOpe = _tOperationBhv\r
+ .selectEntity(targetOpeCB);\r
\r
final ListResultBean<TOperationparams> targetParams = _tOperationparamsBhv\r
.selectOperationParams(targetOpe);\r
final TOperationCB cb = new TOperationCB();\r
cb.query().setObjectId_Equal(tobject.getObjectId());\r
cb.query().setStereotype_Equal(Constants.STEREOTYPE_UNIQUE);\r
- final ListResultBean<TOperation> uniqueList = _tOperationBhv.selectList(cb);\r
+ final ListResultBean<TOperation> uniqueList = _tOperationBhv\r
+ .selectList(cb);\r
for (TOperation unique : uniqueList) {\r
final UniqueModel uniqueModel = new UniqueModel();\r
uniqueModel.setName(unique.getName());\r
final TOperationparamsCB opeCB = new TOperationparamsCB();\r
opeCB.query().setOperationid_Equal(unique.getOperationid());\r
opeCB.query().addOrderBy_Pos_Asc();\r
- final ListResultBean<TOperationparams> cols = _tOperationparamsBhv.selectList(opeCB);\r
+ final ListResultBean<TOperationparams> cols = _tOperationparamsBhv\r
+ .selectList(opeCB);\r
for (TOperationparams param : cols) {\r
uniqueModel.addColumnName(param.getName());\r
}\r
}\r
\r
protected void generateIndexModel(TableModel table, TObject tobject) {\r
- final ListResultBean<TOperation> indexList = _tOperationBhv.selectOperation(tobject, "index");\r
+ final ListResultBean<TOperation> indexList = _tOperationBhv\r
+ .selectOperation(tobject, "index");\r
for (TOperation index : indexList) {\r
final IndexModel indexModel = new IndexModel();\r
indexModel.setName(index.getName());\r
- final ListResultBean<TOperationparams> params = _tOperationparamsBhv.selectOperationParams(index);\r
+ final ListResultBean<TOperationparams> params = _tOperationparamsBhv\r
+ .selectOperationParams(index);\r
for (TOperationparams param : params) {\r
indexModel.addColumn(param.getName());\r
}\r
package jp.sourceforge.ea2ddl.ddl.model;\r
\r
import java.io.Serializable;\r
+import java.util.regex.Matcher;\r
+import java.util.regex.Pattern;\r
+\r
+import jp.sourceforge.ea2ddl.common.config.Config;\r
+import jp.sourceforge.ea2ddl.dao.exentity.TAttribute;\r
\r
/**\r
* @author taktos\r
private String _alias;\r
private String _note;\r
private String _type;\r
- private Integer _length;\r
private Integer _precision;\r
private Integer _scale;\r
private boolean nullable;\r
+ private boolean ordered;\r
+\r
+ public static ColumnModel create(TAttribute columnDef, Config dictionary) {\r
+ ColumnModel column = new ColumnModel();\r
+ column.setName(columnDef.getName());\r
+ column.setAlias(columnDef.getStyle());\r
+ column.setType(columnDef, dictionary);\r
+ column.setNullable(Integer.valueOf(0).equals(\r
+ columnDef.getAllowduplicates()));\r
+ column.setOrdered(Integer.valueOf(1).equals(columnDef.getIsordered()));\r
+ column.setNote(columnDef.getNotes());\r
+ return column;\r
+ }\r
+\r
+ private void setType(TAttribute columnDef, Config dictionary) {\r
+ String domain = dictionary.getProperty(columnDef.getType());\r
+ if (domain != null) {\r
+ Pattern p = Pattern.compile(\r
+ "^(\\w+)\\s*(\\((\\d+)(,\\s*(\\d+))?\\))?.*",\r
+ Pattern.CASE_INSENSITIVE);\r
+ Matcher m = p.matcher(domain);\r
+ if (m.matches()) {\r
+ setType(m.group(1));\r
+ if (m.group(3) != null) {\r
+ Integer len = Integer.valueOf(m.group(3));\r
+ setScale(len);\r
+ }\r
+ if (m.group(5) != null) {\r
+ setPrecision(Integer.valueOf(m.group(5)));\r
+ }\r
+ }\r
+ return;\r
+ }\r
+ setType(columnDef.getType());\r
+ if (columnDef.getLength() != null) {\r
+ setScale(columnDef.getLength());\r
+ } else if (columnDef.getScale() != null) {\r
+ setScale(columnDef.getScale());\r
+ }\r
+ setPrecision(columnDef.getPrecision());\r
+ }\r
\r
public boolean isNullable() {\r
return nullable;\r
this.nullable = nullable;\r
}\r
\r
+ public boolean isOrdered() {\r
+ return ordered;\r
+ }\r
+\r
+ public void setOrdered(boolean ordered) {\r
+ this.ordered = ordered;\r
+ }\r
+\r
private String defaultValue;\r
\r
public String getName() {\r
_type = type;\r
}\r
\r
- public Integer getLength() {\r
- return _length;\r
- }\r
-\r
- public void setLength(Integer length) {\r
- _length = length;\r
- }\r
-\r
public Integer getPrecision() {\r
return _precision;\r
}\r
}\r
\r
public String getDefinition() {\r
- StringBuffer b = new StringBuffer();\r
- b.append(getType());\r
- if ("CHAR".equals(getType()) || "VARCHAR".equals(getType())\r
- || "VARCHAR2".equals(getType()) || "INTEGER".equals(getType())\r
- || "LONG".equals(getType()) || "FLOAT".equals(getType())\r
- || "NCHAR".equals(getType()) || "NVARCHAR".equals(getType())\r
- || "NVARCHAR2".equals(getType()) || "RAW".equals(getType())) {\r
- b.append("(").append(getLength()).append(")");\r
- } else if ("NUMBER".equals(getType())) {\r
- b.append("(").append(getPrecision());\r
- if (getScale() != null && 0 != getScale()) {\r
- b.append(",").append(getScale());\r
+ StringBuilder b = new StringBuilder();\r
+ b.append(_type);\r
+ if (_scale != null) {\r
+ b.append("(").append(_scale);\r
+ if (_precision != null) {\r
+ b.append(",").append(_precision);\r
}\r
b.append(")");\r
}\r
if (!isNullable()) {\r
b.append(" NOT NULL");\r
}\r
+ if (isOrdered()) {\r
+ b.append(" AUTO_INCREMENT");\r
+ }\r
return b.toString();\r
}\r
\r
--- /dev/null
+<#comment>\r
+<#list tableList as table>\r
+<#list table.foreignKeyList as fk>ALTER TABLE ${table.name} DROP CONSTRAINT ${fk.name}\r
+;\r
+</#list>\r
+</#list>\r
+<#list tableList as table>\r
+DROP TABLE ${table.name};\r
+</#list>\r
+</#comment>\r
+\r
+<#list tableList as table>\r
+CREATE TABLE ${table.name} (\r
+<#list table.columnList as column> ${column.name} ${column.definition}<#if column.alias?? || column.note??> COMMENT '<#if column.alias??>${column.alias}:</#if><#if column.note??>${column.note}</#if>'</#if><#if column_has_next>,</#if>\r
+</#list>\r
+<#if !table.suppressCommonColumn>\r
+ , create_user VARCHAR(20) NOT NULL\r
+ , create_datetime DATETIME NOT NULL\r
+ , update_user VARCHAR(20) NOT NULL\r
+ , update_datetime DATETIME NOT NULL\r
+ , version_no INTEGER NOT NULL\r
+</#if>\r
+<#if table.primaryKey??>\r
+ , CONSTRAINT PRIMARY KEY (<#list table.primaryKey.columnNameList as columnName>${columnName}<#if columnName_has_next>,</#if></#list>)\r
+</#if>\r
+<#list table.uniqueList as unique>\r
+ , CONSTRAINT UNIQUE KEY$ {unique.name} (<#list unique.columnNameList as columnName>${columnName}<#if columnName_has_next>,</#if></#list>)\r
+</#list>\r
+<#list table.indexList as index>\r
+ , INDEX ${index.name} (<#list index.columnList as columnName>${columnName}<#if columnName_has_next>,</#if></#list>)\r
+</#list>\r
+) ENGINE=InnoDB<#if table.alias?? || table.note??> COMMENT='<#if table.alias??>${table.alias}:</#if><#if table.note??>${table.note}</#if>'</#if>\r
+;\r
+\r
+</#list>\r
+\r
+<#list tableList as table>\r
+<#list table.foreignKeyList as fk>ALTER TABLE ${table.name} ADD CONSTRAINT ${fk.name}\r
+ FOREIGN KEY (<#list fk.columnNameList as columnName>${columnName}<#if columnName_has_next>,</#if></#list>)\r
+ REFERENCES ${fk.targetTable} (<#list fk.targetColumnNameList as columnName>${columnName}<#if columnName_has_next>,</#if></#list>)\r
+;\r
+</#list>\r
+</#list>\r