Skip to content

Commit

Permalink
Wrapup autoinc, Fix #120
Browse files Browse the repository at this point in the history
  • Loading branch information
minborg committed Mar 22, 2016
1 parent 3b9e940 commit 1414ac6
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 27 deletions.
Expand Up @@ -44,7 +44,6 @@
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.stream.BaseStream; import java.util.stream.BaseStream;
import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
import java.util.Optional; import java.util.Optional;
import com.speedment.internal.util.LazyString; import com.speedment.internal.util.LazyString;
Expand All @@ -54,11 +53,28 @@
import com.speedment.internal.util.document.DocumentDbUtil; import com.speedment.internal.util.document.DocumentDbUtil;
import static com.speedment.internal.core.stream.OptionalUtil.unwrap; import static com.speedment.internal.core.stream.OptionalUtil.unwrap;
import static com.speedment.util.NullUtil.requireNonNulls; import static com.speedment.util.NullUtil.requireNonNulls;
import java.util.ArrayList;
import java.util.Map; import java.util.Map;
import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toMap; import static java.util.stream.Collectors.toMap;
import static com.speedment.internal.core.stream.OptionalUtil.unwrap;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toMap;
import static com.speedment.internal.core.stream.OptionalUtil.unwrap;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toMap;
import static com.speedment.internal.core.stream.OptionalUtil.unwrap;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toMap;


