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