OSDN Git Service

AUTO_INCREMENTに対応
authortaktos9 <taktos9@136db618-7844-41ca-8ac1-fb3fd040db1d>
Fri, 2 Sep 2011 14:08:18 +0000 (14:08 +0000)
committertaktos9 <taktos9@136db618-7844-41ca-8ac1-fb3fd040db1d>
Fri, 2 Sep 2011 14:08:18 +0000 (14:08 +0000)
MySQL用のテンプレートを追加
ディクショナリの定義をそのまま使用できるよう対応した

git-svn-id: http://svn.sourceforge.jp/svnroot/ea2ddl/trunk/ea2ddl@119 136db618-7844-41ca-8ac1-fb3fd040db1d

ea2ddl-ddl/src/main/java/jp/sourceforge/ea2ddl/ddl/factory/impl/DatabaseModelFactoryImpl.java
ea2ddl-ddl/src/main/java/jp/sourceforge/ea2ddl/ddl/model/ColumnModel.java
ea2ddl-ddl/templates/ddl-mysql.ftl [new file with mode: 0644]

index 67a321d..aaa0e00 100644 (file)
@@ -109,7 +109,8 @@ public class DatabaseModelFactoryImpl implements ModelFactory {
        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
@@ -120,7 +121,8 @@ public class DatabaseModelFactoryImpl implements ModelFactory {
        }\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
@@ -129,36 +131,29 @@ public class DatabaseModelFactoryImpl implements ModelFactory {
                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
@@ -166,13 +161,14 @@ public class DatabaseModelFactoryImpl implements ModelFactory {
        }\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
@@ -184,14 +180,15 @@ public class DatabaseModelFactoryImpl implements ModelFactory {
        }\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
@@ -202,13 +199,15 @@ public class DatabaseModelFactoryImpl implements ModelFactory {
                                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
@@ -224,14 +223,16 @@ public class DatabaseModelFactoryImpl implements ModelFactory {
                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
@@ -240,11 +241,13 @@ public class DatabaseModelFactoryImpl implements ModelFactory {
        }\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
index e6ed217..a7649ff 100644 (file)
@@ -4,6 +4,11 @@
 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
@@ -16,10 +21,50 @@ public class ColumnModel implements Serializable {
        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
@@ -29,6 +74,14 @@ public class ColumnModel implements Serializable {
                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
@@ -63,14 +116,6 @@ public class ColumnModel implements Serializable {
                _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
@@ -96,24 +141,21 @@ public class ColumnModel implements Serializable {
        }\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
diff --git a/ea2ddl-ddl/templates/ddl-mysql.ftl b/ea2ddl-ddl/templates/ddl-mysql.ftl
new file mode 100644 (file)
index 0000000..e059bd9
--- /dev/null
@@ -0,0 +1,43 @@
+<#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