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)