From cc28ee34130c5fef14fe12c7f6fb933fff41360a Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Mon, 12 Dec 2011 18:28:10 +0000 Subject: [PATCH] ALF-11670: Add autoincrement boolean property to columns Columns now have a property to describe whether it has been defined as an auto-increment column, e.g. AUTO_INCREMENT for MySQL. The property is persisted in XML reference files, loaded from XML reference files and compared between schemas. The MySQL reference file has been updated to include autoincrement values. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@32711 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../Schema-Reference.xml | 236 ++++++++++++++++++ .../schemacomp/DbObjectXMLTransformer.java | 1 + .../DbObjectXMLTransformerTest.java | 2 + .../alfresco/util/schemacomp/ExportDb.java | 3 + .../util/schemacomp/ExportDbTest.java | 1 + .../org/alfresco/util/schemacomp/XML.java | 1 + .../alfresco/util/schemacomp/XMLToSchema.java | 5 + .../util/schemacomp/XMLToSchemaTest.java | 3 + .../util/schemacomp/model/Column.java | 24 ++ .../util/schemacomp/model/ColumnTest.java | 4 + .../test/exportdb/AbstractExportTester.java | 2 + .../exportdb/MySQLDialectExportTester.java | 6 +- .../PostgreSQLDialectExportTester.java | 2 + .../schemacomp/xml_to_schema_test.xml | 1 + 14 files changed, 290 insertions(+), 1 deletion(-) diff --git a/config/alfresco/dbscripts/create/org.hibernate.dialect.MySQLInnoDBDialect/Schema-Reference.xml b/config/alfresco/dbscripts/create/org.hibernate.dialect.MySQLInnoDBDialect/Schema-Reference.xml index fcdc7a0853..2ebba870e0 100644 --- a/config/alfresco/dbscripts/create/org.hibernate.dialect.MySQLInnoDBDialect/Schema-Reference.xml +++ b/config/alfresco/dbscripts/create/org.hibernate.dialect.MySQLInnoDBDialect/Schema-Reference.xml @@ -6,30 +6,37 @@ bigint false + true bigint false + false bigint false + false bigint false + false bit false + false int false + false bigint true + false @@ -85,50 +92,62 @@ bigint false + true bigint false + false varchar(36) false + false bit false + false bigint false + false bit false + false bigint true + false int false + false bigint true + false bit false + false bit false + false bigint true + false @@ -169,22 +188,27 @@ bigint false + true bigint false + false text true + false text true + false text true + false @@ -200,10 +224,12 @@ bigint false + true bigint true + false @@ -225,22 +251,27 @@ bigint false + true bigint false + false bigint false + false bigint false + false int false + false @@ -285,46 +316,57 @@ bigint false + true bigint true + false datetime false + false text true + false varchar(255) true + false varchar(255) false + false varchar(10) true + false varchar(255) true + false varchar(36) true + false varchar(255) false + false datetime false + false @@ -366,22 +408,27 @@ bigint false + true varchar(255) false + false varchar(255) true + false varchar(36) true + false datetime false + false @@ -403,42 +450,52 @@ bigint false + true datetime false + false varchar(10) false + false text false + false varchar(255) false + false int false + false varchar(255) true + false varchar(36) true + false varchar(255) false + false datetime false + false @@ -465,46 +522,57 @@ varchar(64) false + false text true + false int true + false int true + false int true + false int true + false datetime true + false varchar(64) true + false bit true + false bit true + false text true + false @@ -520,22 +588,27 @@ bigint false + true smallint false + false bigint false + false bigint false + false bigint false + false @@ -583,22 +656,27 @@ bigint false + true bigint false + false bigint false + false bigint true + false bigint true + false @@ -651,14 +729,17 @@ bigint false + true bigint false + false bigint false + false @@ -691,18 +772,22 @@ bigint false + true bigint false + false varchar(100) true + false bigint true + false @@ -730,18 +815,22 @@ bigint false + true bigint false + false bigint false + false bigint false + false @@ -785,50 +874,62 @@ bigint false + true bigint false + false bigint false + false bigint false + false bigint false + false varchar(50) false + false bigint false + false bigint false + false varchar(255) false + false bigint false + false bit true + false int true + false @@ -908,26 +1009,32 @@ bigint false + true bigint false + false bigint true + false bigint true + false bigint true + false bigint true + false @@ -985,26 +1092,32 @@ bigint false + true varchar(255) false + false varchar(12) false + false bigint false + false bigint false + false bigint true + false @@ -1032,14 +1145,17 @@ bigint false + true bigint false + false varchar(100) false + false @@ -1061,14 +1177,17 @@ bigint false + true bigint false + false varchar(20) false + false @@ -1090,30 +1209,37 @@ bigint false + true bigint false + false bigint false + false bigint false + false varchar(36) false + false bigint false + false bigint false + false @@ -1152,18 +1278,22 @@ bigint false + true bigint false + false bigint false + false varchar(255) false + false @@ -1192,14 +1322,17 @@ bigint false + true bigint false + false varchar(100) false + false @@ -1221,14 +1354,17 @@ bigint false + true bigint false + false varchar(100) false + false @@ -1250,58 +1386,72 @@ bigint false + true bigint false + false bigint false + false varchar(36) false + false bigint false + false bit false + false bigint false + false bigint false + false bigint true + false varchar(255) true + false varchar(30) true + false varchar(255) true + false varchar(30) true + false varchar(30) true + false @@ -1386,10 +1536,12 @@ bigint false + false bigint false + false @@ -1428,26 +1580,32 @@ bigint false + true bigint false + false bigint false + false bigint false + false bigint false + false bigint false + false @@ -1505,50 +1663,62 @@ bigint false + false int false + false int false + false bit true + false bigint true + false float true + false double true + false text true + false blob true + false bigint false + false int false + false bigint false + false @@ -1599,18 +1769,22 @@ bigint false + true bigint false + false bigint false + false varchar(100) false + false @@ -1644,18 +1818,22 @@ bigint false + true varchar(255) false + false varchar(32) false + false bigint false + false @@ -1683,42 +1861,52 @@ bigint false + false smallint false + false tinyint false + false tinyint false + false tinyint false + false tinyint false + false tinyint false + false smallint false + false tinyint false + false tinyint false + false @@ -1742,10 +1930,12 @@ bigint false + true double false + false @@ -1767,22 +1957,27 @@ bigint false + false bigint false + false bigint false + false bigint false + false bigint false + false @@ -1834,10 +2029,12 @@ bigint false + true smallint false + false @@ -1853,10 +2050,12 @@ bigint false + true blob false + false @@ -1872,18 +2071,22 @@ bigint false + true text false + false varchar(16) false + false bigint false + false @@ -1911,26 +2114,32 @@ bigint false + true smallint false + false bigint false + false bigint false + false bigint false + false bigint true + false @@ -1990,18 +2199,22 @@ bigint false + true bigint false + false tinyint false + false bigint false + false @@ -2030,18 +2243,22 @@ bigint false + true bigint false + false bigint false + false varchar(200) false + false @@ -2075,14 +2292,17 @@ bigint false + true bigint false + false varchar(39) false + false @@ -2104,22 +2324,27 @@ bigint false + true bigint false + false varchar(50) false + false varchar(100) false + false bigint true + false @@ -2153,10 +2378,12 @@ bigint false + false bigint false + false @@ -2190,22 +2417,27 @@ bigint false + true bigint false + false bigint true + false varchar(56) false + false bigint true + false @@ -2238,18 +2470,22 @@ bigint false + true bigint false + false bigint false + false bigint false + false diff --git a/source/java/org/alfresco/util/schemacomp/DbObjectXMLTransformer.java b/source/java/org/alfresco/util/schemacomp/DbObjectXMLTransformer.java index 4fd84e2953..8108c00726 100644 --- a/source/java/org/alfresco/util/schemacomp/DbObjectXMLTransformer.java +++ b/source/java/org/alfresco/util/schemacomp/DbObjectXMLTransformer.java @@ -216,6 +216,7 @@ public class DbObjectXMLTransformer { simpleElement(XML.EL_TYPE, column.getType()); simpleElement(XML.EL_NULLABLE, Boolean.toString(column.isNullable())); + simpleElement(XML.EL_AUTOINCREMENT, Boolean.toString(column.isAutoIncrement())); } private void transformForeignKey(ForeignKey fk) throws SAXException diff --git a/source/java/org/alfresco/util/schemacomp/DbObjectXMLTransformerTest.java b/source/java/org/alfresco/util/schemacomp/DbObjectXMLTransformerTest.java index 126585e5f8..793d19a8cb 100644 --- a/source/java/org/alfresco/util/schemacomp/DbObjectXMLTransformerTest.java +++ b/source/java/org/alfresco/util/schemacomp/DbObjectXMLTransformerTest.java @@ -105,6 +105,7 @@ public class DbObjectXMLTransformerTest public void transformColumn() throws IOException { Column column = new Column(null, "last_name", "VARCHAR2(100)", true); + column.setAutoIncrement(true); column.setOrder(2); transformer.output(column); @@ -114,6 +115,7 @@ public class DbObjectXMLTransformerTest assertEquals("", reader.readLine()); assertEquals(" VARCHAR2(100)", reader.readLine()); assertEquals(" true", reader.readLine()); + assertEquals(" true", reader.readLine()); assertEquals("", reader.readLine()); } diff --git a/source/java/org/alfresco/util/schemacomp/ExportDb.java b/source/java/org/alfresco/util/schemacomp/ExportDb.java index 746d816176..ac98786af0 100644 --- a/source/java/org/alfresco/util/schemacomp/ExportDb.java +++ b/source/java/org/alfresco/util/schemacomp/ExportDb.java @@ -233,6 +233,9 @@ public class ExportDb column.setOrder(columns.getInt("ORDINAL_POSITION")); + String autoIncString = columns.getString("IS_AUTOINCREMENT"); + column.setAutoIncrement(parseBoolean(autoIncString)); + column.setParent(table); table.getColumns().add(column); } diff --git a/source/java/org/alfresco/util/schemacomp/ExportDbTest.java b/source/java/org/alfresco/util/schemacomp/ExportDbTest.java index 14366bf258..f28202d974 100644 --- a/source/java/org/alfresco/util/schemacomp/ExportDbTest.java +++ b/source/java/org/alfresco/util/schemacomp/ExportDbTest.java @@ -44,6 +44,7 @@ import org.springframework.transaction.PlatformTransactionManager; * it will run MySQL specific tests. If there is no test available for the configured DBMS then * the test will pass - this allows addition of new DBMS-specific tests when available. * + * @see AbstractExportTester * @author Matt Ward */ public class ExportDbTest diff --git a/source/java/org/alfresco/util/schemacomp/XML.java b/source/java/org/alfresco/util/schemacomp/XML.java index 01560dc1c2..f39d12a0b3 100644 --- a/source/java/org/alfresco/util/schemacomp/XML.java +++ b/source/java/org/alfresco/util/schemacomp/XML.java @@ -39,6 +39,7 @@ public abstract class XML public static final String EL_SEQUENCE = Sequence.class.getSimpleName().toLowerCase(); public static final String EL_TYPE = "type"; public static final String EL_NULLABLE = "nullable"; + public static final String EL_AUTOINCREMENT = "autoincrement"; public static final String EL_COLUMN_NAME = "columnname"; public static final String EL_COLUMN_NAMES = "columnnames"; public static final String EL_LOCAL_COLUMN = "localcolumn"; diff --git a/source/java/org/alfresco/util/schemacomp/XMLToSchema.java b/source/java/org/alfresco/util/schemacomp/XMLToSchema.java index 4912665bb3..f498a8b7cc 100644 --- a/source/java/org/alfresco/util/schemacomp/XMLToSchema.java +++ b/source/java/org/alfresco/util/schemacomp/XMLToSchema.java @@ -153,6 +153,11 @@ public class XMLToSchema extends DefaultHandler Column column = (Column) stack.peek(); column.setNullable(Boolean.parseBoolean(lastText.toString())); } + else if (qName.equals(XML.EL_AUTOINCREMENT)) + { + Column column = (Column) stack.peek(); + column.setAutoIncrement(Boolean.parseBoolean(lastText.toString())); + } else if (qName.equals(XML.EL_COLUMN_NAME)) { if (stack.peek() instanceof PrimaryKey) diff --git a/source/java/org/alfresco/util/schemacomp/XMLToSchemaTest.java b/source/java/org/alfresco/util/schemacomp/XMLToSchemaTest.java index 1d2e0f73b0..923e285cdc 100644 --- a/source/java/org/alfresco/util/schemacomp/XMLToSchemaTest.java +++ b/source/java/org/alfresco/util/schemacomp/XMLToSchemaTest.java @@ -81,18 +81,21 @@ public class XMLToSchemaTest assertEquals("NUMBER(10)", table.getColumns().get(0).getType()); assertEquals(false, table.getColumns().get(0).isNullable()); assertEquals(1, table.getColumns().get(0).getOrder()); + assertEquals(true, table.getColumns().get(0).isAutoIncrement()); assertSame("Wrong or no parent set", table, table.getColumns().get(1).getParent()); assertEquals("nodeRef", table.getColumns().get(1).getName()); assertEquals("VARCHAR2(200)", table.getColumns().get(1).getType()); assertEquals(false, table.getColumns().get(1).isNullable()); assertEquals(3, table.getColumns().get(1).getOrder()); + assertEquals(false, table.getColumns().get(1).isAutoIncrement()); assertSame("Wrong or no parent set", table, table.getColumns().get(2).getParent()); assertEquals("name", table.getColumns().get(2).getName()); assertEquals("VARCHAR2(150)", table.getColumns().get(2).getType()); assertEquals(true, table.getColumns().get(2).isNullable()); assertEquals(2, table.getColumns().get(2).getOrder()); + assertEquals(false, table.getColumns().get(2).isAutoIncrement()); assertSame("Wrong or no parent set", table, table.getPrimaryKey().getParent()); assertEquals("pk_node", table.getPrimaryKey().getName()); diff --git a/source/java/org/alfresco/util/schemacomp/model/Column.java b/source/java/org/alfresco/util/schemacomp/model/Column.java index 28e41fbcf1..34597d00e1 100644 --- a/source/java/org/alfresco/util/schemacomp/model/Column.java +++ b/source/java/org/alfresco/util/schemacomp/model/Column.java @@ -32,6 +32,7 @@ public class Column extends AbstractDbObject { private String type; private boolean nullable; + private boolean autoIncrement; private int order; @@ -104,11 +105,30 @@ public class Column extends AbstractDbObject this.order = order; } + + /** + * @return whether the column has an auto-increment flag set. + */ + public boolean isAutoIncrement() + { + return this.autoIncrement; + } + + /** + * @param autoIncrement whether this column has the auto-increment flag set. + */ + public void setAutoIncrement(boolean autoIncrement) + { + this.autoIncrement = autoIncrement; + } + + @Override public int hashCode() { final int prime = 31; int result = super.hashCode(); + result = prime * result + (this.autoIncrement ? 1231 : 1237); result = prime * result + (this.nullable ? 1231 : 1237); result = prime * result + this.order; result = prime * result + ((this.type == null) ? 0 : this.type.hashCode()); @@ -122,6 +142,7 @@ public class Column extends AbstractDbObject if (!super.equals(obj)) return false; if (getClass() != obj.getClass()) return false; Column other = (Column) obj; + if (this.autoIncrement != other.autoIncrement) return false; if (this.nullable != other.nullable) return false; if (this.order != other.order) return false; if (this.type == null) @@ -138,15 +159,18 @@ public class Column extends AbstractDbObject DbProperty thisTypeProp = new DbProperty(this, "type"); DbProperty thisNullableProp = new DbProperty(this, "nullable"); DbProperty thisOrderProp = new DbProperty(this, "order"); + DbProperty thisAutoIncProp = new DbProperty(this, "autoIncrement"); Column thatColumn = (Column) right; DbProperty thatTypeProp = new DbProperty(thatColumn, "type"); DbProperty thatNullableProp = new DbProperty(thatColumn, "nullable"); DbProperty thatOrderProp = new DbProperty(thatColumn, "order"); + DbProperty thatAutoIncProp = new DbProperty(thatColumn, "autoIncrement"); comparisonUtils.compareSimple(thisTypeProp, thatTypeProp, ctx); comparisonUtils.compareSimple(thisNullableProp, thatNullableProp, ctx); comparisonUtils.compareSimple(thisOrderProp, thatOrderProp, ctx); + comparisonUtils.compareSimple(thisAutoIncProp, thatAutoIncProp, ctx); } @Override diff --git a/source/java/org/alfresco/util/schemacomp/model/ColumnTest.java b/source/java/org/alfresco/util/schemacomp/model/ColumnTest.java index f564bf75cd..4b4ea36dc6 100644 --- a/source/java/org/alfresco/util/schemacomp/model/ColumnTest.java +++ b/source/java/org/alfresco/util/schemacomp/model/ColumnTest.java @@ -68,6 +68,10 @@ public class ColumnTest extends DbObjectTestBase DbProperty thisOrderProp = new DbProperty(thisColumn, "order"); DbProperty thatOrderProp = new DbProperty(thatColumn, "order"); inOrder.verify(comparisonUtils).compareSimple(thisOrderProp, thatOrderProp, ctx); + + DbProperty thisAutoIncProp = new DbProperty(thisColumn, "autoIncrement"); + DbProperty thatAutoIncProp = new DbProperty(thatColumn, "autoIncrement"); + inOrder.verify(comparisonUtils).compareSimple(thisAutoIncProp, thatAutoIncProp, ctx); } @Test diff --git a/source/java/org/alfresco/util/schemacomp/test/exportdb/AbstractExportTester.java b/source/java/org/alfresco/util/schemacomp/test/exportdb/AbstractExportTester.java index 8c8b76ba80..d313ba6079 100644 --- a/source/java/org/alfresco/util/schemacomp/test/exportdb/AbstractExportTester.java +++ b/source/java/org/alfresco/util/schemacomp/test/exportdb/AbstractExportTester.java @@ -22,6 +22,7 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; import org.alfresco.util.schemacomp.ExportDb; +import org.alfresco.util.schemacomp.ExportDbTest; import org.alfresco.util.schemacomp.model.DbObject; import org.alfresco.util.schemacomp.model.Schema; import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; @@ -30,6 +31,7 @@ import org.springframework.transaction.PlatformTransactionManager; /** * Base class for DBMS-specific ExportDb tests. * + * @see ExportDbTest * @author Matt Ward */ public abstract class AbstractExportTester diff --git a/source/java/org/alfresco/util/schemacomp/test/exportdb/MySQLDialectExportTester.java b/source/java/org/alfresco/util/schemacomp/test/exportdb/MySQLDialectExportTester.java index 8427662aff..419a2e39be 100644 --- a/source/java/org/alfresco/util/schemacomp/test/exportdb/MySQLDialectExportTester.java +++ b/source/java/org/alfresco/util/schemacomp/test/exportdb/MySQLDialectExportTester.java @@ -25,6 +25,7 @@ import static org.junit.Assert.assertSame; import java.util.Iterator; import org.alfresco.util.schemacomp.ExportDb; +import org.alfresco.util.schemacomp.ExportDbTest; import org.alfresco.util.schemacomp.model.Column; import org.alfresco.util.schemacomp.model.DbObject; import org.alfresco.util.schemacomp.model.ForeignKey; @@ -41,6 +42,7 @@ import org.springframework.transaction.support.TransactionTemplate; /** * MySQL specific test for the ExportDb class. * + * @see ExportDbTest * @author Matt Ward */ public class MySQLDialectExportTester extends AbstractExportTester @@ -96,6 +98,7 @@ public class MySQLDialectExportTester extends AbstractExportTester assertEquals("bigint", col.getType()); assertEquals(false, col.isNullable()); assertEquals(1, col.getOrder()); + assertEquals(false, col.isAutoIncrement()); col = colIt.next(); assertSame("Incorrect parent or no parent set", otherTable, col.getParent()); @@ -164,6 +167,7 @@ public class MySQLDialectExportTester extends AbstractExportTester assertEquals("bigint", col.getType()); assertEquals(false, col.isNullable()); assertEquals(1, col.getOrder()); + assertEquals(true, col.isAutoIncrement()); col = colIt.next(); assertSame("Incorrect parent or no parent set", exampleTable, col.getParent()); @@ -271,7 +275,7 @@ public class MySQLDialectExportTester extends AbstractExportTester "CREATE TABLE export_test_other" + " (" + - " id BIGINT NOT NULL AUTO_INCREMENT," + + " id BIGINT NOT NULL," + " version BIGINT NOT NULL," + " ex_id BIGINT NOT NULL," + " local_name VARCHAR(200) NOT NULL," + diff --git a/source/java/org/alfresco/util/schemacomp/test/exportdb/PostgreSQLDialectExportTester.java b/source/java/org/alfresco/util/schemacomp/test/exportdb/PostgreSQLDialectExportTester.java index 06007e583f..78ab45d207 100644 --- a/source/java/org/alfresco/util/schemacomp/test/exportdb/PostgreSQLDialectExportTester.java +++ b/source/java/org/alfresco/util/schemacomp/test/exportdb/PostgreSQLDialectExportTester.java @@ -25,6 +25,7 @@ import static org.junit.Assert.assertSame; import java.util.Iterator; import org.alfresco.util.schemacomp.ExportDb; +import org.alfresco.util.schemacomp.ExportDbTest; import org.alfresco.util.schemacomp.model.Column; import org.alfresco.util.schemacomp.model.DbObject; import org.alfresco.util.schemacomp.model.ForeignKey; @@ -42,6 +43,7 @@ import org.springframework.transaction.support.TransactionTemplate; /** * Test implementation for the PostgreSQL database dialect. * + * @see ExportDbTest * @author Matt Ward */ public class PostgreSQLDialectExportTester extends AbstractExportTester diff --git a/source/test-resources/schemacomp/xml_to_schema_test.xml b/source/test-resources/schemacomp/xml_to_schema_test.xml index 2ba5e81869..2eeb2c3ce0 100644 --- a/source/test-resources/schemacomp/xml_to_schema_test.xml +++ b/source/test-resources/schemacomp/xml_to_schema_test.xml @@ -9,6 +9,7 @@ NUMBER(10) false + true VARCHAR2(200)