(Unique) constraint for TableDefinition is generated

master
Markus Kreth 8 years ago
parent c47fca8f6b
commit d9a550013f
  1. 5
      src/main/java/de/kreth/dbmanager/DbManager.java
  2. 14
      src/main/java/de/kreth/dbmanager/TableDefinition.java
  3. 19
      src/main/java/de/kreth/dbmanager/UniqueConstraint.java
  4. 71
      src/test/java/de/kreth/dbmanager/DbManagerCreateTablesTest.java

@ -129,7 +129,12 @@ public class DbManager {
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();

@ -1,6 +1,7 @@
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,17 +17,18 @@ import java.util.stream.Collectors;
*/
public class TableDefinition {
public static final String COLUMN_ID_NAME = "_id";
private String tableName;
private Collection<ColumnDefinition> columns;
private final String tableName;
private final Collection<ColumnDefinition> columns;
private Collection<UniqueConstraint> unique;
public TableDefinition(String tableName, Collection<ColumnDefinition> columns) {
super();
public TableDefinition(String tableName, List<ColumnDefinition> columns, UniqueConstraint... unique) {
this.tableName = tableName;
ColumnDefinition id = new ColumnDefinition(DataType.INTEGER, COLUMN_ID_NAME, "primary key AUTO_INCREMENT");
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() {
@ -37,6 +39,10 @@ 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())) + "]";

@ -0,0 +1,19 @@
package de.kreth.dbmanager;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class UniqueConstraint {
private List<String> names = new ArrayList<>();
public UniqueConstraint(ColumnDefinition... defs) {
for(ColumnDefinition c: defs) {
names.add(c.getColumnName());
}
}
public List<String> getNames() {
return Collections.unmodifiableList(names);
}
}

@ -1,28 +1,69 @@
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"));
@Before
public void setUp() throws Exception {
}
TableDefinition def = new TableDefinition("testtable", columns);
String sql = DbManager.createSqlStatement(def);
@Test
public void testCreateSqlStatement() {
List<ColumnDefinition> columns = new ArrayList<ColumnDefinition>();
TableDefinition def = new TableDefinition("testtable", columns);
String sql = DbManager.createSqlStatement(def);
assertNotNull(sql);
System.out.println(sql);
assertEquals("CREATE TABLE testtable (\n" + " _id INTEGER primary key AUTO_INCREMENT\n" + ")", sql);
}
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 {}
}
//~ Formatted by Jindent --- http://www.jindent.com

Loading…
Cancel
Save