/** /**
* *
Expand All @@ -73,20 +89,25 @@ public abstract class AbstractSqlManager<ENTITY> extends AbstractManager<ENTITY>
private final LazyString sqlTableReference; private final LazyString sqlTableReference;
private final LazyString sqlSelect; private final LazyString sqlSelect;
private SqlFunction<ResultSet, ENTITY> entityMapper; private SqlFunction<ResultSet, ENTITY> entityMapper;
private final Map<String, FieldIdentifier<ENTITY>> fieldIdentifierMap; //private final Map<String, FieldIdentifier<ENTITY>> fieldIdentifierMap;
private final Map<String, FieldTrait> fieldTraitMap;


protected AbstractSqlManager(Speedment speedment) { protected AbstractSqlManager(Speedment speedment) {
super(speedment); super(speedment);
this.sqlColumnList = LazyString.create(); this.sqlColumnList = LazyString.create();
this.sqlColumnListQuestionMarks = LazyString.create(); this.sqlColumnListQuestionMarks = LazyString.create();
this.sqlTableReference = LazyString.create(); this.sqlTableReference = LazyString.create();
this.sqlSelect = LazyString.create(); this.sqlSelect = LazyString.create();
this.fieldIdentifierMap = fields() // this.fieldIdentifierMap = fields()
// .filter(f -> f.getIdentifier().tableName().equals(getTable().getName())) // Protect against "VirtualFields"
// .filter(f -> f.getIdentifier().schemaName().equals(getTable().getParentOrThrow().getName()))
// .map(FieldTrait::getIdentifier)
// .map(f -> (FieldIdentifier<ENTITY>) f)
// .collect(toMap(FieldIdentifier::columnName, Function.identity()));
this.fieldTraitMap = fields()
.filter(f -> f.getIdentifier().tableName().equals(getTable().getName())) // Protect against "VirtualFields" .filter(f -> f.getIdentifier().tableName().equals(getTable().getName())) // Protect against "VirtualFields"
.filter(f -> f.getIdentifier().schemaName().equals(getTable().getParentOrThrow().getName())) .filter(f -> f.getIdentifier().schemaName().equals(getTable().getParentOrThrow().getName()))
.map(FieldTrait::getIdentifier) .collect(toMap(ft -> ft.getIdentifier().columnName(), Function.identity()));
.map(f -> (FieldIdentifier<ENTITY>) f)
.collect(toMap(FieldIdentifier::columnName, Function.identity()));
} }


@Override @Override
Expand Down Expand Up @@ -290,17 +311,18 @@ private <F extends FieldTrait & ReferenceFieldTrait> Object toDatabaseType(F fie
} }


private ENTITY persistHelp(ENTITY entity, Optional<Consumer<MetaResult<ENTITY>>> listener) throws SpeedmentException { private ENTITY persistHelp(ENTITY entity, Optional<Consumer<MetaResult<ENTITY>>> listener) throws SpeedmentException {
final List<Column> cols = updateColumns(entity); final List<Column> cols = persistColumns(entity);
final StringBuilder sb = new StringBuilder(); final StringBuilder sb = new StringBuilder();
sb.append("INSERT INTO ").append(sqlTableReference()); sb.append("INSERT INTO ").append(sqlTableReference());
sb.append(" (").append(updateColumnList(cols)).append(")"); sb.append(" (").append(persistColumnList(cols)).append(")");
sb.append(" VALUES "); sb.append(" VALUES ");
sb.append("(").append(updateColumnListWithQuestionMarks(cols)).append(")"); sb.append("(").append(persistColumnListWithQuestionMarks(cols)).append(")");


// final List<Object> debug = new ArrayList<>();
final List<Object> values = cols.stream() final List<Object> values = cols.stream()
.map(Column::getName) .map(Column::getName)
.map(fieldIdentifierMap::get) .map(fieldTraitMap::get)
.filter(ReferenceFieldTrait.class::isInstance) // .peek(debug::add)
.map(f -> (FieldTrait & ReferenceFieldTrait) f) .map(f -> (FieldTrait & ReferenceFieldTrait) f)
.map(f -> toDatabaseType(f, entity)) .map(f -> toDatabaseType(f, entity))
.collect(toList()); .collect(toList());
Expand Down Expand Up @@ -341,24 +363,18 @@ private ENTITY persistHelp(ENTITY entity, Optional<Consumer<MetaResult<ENTITY>>>
} }


private ENTITY updateHelper(ENTITY entity, Optional<Consumer<MetaResult<ENTITY>>> listener) throws SpeedmentException { private ENTITY updateHelper(ENTITY entity, Optional<Consumer<MetaResult<ENTITY>>> listener) throws SpeedmentException {
final List<Column> cols = updateColumns(entity);
final StringBuilder sb = new StringBuilder(); final StringBuilder sb = new StringBuilder();
sb.append("UPDATE ").append(sqlTableReference()).append(" SET "); sb.append("UPDATE ").append(sqlTableReference()).append(" SET ");
sb.append(cols.stream().map(c -> naming().fullNameOf(c) + " = ?").collect(joining(","))); sb.append(sqlColumnList(n -> n + " = ?"));
sb.append(" WHERE "); sb.append(" WHERE ");
sb.append(sqlPrimaryKeyColumnList(pk -> pk + " = ?")); sb.append(sqlPrimaryKeyColumnList(pk -> pk + " = ?"));


final List<Object> values = fields() final List<Object> values = fields()
.filter(ReferenceFieldTrait.class::isInstance) .filter(ReferenceFieldTrait.class::isInstance)
.map(f -> (FieldTrait & ReferenceFieldTrait<ENTITY, ?, ?>) f) .map(f -> (FieldTrait & ReferenceFieldTrait<ENTITY, ?, ?>) f)
.map(f -> toDatabaseType(f, entity)) .map(f -> toDatabaseType(f, entity))
.collect(toList()); .collect(Collectors.toList());

// final List<Object> values = fields()
// .filter(ReferenceFieldTrait.class::isInstance)
// .map(f -> (FieldTrait & ReferenceFieldTrait<ENTITY, ?, ?>) f)
// .map(f -> toDatabaseType(f, entity))
// .collect(toList());


primaryKeyFields() primaryKeyFields()
.filter(ReferenceFieldTrait.class::isInstance) .filter(ReferenceFieldTrait.class::isInstance)
Expand Down Expand Up @@ -386,13 +402,13 @@ private ENTITY removeHelper(ENTITY entity, Optional<Consumer<MetaResult<ENTITY>>
return entity; return entity;
} }


private String updateColumnList(List<Column> cols) { private String persistColumnList(List<Column> cols) {
return cols.stream() return cols.stream()
.map(naming()::fullNameOf) .map(naming()::fullNameOf)
.collect(joining(",")); .collect(joining(","));
} }


private String updateColumnListWithQuestionMarks(List<Column> cols) { private String persistColumnListWithQuestionMarks(List<Column> cols) {
return cols.stream() return cols.stream()
.map(c -> "?") .map(c -> "?")
.collect(joining(",")); .collect(joining(","));
Expand All @@ -407,9 +423,9 @@ private String updateColumnListWithQuestionMarks(List<Column> cols) {
* @return a List of the columns that shall be used in an insert/update * @return a List of the columns that shall be used in an insert/update
* statement * statement
*/ */
protected List<Column> updateColumns(ENTITY entity) { protected List<Column> persistColumns(ENTITY entity) {
return getTable().columns() return getTable().columns()
.filter(c -> isUpdateColumn(entity, c)) .filter(c -> isPersistColumn(entity, c))
.collect(toList()); .collect(toList());
} }


Expand All @@ -422,10 +438,12 @@ protected List<Column> updateColumns(ENTITY entity) {
* @param c column * @param c column
* @return if a columns that shall be used in an insert/update statement * @return if a columns that shall be used in an insert/update statement
*/ */
protected boolean isUpdateColumn(ENTITY entity, Column c) { protected boolean isPersistColumn(ENTITY entity, Column c) {
if (c.isAutoIncrement()) { if (c.isAutoIncrement()) {
final FieldIdentifier<ENTITY> fi = fieldIdentifierMap.get(c.getName()); final FieldTrait ft = fieldTraitMap.get(c.getName());
if (fi != null) { if (ft != null) {
@SuppressWarnings("unchecked")
final FieldIdentifier<ENTITY> fi = (FieldIdentifier<ENTITY>) ft.getIdentifier();
final Object colValue = get(entity, fi); final Object colValue = get(entity, fi);
if (colValue != null) { if (colValue != null) {
return true; return true;
Expand Down
Expand Up @@ -46,6 +46,24 @@
import static com.speedment.util.NullUtil.requireNonNulls; import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.joining;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.joining;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.joining;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.joining;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.joining;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.joining;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.joining;


/** /**
* *
Expand Down

0 comments on commit 1414ac6

Please sign in to comment.