Merge remote-tracking branch 'origin/master'

master
Markus Kreth 8 years ago
commit 476e73d012
  1. 16
      pom.xml
  2. 13
      src/main/java/de/kreth/dbmanager/DatabaseType.java
  3. 90
      src/main/java/de/kreth/dbmanager/DbManager.java
  4. 18
      src/main/java/de/kreth/dbmanager/TableDefinition.java
  5. 19
      src/test/java/de/kreth/dbmanager/DbManagerAddColumnTest.java
  6. 137
      src/test/java/de/kreth/dbmanager/DbManagerCreateTablesTest.java

@ -1,12 +1,10 @@
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.kreth</groupId>
<artifactId>databasedefinition</artifactId>
<version>0.0.7-SNAPSHOT</version>
<version>0.0.8-SNAPSHOT</version>
<name>DatabaseDefinition</name>
<description>Database creation and definition framework</description>
@ -27,13 +25,6 @@
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.2</version>
<!-- <configuration> -->
<!-- <goals>install</goals> -->
<!-- </configuration> -->
</plugin>
</plugins>
</build>
@ -61,6 +52,5 @@
<url>https://github.com/markuskreth/databasedefinition</url>
<connection>scm:git:https://github.com/markuskreth/databasedefinition.git</connection>
<developerConnection>scm:git:https://github.com/markuskreth/databasedefinition.git</developerConnection>
<tag>databasedefinition-0.0.4</tag>
</scm>
</project>

@ -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,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,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());
}
}
@ -194,8 +205,9 @@ public class DbManager {
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());

@ -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,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<ColumnDefinition> columns = new ArrayList<ColumnDefinition>();
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<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", 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<ColumnDefinition> columns = new ArrayList<ColumnDefinition>();
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<ColumnDefinition> columns = new ArrayList<ColumnDefinition>();
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<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.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<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 test2ColumnsUnique() {
List<ColumnDefinition> columns = new ArrayList<ColumnDefinition>();
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

Loading…
Cancel
Save