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)