private void validate(String columnName) { long count = columns.stream().filter(f -> f.getColumnName().equals(columnName)).count(); if (count > 0) { throw new RuntimeException("Column " + columnName + " declared more than one time"); } }
private void writeHeader(BufferedWriter writer, List<ColumnInfo> columns) throws IOException { for (int i = 0; i < columns.size(); i++) { ColumnInfo info = columns.get(i); writer.write(csvEscaper.escapeAndDelimite(info.getColumnName())); if (i < columns.size() - 1) { writer.write(config.getFieldSeparator()); } } writer.write(config.getLineDelimiter()); }
public ColumnInfo findColumn(String columnName) { return entityInfo.getColumns().stream().filter(c -> c.getColumnName().equals(columnName)).findFirst().get(); }
private String getPrimaryKey(List<ColumnInfo> columns) { Optional<ColumnInfo> id = columns.stream().filter(col -> col.getFieldType().isIdentityId()).findFirst(); return id.map(col -> ", PRIMARY KEY (" + col.getColumnName() + ")").orElse(""); }
private String getPrimaryKey(List<ColumnInfo> columns) { Optional<ColumnInfo> id = columns.stream().filter(col -> col.getFieldType().isIdentityId()).findFirst(); return id.map(col -> ", PRIMARY KEY (`" + col.getColumnName() + "`)").orElse(""); }
@Override public String createTableSentence(EntityInfo entityInfo) { StringBuilder sb = new StringBuilder("CREATE TABLE "); sb.append(entityInfo.getTableName()); sb.append(" ("); List<ColumnInfo> columns = entityInfo.getColumns(); for (int i = 0; i < columns.size(); i++) { ColumnInfo columnInfo = columns.get(i); String dbType = getDbType(columnInfo.getFieldType()); if (dbType == null) { throw new RuntimeException("Type not found for " + columnInfo.getFieldType().getFieldType().name()); } sb.append(columnInfo.getColumnName()).append(" "); sb.append(dbType); if (columnInfo.getFieldType().isPrimitive()) { sb.append(" NOT NULL"); } if (i < columns.size() - 1) { sb.append(", "); } } sb.append(getPrimaryKey(columns)); sb.append(")"); return sb.toString(); }
@Test public void testAddMultipleFields() { EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addFields("name", "birthDay"); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo columnName = entityInfo.findColumn("name"); assertEquals("name", columnName.getColumnName()); assertEquals(simple.getName(), columnName.getAccessor().apply(simple)); ColumnInfo columnBirthday = entityInfo.findColumn("birthday"); assertEquals("birthday", columnBirthday.getColumnName()); assertEquals(simple.getBirthDay(), columnBirthday.getAccessor().apply(simple)); }
@Test public void testImplicitColumnName() { EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addField("birthDay"); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("birthday"); assertEquals("birthday", column.getColumnName()); assertEquals(simple.getBirthDay(), column.getAccessor().apply(simple)); }
@Test public void testImplicitColumnNameComposed() { EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addField("city.name"); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("city_name"); assertEquals("city_name", column.getColumnName()); assertEquals(city.getName(), column.getAccessor().apply(simple)); }
@Test public void testExplicitDateField() { EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addField("birthDay", "birthday", FieldTypeEnum.DATE); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("birthday"); assertEquals("birthday", column.getColumnName()); assertEquals(FieldTypeEnum.DATE, column.getFieldType().getFieldType()); assertFalse(column.getFieldType().isPrimitive()); assertEquals(simple.getBirthDay(), column.getAccessor().apply(simple)); }
@Test public void testExistentPathField() { EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addField("city.name", "city_name"); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("city_name"); assertEquals("city_name", column.getColumnName()); assertEquals(FieldTypeEnum.STRING, column.getFieldType().getFieldType()); assertFalse(column.getFieldType().isPrimitive()); assertEquals(city.getName(), column.getAccessor().apply(simple)); }
@Test public void testColumnCapturedValue() { String value = "Some Value"; EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addColumn("some_column", FieldTypeEnum.STRING, obj -> value); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("some_column"); assertEquals("some_column", column.getColumnName()); assertEquals(FieldTypeEnum.STRING, column.getFieldType().getFieldType()); assertFalse(column.getFieldType().isPrimitive()); assertEquals(value, column.getAccessor().apply(simple)); }
@Test public void testExplicitEnumField() { EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addField("floor", "floor", FieldTypeEnum.ENUMSTRING); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("floor"); assertEquals("floor", column.getColumnName()); assertEquals(FieldTypeEnum.ENUMSTRING, column.getFieldType().getFieldType()); assertFalse(column.getFieldType().isPrimitive()); assertEquals(simple.getFloor(), column.getAccessor().apply(simple)); }
@Test public void testExistentFieldInHierarchy() { EntityInfoBuilder<SimpleEntityEx> builder = new EntityInfoBuilder<>(SimpleEntityEx.class, "simple_entity"); builder.addField("height", "height"); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("height"); assertEquals("height", column.getColumnName()); assertEquals(FieldTypeEnum.INT, column.getFieldType().getFieldType()); assertTrue(column.getFieldType().isPrimitive()); assertEquals(simpleEx.getHeight(), column.getAccessor().apply(simpleEx)); }
@Test public void testAnnotatedDateField() { EntityInfoBuilder<SimpleEntityEx> builder = new EntityInfoBuilder<>(SimpleEntityEx.class, "simple_entity"); builder.addField("created", "created"); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("created"); assertEquals("created", column.getColumnName()); assertEquals(FieldTypeEnum.TIMESTAMP, column.getFieldType().getFieldType()); assertFalse(column.getFieldType().isPrimitive()); assertEquals(simpleEx.getCreated(), column.getAccessor().apply(simpleEx)); }
@Test public void testExistentField() { EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addField("name", "name"); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("name"); assertEquals("name", column.getColumnName()); assertEquals(FieldTypeEnum.STRING, column.getFieldType().getFieldType()); assertFalse(column.getFieldType().isPrimitive()); assertEquals(simple.getName(), column.getAccessor().apply(simple)); }
@Test public void testAnnotatedEnumField() { EntityInfoBuilder<SimpleEntityEx> builder = new EntityInfoBuilder<>(SimpleEntityEx.class, "simple_entity"); builder.addField("order", "order"); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("order"); assertEquals("order", column.getColumnName()); assertEquals(FieldTypeEnum.ENUMORDINAL, column.getFieldType().getFieldType()); assertFalse(column.getFieldType().isPrimitive()); assertEquals(simpleEx.getOrder(), column.getAccessor().apply(simpleEx)); }
@Test public void testSimpleColumnDeclaration() { EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addColumn("name", FieldTypeEnum.STRING, SimpleEntity::getName); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("name"); assertEquals("name", column.getColumnName()); assertEquals(FieldTypeEnum.STRING, column.getFieldType().getFieldType()); assertFalse(column.getFieldType().isPrimitive()); assertEquals(simple.getName(), column.getAccessor().apply(simple)); }
@Test public void testColumnChildEntity() { EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addColumn("city_name", FieldTypeEnum.STRING, obj -> obj.getCity().getName()); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("city_name"); assertEquals("city_name", column.getColumnName()); assertEquals(FieldTypeEnum.STRING, column.getFieldType().getFieldType()); assertFalse(column.getFieldType().isPrimitive()); assertEquals(simple.getCity().getName(), column.getAccessor().apply(simple)); }
@Test public void testSyntheticColumn() { EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addColumn("city_code", FieldTypeEnum.STRING, obj -> obj.getCity().getId() + ": " + obj.getCity().getName()); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("city_code"); assertEquals("city_code", column.getColumnName()); assertEquals(FieldTypeEnum.STRING, column.getFieldType().getFieldType()); assertFalse(column.getFieldType().isPrimitive()); assertEquals(simple.getCity().getId() + ": " + simple.getCity().getName(), column.getAccessor().apply(simple)); }