From 976ba6a30a54613cd505015890604e2d3105e1b1 Mon Sep 17 00:00:00 2001 From: Yegor Bugayenko Date: Sun, 11 May 2014 19:48:02 +0200 Subject: [PATCH] #master: Conditions and Attributes understand numeric arguments --- .../java/com/jcabi/dynamo/Attributes.java | 8 +++++- .../java/com/jcabi/dynamo/Conditions.java | 8 +++++- .../java/com/jcabi/dynamo/mock/H2Data.java | 27 ++++++++++++++++--- .../java/com/jcabi/dynamo/RegionITCase.java | 10 +++---- 4 files changed, 42 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/jcabi/dynamo/Attributes.java b/src/main/java/com/jcabi/dynamo/Attributes.java index f2328feb..103c81d4 100644 --- a/src/main/java/com/jcabi/dynamo/Attributes.java +++ b/src/main/java/com/jcabi/dynamo/Attributes.java @@ -149,7 +149,13 @@ public Map asKeys() { public Attributes with( @NotNull(message = "attribute name can't be NULL") final String name, @NotNull(message = "value can't be NULL") final Object value) { - return this.with(name, new AttributeValue(value.toString())); + final AttributeValue attr; + if (value instanceof Long || value instanceof Integer) { + attr = new AttributeValue().withN(value.toString()); + } else { + attr = new AttributeValue(value.toString()); + } + return this.with(name, attr); } /** diff --git a/src/main/java/com/jcabi/dynamo/Conditions.java b/src/main/java/com/jcabi/dynamo/Conditions.java index bbcb4cae..6749cbe8 100644 --- a/src/main/java/com/jcabi/dynamo/Conditions.java +++ b/src/main/java/com/jcabi/dynamo/Conditions.java @@ -104,7 +104,13 @@ public Conditions(@NotNull final Map map) { */ @NotNull public static Condition equalTo(@NotNull final Object value) { - return Conditions.equalTo(new AttributeValue(value.toString())); + final AttributeValue attr; + if (value instanceof Long || value instanceof Integer) { + attr = new AttributeValue().withN(value.toString()); + } else { + attr = new AttributeValue().withS(value.toString()); + } + return Conditions.equalTo(attr); } /** diff --git a/src/main/java/com/jcabi/dynamo/mock/H2Data.java b/src/main/java/com/jcabi/dynamo/mock/H2Data.java index 459d9494..1d10685c 100644 --- a/src/main/java/com/jcabi/dynamo/mock/H2Data.java +++ b/src/main/java/com/jcabi/dynamo/mock/H2Data.java @@ -71,6 +71,7 @@ @ToString @Loggable(Loggable.DEBUG) @EqualsAndHashCode(of = "jdbc") +@SuppressWarnings("PMD.TooManyMethods") public final class H2Data implements MkData { /** @@ -196,7 +197,7 @@ public Iterable iterate(final String table, ); } final AttributeValue val = cond.getAttributeValueList().get(0); - session = session.set(val.getS()); + session = session.set(H2Data.value(val)); } return session.select(H2Data.OUTCOME); } catch (final SQLException ex) { @@ -209,7 +210,7 @@ public void put(final String table, final Attributes attrs) try { JdbcSession session = new JdbcSession(this.connection()); for (final AttributeValue value : attrs.values()) { - session = session.set(value.getS()); + session = session.set(H2Data.value(value)); } session.sql( String.format( @@ -232,10 +233,10 @@ public void update(final String table, final Attributes keys, try { JdbcSession session = new JdbcSession(this.connection()); for (final AttributeValueUpdate value : attrs.values()) { - session = session.set(value.getValue().getS()); + session = session.set(H2Data.value(value.getValue())); } for (final AttributeValue value : keys.values()) { - session = session.set(value.getS()); + session = session.set(H2Data.value(value)); } session.sql( String.format( @@ -300,4 +301,22 @@ private Connection connection() throws SQLException { return new Driver().connect(this.jdbc, new Properties()); } + /** + * Get value from attribute. + * @param attr Attribute value + * @return Text format + */ + private static String value(final AttributeValue attr) { + String val = attr.getS(); + if (val == null) { + val = attr.getN(); + } + if (val == null) { + throw new IllegalArgumentException( + "we support only N and S at the moment" + ); + } + return val; + } + } diff --git a/src/test/java/com/jcabi/dynamo/RegionITCase.java b/src/test/java/com/jcabi/dynamo/RegionITCase.java index 1146e7d3..12d47405 100644 --- a/src/test/java/com/jcabi/dynamo/RegionITCase.java +++ b/src/test/java/com/jcabi/dynamo/RegionITCase.java @@ -107,7 +107,7 @@ public void worksWithAmazon() throws Exception { MatcherAssert.assertThat(frame, Matchers.hasSize(Tv.FIVE)); final Iterator items = frame.iterator(); final Item item = items.next(); - final String range = item.get(RegionITCase.RANGE).getS(); + final int range = Integer.parseInt(item.get(RegionITCase.RANGE).getN()); MatcherAssert.assertThat( item.get(attr).getS(), Matchers.equalTo(value) @@ -122,7 +122,7 @@ public void worksWithAmazon() throws Exception { MatcherAssert.assertThat( tbl.frame() .where(RegionITCase.HASH, hash) - .where(RegionITCase.RANGE, range) + .where(RegionITCase.RANGE, Conditions.equalTo(range)) .through(new ScanValve()) .iterator().next() .get(attr).getS(), @@ -139,7 +139,7 @@ public void worksWithAmazon() throws Exception { public void retrievesAttributesFromDynamo() throws Exception { final String name = RandomStringUtils.randomAlphabetic(Tv.EIGHT); final Table tbl = this.region(name).table(name); - final String idx = "2f7whf"; + final int idx = Tv.TEN; final String hash = "7afe5efa"; final String attr = "some-attribute"; tbl.put( @@ -151,7 +151,7 @@ public void retrievesAttributesFromDynamo() throws Exception { MatcherAssert.assertThat( tbl.frame() .where(RegionITCase.HASH, hash) - .where(RegionITCase.RANGE, idx) + .where(RegionITCase.RANGE, Conditions.equalTo(idx)) .through( new QueryValve() .withAttributeToGet(attr) @@ -189,7 +189,7 @@ private Region region(final String table) throws Exception { .withAttributeType(ScalarAttributeType.S), new AttributeDefinition() .withAttributeName(RegionITCase.RANGE) - .withAttributeType(ScalarAttributeType.S) + .withAttributeType(ScalarAttributeType.N) ) .withKeySchema( new KeySchemaElement()