From 3c3086fc5c0fa20152a5fa2347bcd1b3b11a808e Mon Sep 17 00:00:00 2001 From: taktos9 Date: Fri, 2 Sep 2011 14:08:18 +0000 Subject: [PATCH] =?utf8?q?AUTO=5FINCREMENT=E3=81=AB=E5=AF=BE=E5=BF=9C=20My?= =?utf8?q?SQL=E7=94=A8=E3=81=AE=E3=83=86=E3=83=B3=E3=83=97=E3=83=AC?= =?utf8?q?=E3=83=BC=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0=20=E3=83=87?= =?utf8?q?=E3=82=A3=E3=82=AF=E3=82=B7=E3=83=A7=E3=83=8A=E3=83=AA=E3=81=AE?= =?utf8?q?=E5=AE=9A=E7=BE=A9=E3=82=92=E3=81=9D=E3=81=AE=E3=81=BE=E3=81=BE?= =?utf8?q?=E4=BD=BF=E7=94=A8=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86?= =?utf8?q?=E5=AF=BE=E5=BF=9C=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit git-svn-id: http://svn.sourceforge.jp/svnroot/ea2ddl/trunk/ea2ddl@119 136db618-7844-41ca-8ac1-fb3fd040db1d --- .../ddl/factory/impl/DatabaseModelFactoryImpl.java | 61 ++++++++-------- .../sourceforge/ea2ddl/ddl/model/ColumnModel.java | 84 ++++++++++++++++------ ea2ddl-ddl/templates/ddl-mysql.ftl | 43 +++++++++++ 3 files changed, 138 insertions(+), 50 deletions(-) create mode 100644 ea2ddl-ddl/templates/ddl-mysql.ftl diff --git a/ea2ddl-ddl/src/main/java/jp/sourceforge/ea2ddl/ddl/factory/impl/DatabaseModelFactoryImpl.java b/ea2ddl-ddl/src/main/java/jp/sourceforge/ea2ddl/ddl/factory/impl/DatabaseModelFactoryImpl.java index 67a321d..aaa0e00 100644 --- a/ea2ddl-ddl/src/main/java/jp/sourceforge/ea2ddl/ddl/factory/impl/DatabaseModelFactoryImpl.java +++ b/ea2ddl-ddl/src/main/java/jp/sourceforge/ea2ddl/ddl/factory/impl/DatabaseModelFactoryImpl.java @@ -109,7 +109,8 @@ public class DatabaseModelFactoryImpl implements ModelFactory { public DatabaseModel create() { final DatabaseModel dbModel = new DatabaseModel(); final TPackage pkg = getPackage(); - final List objectList = _tObjectBhv.selectListByStereotype(pkg, Constants.STEREOTYPE_TABLE); + final List objectList = _tObjectBhv.selectListByStereotype( + pkg, Constants.STEREOTYPE_TABLE); _log.debug(objectList.size()); for (TObject object : objectList) { @@ -120,7 +121,8 @@ public class DatabaseModelFactoryImpl implements ModelFactory { } protected TPackage getPackage() { - return _tPackageBhv.selectPackage(_config.getProperty(ConfigKey.ER_PACKAGE_TREE)); + return _tPackageBhv.selectPackage(_config + .getProperty(ConfigKey.ER_PACKAGE_TREE)); } protected TableModel generateTableModel(TObject tobject) { @@ -129,36 +131,29 @@ public class DatabaseModelFactoryImpl implements ModelFactory { table.setAlias(tobject.getAlias()); table.setNote(tobject.getNote()); if (_config.getBoolean(_config.getProperty(ConfigKey.USE_SCHEMA))) { - table.setSchema(_tObjectpropertiesBhv.getValue(tobject, Constants.OBJECT_PROPERTIES_OWNER)); + table.setSchema(_tObjectpropertiesBhv.getValue(tobject, + Constants.OBJECT_PROPERTIES_OWNER)); } - table.setSuppressCommonColumn(_tObjectconstraintBhv.hasConstraint(tobject, Constants.SUPPRESS_COMMON_COLUMN)); + table.setSuppressCommonColumn(_tObjectconstraintBhv.hasConstraint( + tobject, Constants.SUPPRESS_COMMON_COLUMN)); generateColumnModel(table, tobject); generatePKModel(table, tobject); generateFKModel(table, tobject); generateUniqueModel(table, tobject); generateIndexModel(table, tobject); - return table; } protected void generateColumnModel(TableModel table, TObject tobject) { - final List attributes = _tAttributeBhv.selectColumns(tobject); + final List attributes = _tAttributeBhv + .selectColumns(tobject); for (TAttribute attribute : attributes) { - final ColumnModel column = new ColumnModel(); - column.setName(attribute.getName()); - column.setAlias(attribute.getStyle()); - column.setType(getColumnType(attribute)); - column.setLength(attribute.getLength()); - column.setPrecision(attribute.getPrecision()); - column.setScale(attribute.getScale()); - column.setNullable(Integer.valueOf(0).equals(attribute.getAllowduplicates())); - column.setNote(attribute.getNotes()); - table.addColumn(column); + table.addColumn(ColumnModel.create(attribute, _config)); } } protected String getColumnType(TAttribute attribute) { - final String dictionary = _config.getProperty(attribute.getName()); + final String dictionary = _config.getProperty(attribute.getType()); if (dictionary != null) { return dictionary; } @@ -166,13 +161,14 @@ public class DatabaseModelFactoryImpl implements ModelFactory { } protected void generatePKModel(TableModel table, TObject tobject) { - final ListResultBean pkList = _tOperationBhv.selectOperation(tobject, - Constants.STEREOTYPE_PRIMARY_KEY); + final ListResultBean pkList = _tOperationBhv + .selectOperation(tobject, Constants.STEREOTYPE_PRIMARY_KEY); if (pkList.isEmpty()) { return; } final TOperation opePK = pkList.get(0); - final ListResultBean params = _tOperationparamsBhv.selectOperationParams(opePK); + final ListResultBean params = _tOperationparamsBhv + .selectOperationParams(opePK); if (!params.isEmpty()) { final PrimaryKeyModel pk = new PrimaryKeyModel(); pk.setName(opePK.getName()); @@ -184,14 +180,15 @@ public class DatabaseModelFactoryImpl implements ModelFactory { } protected void generateFKModel(TableModel table, TObject tobject) { - final ListResultBean fkList = _tOperationBhv.selectOperation(tobject, - Constants.STEREOTYPE_FOREIGN_KEY); + final ListResultBean fkList = _tOperationBhv + .selectOperation(tobject, Constants.STEREOTYPE_FOREIGN_KEY); for (TOperation opeFK : fkList) { final ForeignKeyModel fkModel = new ForeignKeyModel(); fkModel.setName(opeFK.getName()); { - final ListResultBean params = _tOperationparamsBhv.selectOperationParams(opeFK); + final ListResultBean params = _tOperationparamsBhv + .selectOperationParams(opeFK); for (TOperationparams param : params) { fkModel.addColumnName(param.getName()); } @@ -202,13 +199,15 @@ public class DatabaseModelFactoryImpl implements ModelFactory { conCB.query().setSourcerole_Equal(opeFK.getName()); final TConnector con = _tConnectorBhv.selectEntity(conCB); - final TObject targetTable = _tObjectBhv.selectEntity(con.getEndObjectId()); + final TObject targetTable = _tObjectBhv.selectEntity(con + .getEndObjectId()); fkModel.setTargetTable(targetTable.getName()); final TOperationCB targetOpeCB = new TOperationCB(); targetOpeCB.query().setObjectId_Equal(con.getEndObjectId()); targetOpeCB.query().setName_Equal(con.getDestrole()); - final TOperation targetOpe = _tOperationBhv.selectEntity(targetOpeCB); + final TOperation targetOpe = _tOperationBhv + .selectEntity(targetOpeCB); final ListResultBean targetParams = _tOperationparamsBhv .selectOperationParams(targetOpe); @@ -224,14 +223,16 @@ public class DatabaseModelFactoryImpl implements ModelFactory { final TOperationCB cb = new TOperationCB(); cb.query().setObjectId_Equal(tobject.getObjectId()); cb.query().setStereotype_Equal(Constants.STEREOTYPE_UNIQUE); - final ListResultBean uniqueList = _tOperationBhv.selectList(cb); + final ListResultBean uniqueList = _tOperationBhv + .selectList(cb); for (TOperation unique : uniqueList) { final UniqueModel uniqueModel = new UniqueModel(); uniqueModel.setName(unique.getName()); final TOperationparamsCB opeCB = new TOperationparamsCB(); opeCB.query().setOperationid_Equal(unique.getOperationid()); opeCB.query().addOrderBy_Pos_Asc(); - final ListResultBean cols = _tOperationparamsBhv.selectList(opeCB); + final ListResultBean cols = _tOperationparamsBhv + .selectList(opeCB); for (TOperationparams param : cols) { uniqueModel.addColumnName(param.getName()); } @@ -240,11 +241,13 @@ public class DatabaseModelFactoryImpl implements ModelFactory { } protected void generateIndexModel(TableModel table, TObject tobject) { - final ListResultBean indexList = _tOperationBhv.selectOperation(tobject, "index"); + final ListResultBean indexList = _tOperationBhv + .selectOperation(tobject, "index"); for (TOperation index : indexList) { final IndexModel indexModel = new IndexModel(); indexModel.setName(index.getName()); - final ListResultBean params = _tOperationparamsBhv.selectOperationParams(index); + final ListResultBean params = _tOperationparamsBhv + .selectOperationParams(index); for (TOperationparams param : params) { indexModel.addColumn(param.getName()); } diff --git a/ea2ddl-ddl/src/main/java/jp/sourceforge/ea2ddl/ddl/model/ColumnModel.java b/ea2ddl-ddl/src/main/java/jp/sourceforge/ea2ddl/ddl/model/ColumnModel.java index e6ed217..a7649ff 100644 --- a/ea2ddl-ddl/src/main/java/jp/sourceforge/ea2ddl/ddl/model/ColumnModel.java +++ b/ea2ddl-ddl/src/main/java/jp/sourceforge/ea2ddl/ddl/model/ColumnModel.java @@ -4,6 +4,11 @@ package jp.sourceforge.ea2ddl.ddl.model; import java.io.Serializable; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import jp.sourceforge.ea2ddl.common.config.Config; +import jp.sourceforge.ea2ddl.dao.exentity.TAttribute; /** * @author taktos @@ -16,10 +21,50 @@ public class ColumnModel implements Serializable { private String _alias; private String _note; private String _type; - private Integer _length; private Integer _precision; private Integer _scale; private boolean nullable; + private boolean ordered; + + public static ColumnModel create(TAttribute columnDef, Config dictionary) { + ColumnModel column = new ColumnModel(); + column.setName(columnDef.getName()); + column.setAlias(columnDef.getStyle()); + column.setType(columnDef, dictionary); + column.setNullable(Integer.valueOf(0).equals( + columnDef.getAllowduplicates())); + column.setOrdered(Integer.valueOf(1).equals(columnDef.getIsordered())); + column.setNote(columnDef.getNotes()); + return column; + } + + private void setType(TAttribute columnDef, Config dictionary) { + String domain = dictionary.getProperty(columnDef.getType()); + if (domain != null) { + Pattern p = Pattern.compile( + "^(\\w+)\\s*(\\((\\d+)(,\\s*(\\d+))?\\))?.*", + Pattern.CASE_INSENSITIVE); + Matcher m = p.matcher(domain); + if (m.matches()) { + setType(m.group(1)); + if (m.group(3) != null) { + Integer len = Integer.valueOf(m.group(3)); + setScale(len); + } + if (m.group(5) != null) { + setPrecision(Integer.valueOf(m.group(5))); + } + } + return; + } + setType(columnDef.getType()); + if (columnDef.getLength() != null) { + setScale(columnDef.getLength()); + } else if (columnDef.getScale() != null) { + setScale(columnDef.getScale()); + } + setPrecision(columnDef.getPrecision()); + } public boolean isNullable() { return nullable; @@ -29,6 +74,14 @@ public class ColumnModel implements Serializable { this.nullable = nullable; } + public boolean isOrdered() { + return ordered; + } + + public void setOrdered(boolean ordered) { + this.ordered = ordered; + } + private String defaultValue; public String getName() { @@ -63,14 +116,6 @@ public class ColumnModel implements Serializable { _type = type; } - public Integer getLength() { - return _length; - } - - public void setLength(Integer length) { - _length = length; - } - public Integer getPrecision() { return _precision; } @@ -96,24 +141,21 @@ public class ColumnModel implements Serializable { } public String getDefinition() { - StringBuffer b = new StringBuffer(); - b.append(getType()); - if ("CHAR".equals(getType()) || "VARCHAR".equals(getType()) - || "VARCHAR2".equals(getType()) || "INTEGER".equals(getType()) - || "LONG".equals(getType()) || "FLOAT".equals(getType()) - || "NCHAR".equals(getType()) || "NVARCHAR".equals(getType()) - || "NVARCHAR2".equals(getType()) || "RAW".equals(getType())) { - b.append("(").append(getLength()).append(")"); - } else if ("NUMBER".equals(getType())) { - b.append("(").append(getPrecision()); - if (getScale() != null && 0 != getScale()) { - b.append(",").append(getScale()); + StringBuilder b = new StringBuilder(); + b.append(_type); + if (_scale != null) { + b.append("(").append(_scale); + if (_precision != null) { + b.append(",").append(_precision); } b.append(")"); } if (!isNullable()) { b.append(" NOT NULL"); } + if (isOrdered()) { + b.append(" AUTO_INCREMENT"); + } return b.toString(); } diff --git a/ea2ddl-ddl/templates/ddl-mysql.ftl b/ea2ddl-ddl/templates/ddl-mysql.ftl new file mode 100644 index 0000000..e059bd9 --- /dev/null +++ b/ea2ddl-ddl/templates/ddl-mysql.ftl @@ -0,0 +1,43 @@ +<#comment> +<#list tableList as table> +<#list table.foreignKeyList as fk>ALTER TABLE ${table.name} DROP CONSTRAINT ${fk.name} +; + + +<#list tableList as table> +DROP TABLE ${table.name}; + + + +<#list tableList as table> +CREATE TABLE ${table.name} ( +<#list table.columnList as column> ${column.name} ${column.definition}<#if column.alias?? || column.note??> COMMENT '<#if column.alias??>${column.alias}:<#if column.note??>${column.note}'<#if column_has_next>, + +<#if !table.suppressCommonColumn> + , create_user VARCHAR(20) NOT NULL + , create_datetime DATETIME NOT NULL + , update_user VARCHAR(20) NOT NULL + , update_datetime DATETIME NOT NULL + , version_no INTEGER NOT NULL + +<#if table.primaryKey??> + , CONSTRAINT PRIMARY KEY (<#list table.primaryKey.columnNameList as columnName>${columnName}<#if columnName_has_next>,) + +<#list table.uniqueList as unique> + , CONSTRAINT UNIQUE KEY$ {unique.name} (<#list unique.columnNameList as columnName>${columnName}<#if columnName_has_next>,) + +<#list table.indexList as index> + , INDEX ${index.name} (<#list index.columnList as columnName>${columnName}<#if columnName_has_next>,) + +) ENGINE=InnoDB<#if table.alias?? || table.note??> COMMENT='<#if table.alias??>${table.alias}:<#if table.note??>${table.note}' +; + + + +<#list tableList as table> +<#list table.foreignKeyList as fk>ALTER TABLE ${table.name} ADD CONSTRAINT ${fk.name} + FOREIGN KEY (<#list fk.columnNameList as columnName>${columnName}<#if columnName_has_next>,) + REFERENCES ${fk.targetTable} (<#list fk.targetColumnNameList as columnName>${columnName}<#if columnName_has_next>,) +; + + -- 2.11.0