diff --git a/src/main/java/com/datastax/driver/core/schemabuilder/DropMaterializedView.java b/src/main/java/com/datastax/driver/core/schemabuilder/DropMaterializedView.java index a7279f2..1746e95 100644 --- a/src/main/java/com/datastax/driver/core/schemabuilder/DropMaterializedView.java +++ b/src/main/java/com/datastax/driver/core/schemabuilder/DropMaterializedView.java @@ -4,7 +4,6 @@ import com.google.common.base.Optional; public class DropMaterializedView extends Drop { - private final String itemType = "MATERIALIZED VIEW"; private Optional keyspaceName = Optional.absent(); private String itemName; private boolean ifExists = true; @@ -31,7 +30,7 @@ public class DropMaterializedView extends Drop { @Override public String buildInternal() { - StringBuilder dropStatement = new StringBuilder("DROP " + itemType + " "); + StringBuilder dropStatement = new StringBuilder("DROP MATERIALIZED VIEW "); if (ifExists) { dropStatement.append("IF EXISTS "); } diff --git a/src/main/java/net/helenus/core/AbstractEntityDraft.java b/src/main/java/net/helenus/core/AbstractEntityDraft.java index 94005ff..be6b2de 100644 --- a/src/main/java/net/helenus/core/AbstractEntityDraft.java +++ b/src/main/java/net/helenus/core/AbstractEntityDraft.java @@ -150,8 +150,8 @@ public abstract class AbstractEntityDraft implements Drafted { Map combined; if (entityMap != null && entityMap.size() > 0) { combined = new HashMap(entityMap.size()); - for (String key : entityMap.keySet()) { - combined.put(key, entityMap.get(key)); + for (Map.Entry e : entityMap.entrySet()) { + combined.put(e.getKey(), e.getValue()); } } else { combined = new HashMap(backingMap.size()); diff --git a/src/main/java/net/helenus/core/AbstractUnitOfWork.java b/src/main/java/net/helenus/core/AbstractUnitOfWork.java index 1b4454d..5793f8c 100644 --- a/src/main/java/net/helenus/core/AbstractUnitOfWork.java +++ b/src/main/java/net/helenus/core/AbstractUnitOfWork.java @@ -124,10 +124,10 @@ public abstract class AbstractUnitOfWork implements UnitOfW String database = ""; if (databaseTime.size() > 0) { List dbt = new ArrayList<>(databaseTime.size()); - for (String name : databaseTime.keySet()) { - double t = databaseTime.get(name) / 1000.0; + for (Map.Entry dt : databaseTime.entrySet()) { + double t = dt.getValue() / 1000.0; d += t; - dbt.add(String.format("%s took %,.3fms %,2.2f%%", name, t, (t / e) * 100.0)); + dbt.add(String.format("%s took %,.3fms %,2.2f%%", dt.getKey(), t, (t / e) * 100.0)); } double fd = (d / e) * 100.0; database = String.format(", %d quer%s (%,.3fms %,2.2f%% - %s)", databaseLookups, @@ -293,12 +293,13 @@ public abstract class AbstractUnitOfWork implements UnitOfW parent.cacheMisses += cacheMisses; parent.databaseLookups += databaseLookups; parent.cacheLookupTime += cacheLookupTime; - for (String name : databaseTime.keySet()) { + for (Map.Entry dt : databaseTime.entrySet()) { + String name = dt.getKey(); if (parent.databaseTime.containsKey(name)) { double t = parent.databaseTime.get(name); - parent.databaseTime.put(name, t + databaseTime.get(name)); + parent.databaseTime.put(name, t + dt.getValue()); } else { - parent.databaseTime.put(name, databaseTime.get(name)); + parent.databaseTime.put(name, dt.getValue()); } } } diff --git a/src/main/java/net/helenus/core/HelenusSession.java b/src/main/java/net/helenus/core/HelenusSession.java index 91986e4..dc32dd7 100644 --- a/src/main/java/net/helenus/core/HelenusSession.java +++ b/src/main/java/net/helenus/core/HelenusSession.java @@ -335,8 +335,7 @@ public final class HelenusSession extends AbstractSessionOperations implements C return uow.begin(); } catch (NoSuchMethodException | InvocationTargetException | InstantiationException | IllegalAccessException e) { - throw new HelenusException( - String.format("Unable to instantiate {} as a UnitOfWork.", unitOfWorkClass.getSimpleName()), e); + throw new HelenusException(String.format("Unable to instantiate %s as a UnitOfWork.", unitOfWorkClass.getSimpleName()), e); } } @@ -698,6 +697,9 @@ public final class HelenusSession extends AbstractSessionOperations implements C case UDT : execute(SchemaUtil.dropUserType(entity), true); break; + + default: + throw new HelenusException("Unknown entity type."); } } } diff --git a/src/main/java/net/helenus/core/SchemaUtil.java b/src/main/java/net/helenus/core/SchemaUtil.java index 44ccae8..e4cf059 100644 --- a/src/main/java/net/helenus/core/SchemaUtil.java +++ b/src/main/java/net/helenus/core/SchemaUtil.java @@ -167,10 +167,6 @@ public final class SchemaUtil { throw new HelenusMappingException("expected view entity " + entity); } - if (entity == null) { - throw new HelenusMappingException("no entity or table to select data"); - } - List props = new ArrayList(); entity.getOrderedProperties().stream().map(p -> new HelenusPropertyNode(p, Optional.empty())) .forEach(p -> props.add(p)); diff --git a/src/main/java/net/helenus/core/cache/CacheUtil.java b/src/main/java/net/helenus/core/cache/CacheUtil.java index 2607d45..343ec2f 100644 --- a/src/main/java/net/helenus/core/cache/CacheUtil.java +++ b/src/main/java/net/helenus/core/cache/CacheUtil.java @@ -8,7 +8,7 @@ public class CacheUtil { public static List combinations(List items) { int n = items.size(); - if (n > 20 || n < 0) + if (n > 20) throw new IllegalArgumentException(n + " is out of range"); long e = Math.round(Math.pow(2, n)); List out = new ArrayList((int) e - 1); diff --git a/src/main/java/net/helenus/mapping/value/StatementColumnValuePreparer.java b/src/main/java/net/helenus/mapping/value/StatementColumnValuePreparer.java index 1e32b8b..5ac4def 100644 --- a/src/main/java/net/helenus/mapping/value/StatementColumnValuePreparer.java +++ b/src/main/java/net/helenus/mapping/value/StatementColumnValuePreparer.java @@ -44,13 +44,10 @@ public final class StatementColumnValuePreparer implements ColumnValuePreparer { HelenusValidator.INSTANCE.validate(prop, value); - if (value != null) { + Optional> converter = prop.getWriteConverter(repository); - Optional> converter = prop.getWriteConverter(repository); - - if (converter.isPresent()) { - value = converter.get().apply(value); - } + if (converter.isPresent()) { + value = converter.get().apply(value); } return value; diff --git a/src/main/java/net/helenus/mapping/value/ValueProviderMap.java b/src/main/java/net/helenus/mapping/value/ValueProviderMap.java index 562acca..fc6ad79 100644 --- a/src/main/java/net/helenus/mapping/value/ValueProviderMap.java +++ b/src/main/java/net/helenus/mapping/value/ValueProviderMap.java @@ -111,13 +111,17 @@ public final class ValueProviderMap implements Map { @Override public Set> entrySet() { - throwShouldNeverCall("entrySet()"); - return null; + return entity.getOrderedProperties() + .stream() + .map(p -> { + return new ValueProviderMap.Entry(p.getPropertyName(), + valueProvider.getColumnValue(source, -1, p, immutable)); + }).collect(Collectors.toSet()); } - private void throwShouldNeverCall(String methodName) { + private static void throwShouldNeverCall(String methodName) { throw new HelenusMappingException(String.format( - "the method {} should never be called on an instance of a Helenus ValueProviderMap", methodName)); + "the method %s should never be called on an instance of a Helenus ValueProviderMap", methodName)); } @Override @@ -125,6 +129,15 @@ public final class ValueProviderMap implements Map { return source.toString(); } + @Override + public int hashCode() { + int result = source.hashCode(); + result = 31 * result + valueProvider.hashCode(); + result = 31 * result + entity.hashCode(); + result = 31 * result + (immutable ? 1 : 0); + return result; + } + @Override public boolean equals(Object o) { if (this == o) @@ -135,10 +148,37 @@ public final class ValueProviderMap implements Map { Map that = (Map) o; if (this.size() != that.size()) return false; - for (String key : this.keySet()) - if (!this.get(key).equals(that.get(key))) + for (Map.Entry e : this.entrySet()) + if (!e.getValue().equals(that.get(e.getKey()))) return false; return true; } + + public static class Entry implements Map.Entry { + + private final K key; + private final V value; + + public Entry(K key, V value) { + this.key = key; + this.value = value; + } + + @Override + public K getKey() { + return key; + } + + @Override + public V getValue() { + return value; + } + + @Override + public V setValue(V value) { + throwShouldNeverCall("Entry.setValue()"); + return null; + } + } } diff --git a/src/test/java/net/helenus/test/integration/core/unitofwork/UnitOfWorkTest.java b/src/test/java/net/helenus/test/integration/core/unitofwork/UnitOfWorkTest.java index 254512a..89d89ad 100644 --- a/src/test/java/net/helenus/test/integration/core/unitofwork/UnitOfWorkTest.java +++ b/src/test/java/net/helenus/test/integration/core/unitofwork/UnitOfWorkTest.java @@ -173,9 +173,9 @@ public class UnitOfWorkTest extends AbstractEmbeddedCassandraTest { .uncached() .sync().orElse(null); - Assert.assertNotEquals(w5, w2); // Not the same instance - Assert.assertTrue(w2.equals(w5)); // But they have the same values - Assert.assertFalse(w5.equals(w2)); // TODO(gburd): should also work + Assert.assertNotEquals(w5, w2); // Not the same instance, + Assert.assertTrue(w2.equals(w5)); // but they have the same values, + Assert.assertFalse(w5.equals(w2)); // regardless of the order when comparing. Assert.assertEquals(w5.name(), "Bill"); uow.commit().andThen(() -> {