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