Prepared DbManager for HSQLDB as alternative to mysql

master
Markus Kreth 8 years ago
parent 6e09caf428
commit 5e08a7e13a
  1. 13
      src/main/java/de/kreth/dbmanager/DatabaseType.java
  2. 34
      src/main/java/de/kreth/dbmanager/DbManager.java
  3. 18
      src/main/java/de/kreth/dbmanager/TableDefinition.java
  4. 19
      src/test/java/de/kreth/dbmanager/DbManagerAddColumnTest.java
  5. 66
      src/test/java/de/kreth/dbmanager/DbManagerCreateTablesTest.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;
}
}

@ -20,7 +20,8 @@ public class DbManager {
private int newVersion;
private List<Version> versions;
public DbManager(Collection<TableDefinition> tables, List<Version> versions, Database db, int newVersion) {
public DbManager(Collection<TableDefinition> tables, List<Version> versions,
Database db, int newVersion) {
tableDefinitions = new HashMap<String, TableDefinition>();
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,18 +136,14 @@ 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();
}
@ -152,7 +151,8 @@ public class DbManager {
switch (col.getType()) {
case BLOB :
throw new IllegalArgumentException("Column Type " + col.getType() + " not supported");
throw new IllegalArgumentException(
"Column Type " + col.getType() + " not supported");
case BOOLEAN :
sql.append(col.getType().name());
break;
@ -178,7 +178,8 @@ public class DbManager {
}
}
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();

@ -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<ColumnDefinition> columns;
private Collection<UniqueConstraint> unique;
public TableDefinition(String tableName, List<ColumnDefinition> columns, UniqueConstraint... unique) {
public TableDefinition(String tableName, DatabaseType type,
List<ColumnDefinition> 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<ColumnDefinition> def = new ArrayList<ColumnDefinition>();
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<UniqueConstraint> 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())) + "]";
}
}

@ -17,21 +17,28 @@ public class DbManagerAddColumnTest {
@Test
public void testAddOneColumn() {
TableDefinition def = new TableDefinition("testtable", new ArrayList<ColumnDefinition>());
TableDefinition def = new TableDefinition("testtable",
DatabaseType.MYSQL, new ArrayList<ColumnDefinition>());
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<ColumnDefinition>());
TableDefinition def = new TableDefinition("testtable",
DatabaseType.MYSQL, new ArrayList<ColumnDefinition>());
List<ColumnDefinition> columns = new ArrayList<ColumnDefinition>();
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);

@ -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<ColumnDefinition> columns = new ArrayList<ColumnDefinition>();
TableDefinition def = new TableDefinition("testtable", columns);
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);
assertEquals(
"CREATE TABLE testtable (\n"
+ " id INTEGER primary key AUTO_INCREMENT\n" + ")",
sql);
}
@Test
public void testCreateTable2Columns() {
List<ColumnDefinition> columns = new ArrayList<ColumnDefinition>();
columns.add(new ColumnDefinition(DataType.VARCHAR100, "name", " NOT NULL"));
columns.add(
new ColumnDefinition(DataType.VARCHAR100, "name", " NOT NULL"));
columns.add(new ColumnDefinition(DataType.DATETIME, "theDate"));
TableDefinition def = new TableDefinition("testtable", columns);
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);
+ " id INTEGER primary key AUTO_INCREMENT,\n"
+ " name VARCHAR(100) NOT NULL,\n" + " theDate DATETIME\n"
+ ")", sql);
}
@Test
public void testCreateTable2ColumnsOnHsqlDb() {
List<ColumnDefinition> columns = new ArrayList<ColumnDefinition>();
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<ColumnDefinition> columns = new ArrayList<ColumnDefinition>();
columns.add(new ColumnDefinition(DataType.VARCHAR100, "name", " NOT NULL"));
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);
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"
+ ")";
+ " 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 {}
public void setUp() throws Exception {
}
}
// ~ Formatted by Jindent --- http://www.jindent.com

Loading…
Cancel
Save