diff --git a/pom.xml b/pom.xml index 3b04538..266c9be 100644 --- a/pom.xml +++ b/pom.xml @@ -1,12 +1,10 @@ - + + 4.0.0 de.kreth databasedefinition - 0.0.7-SNAPSHOT + 0.0.8-SNAPSHOT DatabaseDefinition Database creation and definition framework @@ -27,13 +25,6 @@ true - - maven-release-plugin - 2.5.2 - - - - @@ -61,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 - \ No newline at end of file + 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 e11c6b5..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,8 +108,18 @@ 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"); @@ -125,53 +136,51 @@ 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) { - assert(current != null); + public static String createSqlAddColumns(TableDefinition current, + ColumnDefinition... columnsToAdd) { + assert (current != null); StringBuilder sql = new StringBuilder(); sql.append("ALTER TABLE ").append(current.getTableName()); @@ -183,19 +192,22 @@ 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()); } } sql.append(";"); return sql.toString(); } - - public static String createSqlDropColumns(TableDefinition current, ColumnDefinition... columnsToDrop) { - assert(current != null); + + public static String createSqlDropColumns(TableDefinition current, + ColumnDefinition... columnsToDrop) { + assert (current != null); StringBuilder sql = new StringBuilder(); sql.append("ALTER TABLE ").append(current.getTableName()); 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..cb23824 100644 --- a/src/test/java/de/kreth/dbmanager/DbManagerCreateTablesTest.java +++ b/src/test/java/de/kreth/dbmanager/DbManagerCreateTablesTest.java @@ -1,69 +1,90 @@ 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 test2ColumnsUnique() { + 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); + String sql = DbManager.createUniqueConstraint(def, unique); + + assertNotNull(sql); + + String expected = "ALTER TABLE testtable ADD CONSTRAINT UNIQUE_name_theDate UNIQUE (name, theDate)"; + + assertEquals(expected, sql); + } + + @Before + public void setUp() throws Exception { + } } - -//~ Formatted by Jindent --- http://www.jindent.com +// ~ Formatted by Jindent --- http://www.jindent.com