public List<ColumnInfo> getNotIdentityColumns() { return columns.stream().filter(f -> !f.getFieldType().isIdentityId()).collect(Collectors.toList()); }
private void add(BufferedWriter writer, T entity) throws IOException { for (int i = 0; i < columns.size(); i++) { ColumnInfo column = columns.get(i); Object value = column.getAccessor().apply(entity); if (value != null) { String valueStr = typeSerializer.toString(value, column.getFieldType()); String escapedValue = csvEscaper.escapeAndDelimite(valueStr); writer.write(escapedValue); } else if (config.isAlwaysDelimitText()) { writer.write(emptyText); } if (i < columns.size() - 1) { writer.write(config.getFieldSeparator()); } } writer.write(config.getLineDelimiter()); }
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 <T> void add(StringContent stringContent, T entity) { for (int i = 0; i < columns.size(); i++) { ColumnInfo info = columns.get(i); Object value = info.getAccessor().apply(entity); if (value != null) { String valueStr = typeSerializer.toString(value, info.getFieldType()); String escapedValue = escaper.escapeForStdIn(valueStr); stringContent.append(escapedValue); } else { stringContent.append("\\N"); } if (i < columns.size() - 1) { stringContent.append(DELIMITER_CHAR); } } stringContent.append(NEWLINE_CHAR); }
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 <T> void add(StringContent stringContent, T entity) { for (int i = 0; i < columns.size(); i++) { ColumnInfo info = columns.get(i); Object value = info.getAccessor().apply(entity); if (value != null) { String valueStr = typeSerializer.toString(value, info.getFieldType()); String escapedValue = escaper.escapeForLoadFile(valueStr); stringContent.append(escapedValue); } else { stringContent.append("\\N"); } stringContent.append(FIELD_TERMINATED_CHAR); } stringContent.append(LINE_TERMINATED_CHAR); }
public JdbcBulkInsert(JdbcConfiguration config) { this.cfg = config; this.columns = cfg.getEntityInfo().getNotIdentityColumns(); this.insertSql = createInsertQuery(cfg.getEntityInfo().getTableName(), columns); for (ColumnInfo column : columns) { accessors.add(column.getAccessor()); } FieldPreConvert fieldPreConvert = new FieldPreConvert(); for (ColumnInfo column : columns) { preConvert.add(fieldPreConvert.preConvert(column.getFieldType())); } }
private String getAutoIncrement(ColumnInfo columnInfo) { EntityFieldType fieldType = columnInfo.getFieldType(); if (!fieldType.isIdentityId()) { return ""; } FieldTypeEnum type = fieldType.getFieldType(); switch (type) { case BYTE: case INT: case LONG: case SHORT: case BIGINTEGER: return " AUTO_INCREMENT"; default: logger.warn("Declared IDENTITY @Id strategy over non int type"); return ""; } }
@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 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 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 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 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)); }