From 447e3d3226ad6c6dbbd64d1fc641f4587fe59bab Mon Sep 17 00:00:00 2001 From: Markus Kreth Date: Mon, 25 Dec 2017 19:04:29 +0100 Subject: [PATCH 1/6] public Alter Table Add Unique --- .../java/de/kreth/dbmanager/DbManager.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/kreth/dbmanager/DbManager.java b/src/main/java/de/kreth/dbmanager/DbManager.java index e11c6b5..8f685d3 100644 --- a/src/main/java/de/kreth/dbmanager/DbManager.java +++ b/src/main/java/de/kreth/dbmanager/DbManager.java @@ -107,8 +107,16 @@ public class DbManager { } } + public static String createUniqueConstraint(TableDefinition def, UniqueConstraint constraint) { + StringBuilder sql = new StringBuilder("ALTER TABLE "); + sql.append(def.getTableName()).append(" ADD CONSTRAINT UNIQUE_").append(String.join("_", constraint.getNames())) + .append(" UNIQUE ("); + sql.append(String.join(", ", constraint.getNames())).append(")"); + return sql.toString(); + } + public static String createSqlStatement(TableDefinition def) { - assert(def != null); + assert (def != null); StringBuilder sql = new StringBuilder(); sql.append("CREATE TABLE ").append(def.getTableName()).append(" (\n"); @@ -129,7 +137,7 @@ public class DbManager { sql.append(" ").append(col.getColumnParameters()); } } - for(UniqueConstraint uni: def.getUnique()) { + for (UniqueConstraint uni : def.getUnique()) { sql.append(",\n\tCONSTRAINT UNIQUE ("); sql.append(String.join(",", uni.getNames())); @@ -171,7 +179,7 @@ public class DbManager { } public static String createSqlAddColumns(TableDefinition current, ColumnDefinition... columnsToAdd) { - assert(current != null); + assert (current != null); StringBuilder sql = new StringBuilder(); sql.append("ALTER TABLE ").append(current.getTableName()); @@ -193,9 +201,9 @@ public class DbManager { sql.append(";"); return sql.toString(); } - + public static String createSqlDropColumns(TableDefinition current, ColumnDefinition... columnsToDrop) { - assert(current != null); + assert (current != null); StringBuilder sql = new StringBuilder(); sql.append("ALTER TABLE ").append(current.getTableName()); From 7d27c085056fa38c636271f42aadb536dd4b8896 Mon Sep 17 00:00:00 2001 From: Jenkins Job Date: Tue, 26 Dec 2017 01:38:09 +0100 Subject: [PATCH 2/6] [artifactory-release] Release version 0.0.7 --- pom.xml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index e8085c7..b30f5d2 100644 --- a/pom.xml +++ b/pom.xml @@ -1,12 +1,10 @@ - + + 4.0.0 de.kreth databasedefinition - 0.0.7-SNAPSHOT + 0.0.7 DatabaseDefinition Database creation and definition framework @@ -63,4 +61,4 @@ scm:git:https://github.com/markuskreth/databasedefinition.git databasedefinition-0.0.4 - \ No newline at end of file + From fd8fce18a10c3467825902fb915190656fc7f6bb Mon Sep 17 00:00:00 2001 From: "markus.kreth@web.de" Date: Tue, 26 Dec 2017 02:00:33 +0100 Subject: [PATCH 3/6] [artifactory-release] Next development version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b30f5d2..5c8c92e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 de.kreth databasedefinition - 0.0.7 + 0.0.8-SNAPSHOT DatabaseDefinition Database creation and definition framework From 6e09caf428014964b325aefda930e2ff92f8cf9b Mon Sep 17 00:00:00 2001 From: Markus Kreth Date: Tue, 26 Dec 2017 02:09:32 +0100 Subject: [PATCH 4/6] Auto stash before merge of "master" and "origin/master" --- pom.xml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/pom.xml b/pom.xml index 5c8c92e..99abeb6 100644 --- a/pom.xml +++ b/pom.xml @@ -25,13 +25,6 @@ true - - maven-release-plugin - 2.5.2 - - - - @@ -59,6 +52,5 @@ https://github.com/markuskreth/databasedefinition scm:git:https://github.com/markuskreth/databasedefinition.git scm:git:https://github.com/markuskreth/databasedefinition.git - databasedefinition-0.0.4 From 5e08a7e13ac4aef8eeed370105f5b330d343f666 Mon Sep 17 00:00:00 2001 From: Markus Kreth Date: Tue, 26 Dec 2017 19:27:43 +0100 Subject: [PATCH 5/6] Prepared DbManager for HSQLDB as alternative to mysql --- .../java/de/kreth/dbmanager/DatabaseType.java | 13 ++ .../java/de/kreth/dbmanager/DbManager.java | 80 +++++----- .../de/kreth/dbmanager/TableDefinition.java | 18 +-- .../dbmanager/DbManagerAddColumnTest.java | 19 ++- .../dbmanager/DbManagerCreateTablesTest.java | 140 ++++++++++-------- 5 files changed, 157 insertions(+), 113 deletions(-) create mode 100644 src/main/java/de/kreth/dbmanager/DatabaseType.java diff --git a/src/main/java/de/kreth/dbmanager/DatabaseType.java b/src/main/java/de/kreth/dbmanager/DatabaseType.java new file mode 100644 index 0000000..2835af4 --- /dev/null +++ b/src/main/java/de/kreth/dbmanager/DatabaseType.java @@ -0,0 +1,13 @@ +package de.kreth.dbmanager; + +public enum DatabaseType { + + MYSQL("primary key AUTO_INCREMENT"), HSQLDB("IDENTITY"); + + public final String autoIncrementIdType; + + private DatabaseType(String autoIncrementIdType) { + this.autoIncrementIdType = autoIncrementIdType; + } + +} diff --git a/src/main/java/de/kreth/dbmanager/DbManager.java b/src/main/java/de/kreth/dbmanager/DbManager.java index 8f685d3..1493b35 100644 --- a/src/main/java/de/kreth/dbmanager/DbManager.java +++ b/src/main/java/de/kreth/dbmanager/DbManager.java @@ -20,7 +20,8 @@ public class DbManager { private int newVersion; private List versions; - public DbManager(Collection tables, List versions, Database db, int newVersion) { + public DbManager(Collection tables, List versions, + Database db, int newVersion) { tableDefinitions = new HashMap(); this.db = db; this.newVersion = newVersion; @@ -107,9 +108,11 @@ public class DbManager { } } - public static String createUniqueConstraint(TableDefinition def, UniqueConstraint constraint) { + public static String createUniqueConstraint(TableDefinition def, + UniqueConstraint constraint) { StringBuilder sql = new StringBuilder("ALTER TABLE "); - sql.append(def.getTableName()).append(" ADD CONSTRAINT UNIQUE_").append(String.join("_", constraint.getNames())) + sql.append(def.getTableName()).append(" ADD CONSTRAINT UNIQUE_") + .append(String.join("_", constraint.getNames())) .append(" UNIQUE ("); sql.append(String.join(", ", constraint.getNames())).append(")"); return sql.toString(); @@ -133,52 +136,50 @@ public class DbManager { appendType(sql, col); - if (col.getColumnParameters() != null && !col.getColumnParameters().isEmpty()) { + if (col.getColumnParameters() != null + && !col.getColumnParameters().isEmpty()) { sql.append(" ").append(col.getColumnParameters()); } } - for (UniqueConstraint uni : def.getUnique()) { - - sql.append(",\n\tCONSTRAINT UNIQUE ("); - sql.append(String.join(",", uni.getNames())); - sql.append(")"); - } sql.append("\n"); sql.append(")"); + return sql.toString(); } private static void appendType(StringBuilder sql, ColumnDefinition col) { switch (col.getType()) { - case BLOB: - throw new IllegalArgumentException("Column Type " + col.getType() + " not supported"); - case BOOLEAN: - sql.append(col.getType().name()); - break; - case DATETIME: - sql.append("DATETIME"); - break; - case INTEGER: - sql.append(col.getType().name()); - break; - case REAL: - sql.append("DOUBLE"); - break; - case VARCHAR100: - sql.append("VARCHAR(100)"); - break; - case VARCHAR25: - sql.append("VARCHAR(25)"); - break; - case TEXT: - case VARCHAR255: - sql.append("VARCHAR(255)"); - break; + case BLOB : + throw new IllegalArgumentException( + "Column Type " + col.getType() + " not supported"); + case BOOLEAN : + sql.append(col.getType().name()); + break; + case DATETIME : + sql.append("DATETIME"); + break; + case INTEGER : + sql.append(col.getType().name()); + break; + case REAL : + sql.append("DOUBLE"); + break; + case VARCHAR100 : + sql.append("VARCHAR(100)"); + break; + case VARCHAR25 : + sql.append("VARCHAR(25)"); + break; + case TEXT : + case VARCHAR255 : + sql.append("VARCHAR(255)"); + break; } } - public static String createSqlAddColumns(TableDefinition current, ColumnDefinition... columnsToAdd) { + public static String createSqlAddColumns(TableDefinition current, + ColumnDefinition... columnsToAdd) { assert (current != null); StringBuilder sql = new StringBuilder(); sql.append("ALTER TABLE ").append(current.getTableName()); @@ -191,10 +192,12 @@ public class DbManager { } first = false; - sql.append("\n\tADD COLUMN ").append(col.getColumnName()).append(" "); + sql.append("\n\tADD COLUMN ").append(col.getColumnName()) + .append(" "); appendType(sql, col); - if (col.getColumnParameters() != null && !col.getColumnParameters().isEmpty()) { + if (col.getColumnParameters() != null + && !col.getColumnParameters().isEmpty()) { sql.append(" ").append(col.getColumnParameters()); } } @@ -202,7 +205,8 @@ public class DbManager { return sql.toString(); } - public static String createSqlDropColumns(TableDefinition current, ColumnDefinition... columnsToDrop) { + public static String createSqlDropColumns(TableDefinition current, + ColumnDefinition... columnsToDrop) { assert (current != null); StringBuilder sql = new StringBuilder(); diff --git a/src/main/java/de/kreth/dbmanager/TableDefinition.java b/src/main/java/de/kreth/dbmanager/TableDefinition.java index 7888dfd..7f9eb5e 100644 --- a/src/main/java/de/kreth/dbmanager/TableDefinition.java +++ b/src/main/java/de/kreth/dbmanager/TableDefinition.java @@ -1,7 +1,6 @@ package de.kreth.dbmanager; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -16,19 +15,19 @@ import java.util.stream.Collectors; * */ public class TableDefinition { - public static final String COLUMN_ID_NAME = "_id"; + public static final String COLUMN_ID_NAME = "id"; private final String tableName; private final Collection columns; - private Collection unique; - public TableDefinition(String tableName, List columns, UniqueConstraint... unique) { + public TableDefinition(String tableName, DatabaseType type, + List columns) { this.tableName = tableName; - ColumnDefinition id = new ColumnDefinition(DataType.INTEGER, COLUMN_ID_NAME, "primary key AUTO_INCREMENT"); + ColumnDefinition id = new ColumnDefinition(DataType.INTEGER, + COLUMN_ID_NAME, type.autoIncrementIdType); List def = new ArrayList(); def.add(id); def.addAll(columns); this.columns = Collections.unmodifiableCollection(def); - this.unique = Collections.unmodifiableCollection(Arrays.asList(unique)); } public String getTableName() { @@ -39,12 +38,9 @@ public class TableDefinition { return columns; } - public Collection getUnique() { - return unique; - } - @Override public String toString() { - return tableName + "[" + String.join(",", columns.stream().map(m -> m.toString()).collect(Collectors.toList())) + "]"; + return tableName + "[" + String.join(",", columns.stream() + .map(m -> m.toString()).collect(Collectors.toList())) + "]"; } } diff --git a/src/test/java/de/kreth/dbmanager/DbManagerAddColumnTest.java b/src/test/java/de/kreth/dbmanager/DbManagerAddColumnTest.java index fc3d830..6270cfe 100644 --- a/src/test/java/de/kreth/dbmanager/DbManagerAddColumnTest.java +++ b/src/test/java/de/kreth/dbmanager/DbManagerAddColumnTest.java @@ -17,21 +17,28 @@ public class DbManagerAddColumnTest { @Test public void testAddOneColumn() { - TableDefinition def = new TableDefinition("testtable", new ArrayList()); + TableDefinition def = new TableDefinition("testtable", + DatabaseType.MYSQL, new ArrayList()); - String sql = DbManager.createSqlAddColumns(def, new ColumnDefinition(DataType.DATETIME, "deleted", " DEFAULT null")); - assertEquals("ALTER TABLE testtable\n\tADD COLUMN deleted DATETIME DEFAULT null;", sql); + String sql = DbManager.createSqlAddColumns(def, new ColumnDefinition( + DataType.DATETIME, "deleted", " DEFAULT null")); + assertEquals( + "ALTER TABLE testtable\n\tADD COLUMN deleted DATETIME DEFAULT null;", + sql); } @Test public void testAddTwoColumns() { - TableDefinition def = new TableDefinition("testtable", new ArrayList()); + TableDefinition def = new TableDefinition("testtable", + DatabaseType.MYSQL, new ArrayList()); List columns = new ArrayList(); - columns.add(new ColumnDefinition(DataType.DATETIME, "deleted", " DEFAULT null")); + columns.add(new ColumnDefinition(DataType.DATETIME, "deleted", + " DEFAULT null")); columns.add(new ColumnDefinition(DataType.VARCHAR25, "theType")); - String sql = DbManager.createSqlAddColumns(def, columns.toArray(new ColumnDefinition[]{})); + String sql = DbManager.createSqlAddColumns(def, + columns.toArray(new ColumnDefinition[]{})); assertEquals( "ALTER TABLE testtable\n\tADD COLUMN deleted DATETIME DEFAULT null,\n\tADD COLUMN theType VARCHAR(25);", sql); diff --git a/src/test/java/de/kreth/dbmanager/DbManagerCreateTablesTest.java b/src/test/java/de/kreth/dbmanager/DbManagerCreateTablesTest.java index 1538207..89e4a58 100644 --- a/src/test/java/de/kreth/dbmanager/DbManagerCreateTablesTest.java +++ b/src/test/java/de/kreth/dbmanager/DbManagerCreateTablesTest.java @@ -1,69 +1,93 @@ package de.kreth.dbmanager; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + import java.util.ArrayList; import java.util.List; import org.junit.Before; import org.junit.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - public class DbManagerCreateTablesTest { - @Test - public void testCreateSqlStatement() { - List columns = new ArrayList(); - TableDefinition def = new TableDefinition("testtable", columns); - String sql = DbManager.createSqlStatement(def); - - assertNotNull(sql); - assertEquals("CREATE TABLE testtable (\n" + " _id INTEGER primary key AUTO_INCREMENT\n" + ")", sql); - } - - @Test - public void testCreateTable2Columns() { - List columns = new ArrayList(); - - columns.add(new ColumnDefinition(DataType.VARCHAR100, "name", " NOT NULL")); - columns.add(new ColumnDefinition(DataType.DATETIME, "theDate")); - - TableDefinition def = new TableDefinition("testtable", columns); - String sql = DbManager.createSqlStatement(def); - - assertNotNull(sql); - assertEquals("CREATE TABLE testtable (\n" - + " _id INTEGER primary key AUTO_INCREMENT,\n" - + " name VARCHAR(100) NOT NULL,\n" - + " theDate DATETIME\n" + ")", - sql); - } - - @Test - public void testCreateTable2ColumnsUnique() { - List columns = new ArrayList(); - - columns.add(new ColumnDefinition(DataType.VARCHAR100, "name", " NOT NULL")); - columns.add(new ColumnDefinition(DataType.DATETIME, "theDate")); - - UniqueConstraint unique = new UniqueConstraint(columns.get(0), columns.get(1)); - TableDefinition def = new TableDefinition("testtable", columns, unique); - String sql = DbManager.createSqlStatement(def); - - assertNotNull(sql); - - String expected = "CREATE TABLE testtable (\n" - + " _id INTEGER primary key AUTO_INCREMENT,\n" - + " name VARCHAR(100) NOT NULL,\n" - + " theDate DATETIME,\n" - + " CONSTRAINT UNIQUE (name,theDate)\n" - + ")"; - - assertEquals(expected, sql); - } - - @Before - public void setUp() throws Exception {} + @Test + public void testCreateSqlStatement() { + List columns = new ArrayList(); + TableDefinition def = new TableDefinition("testtable", + DatabaseType.MYSQL, columns); + String sql = DbManager.createSqlStatement(def); + + assertNotNull(sql); + assertEquals( + "CREATE TABLE testtable (\n" + + " id INTEGER primary key AUTO_INCREMENT\n" + ")", + sql); + } + + @Test + public void testCreateTable2Columns() { + List columns = new ArrayList(); + + columns.add( + new ColumnDefinition(DataType.VARCHAR100, "name", " NOT NULL")); + columns.add(new ColumnDefinition(DataType.DATETIME, "theDate")); + + TableDefinition def = new TableDefinition("testtable", + DatabaseType.MYSQL, columns); + String sql = DbManager.createSqlStatement(def); + + assertNotNull(sql); + assertEquals("CREATE TABLE testtable (\n" + + " id INTEGER primary key AUTO_INCREMENT,\n" + + " name VARCHAR(100) NOT NULL,\n" + " theDate DATETIME\n" + + ")", sql); + } + + @Test + public void testCreateTable2ColumnsOnHsqlDb() { + List columns = new ArrayList(); + + columns.add( + new ColumnDefinition(DataType.VARCHAR100, "name", " NOT NULL")); + columns.add(new ColumnDefinition(DataType.DATETIME, "theDate")); + + TableDefinition def = new TableDefinition("testtable", + DatabaseType.HSQLDB, columns); + String sql = DbManager.createSqlStatement(def); + + assertNotNull(sql); + assertEquals("CREATE TABLE testtable (\n" + " id INTEGER IDENTITY,\n" + + " name VARCHAR(100) NOT NULL,\n" + " theDate DATETIME\n" + + ")", sql); + } + + @Test + public void testCreateTable2ColumnsUnique() { + List columns = new ArrayList(); + + columns.add( + new ColumnDefinition(DataType.VARCHAR100, "name", " NOT NULL")); + columns.add(new ColumnDefinition(DataType.DATETIME, "theDate")); + + UniqueConstraint unique = new UniqueConstraint(columns.get(0), + columns.get(1)); + TableDefinition def = new TableDefinition("testtable", + DatabaseType.MYSQL, columns, unique); + String sql = DbManager.createSqlStatement(def); + + assertNotNull(sql); + + String expected = "CREATE TABLE testtable (\n" + + " id INTEGER primary key AUTO_INCREMENT,\n" + + " name VARCHAR(100) NOT NULL,\n" + " theDate DATETIME,\n" + + " CONSTRAINT UNIQUE (name,theDate)\n" + ")"; + + assertEquals(expected, sql); + } + + @Before + public void setUp() throws Exception { + } } - -//~ Formatted by Jindent --- http://www.jindent.com +// ~ Formatted by Jindent --- http://www.jindent.com From 835348807f155544b3fea2a42552dfe3098921b0 Mon Sep 17 00:00:00 2001 From: Markus Kreth Date: Wed, 27 Dec 2017 03:17:22 +0100 Subject: [PATCH 6/6] Test respecting Unique constraint not part of table Creation --- .../de/kreth/dbmanager/DbManagerCreateTablesTest.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/test/java/de/kreth/dbmanager/DbManagerCreateTablesTest.java b/src/test/java/de/kreth/dbmanager/DbManagerCreateTablesTest.java index 89e4a58..cb23824 100644 --- a/src/test/java/de/kreth/dbmanager/DbManagerCreateTablesTest.java +++ b/src/test/java/de/kreth/dbmanager/DbManagerCreateTablesTest.java @@ -62,7 +62,7 @@ public class DbManagerCreateTablesTest { } @Test - public void testCreateTable2ColumnsUnique() { + public void test2ColumnsUnique() { List columns = new ArrayList(); columns.add( @@ -72,15 +72,12 @@ public class DbManagerCreateTablesTest { UniqueConstraint unique = new UniqueConstraint(columns.get(0), columns.get(1)); TableDefinition def = new TableDefinition("testtable", - DatabaseType.MYSQL, columns, unique); - String sql = DbManager.createSqlStatement(def); + DatabaseType.MYSQL, columns); + String sql = DbManager.createUniqueConstraint(def, unique); assertNotNull(sql); - String expected = "CREATE TABLE testtable (\n" - + " id INTEGER primary key AUTO_INCREMENT,\n" - + " name VARCHAR(100) NOT NULL,\n" + " theDate DATETIME,\n" - + " CONSTRAINT UNIQUE (name,theDate)\n" + ")"; + String expected = "ALTER TABLE testtable ADD CONSTRAINT UNIQUE_name_theDate UNIQUE (name, theDate)"; assertEquals(expected, sql); }