From de80ee4d8785e38bbf109625d664607e5a63dbfc Mon Sep 17 00:00:00 2001 From: John D Date: Sun, 24 May 2020 20:24:23 -0700 Subject: [PATCH 1/6] Update FUNDING.yml --- .github/FUNDING.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 173460e0..41f5e4ac 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,4 +1,4 @@ # These are supported funding model platforms -github: #boostchicken +github: boostchicken custom: ["paypal.me/boostchicken"] From c6a729e4656fa026a09c51cc6c5fc956239630e0 Mon Sep 17 00:00:00 2001 From: Hannes Angst Date: Wed, 17 Jun 2020 07:27:47 +0200 Subject: [PATCH 2/6] Introduce string set handling (#34) * v5.2.3 (#18) * Read Consistency Setting * https://github.com/boostchicken/spring-data-dynamodb/issues/8 Custom Mapper Spec * https://github.com/boostchicken/spring-data-dynamodb/issues/8 Custom Mapper CDI fix * Fix symlink to CONTRIBUTING.md (#13) * #8 Don't use autowired or constructor injection with FactoryBeans (#12) * [maven-release-plugin] prepare release v5.2.2 * [maven-release-plugin] prepare for next development iteration * 5.2.2 docs fix * Hibernate Validator CVE fix https://github.com/advisories/GHSA-m8p2-495h-ccmh * Documentation updates * Create FUNDING.yml * Fixed a Type (#17) Co-authored-by: thedevluffy <52121827+TheDevLuffy@users.noreply.github.com> * Documentation updates * 5.2.3 prep * [maven-release-plugin] prepare release v5.2.3 * [maven-release-plugin] prepare for next development iteration Co-authored-by: Christian Frommeyer Co-authored-by: thedevluffy <52121827+TheDevLuffy@users.noreply.github.com> * :sparkles: Allow CONTAINS and NOT_CONTAINS is repositories * :art: cleanup * :wrench: check for collection * :wrench: check for collection * :pencil2: cleanup * :art: cleanup imports * Remove funding changes Co-authored-by: John D Co-authored-by: Christian Frommeyer Co-authored-by: thedevluffy <52121827+TheDevLuffy@users.noreply.github.com> Co-authored-by: John Dorman Co-authored-by: Hannes Angst --- .../query/AbstractDynamoDBQueryCreator.java | 52 ++++-- .../query/AbstractDynamoDBQueryCriteria.java | 13 +- .../domain/sample/CRUDOperationsIT.java | 168 +++++++++++++++++- .../data/dynamodb/domain/sample/User.java | 16 +- .../domain/sample/UserRepository.java | 59 +++++- 5 files changed, 280 insertions(+), 28 deletions(-) diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCreator.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCreator.java index 288817f8..d5ad28d1 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCreator.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCreator.java @@ -39,6 +39,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.Optional; @@ -139,18 +140,12 @@ protected DynamoDBQueryCriteria addCriteria(DynamoDBQueryCriteria switch (part.getType()) { case IN : - Object in = iterator.next(); - Assert.notNull(in, "Creating conditions on null parameters not supported: please specify a value for '" - + leafNodePropertyName + "'"); - boolean isIterable = ClassUtils.isAssignable(Iterable.class, in.getClass()); - boolean isArray = ObjectUtils.isArray(in); - Assert.isTrue(isIterable || isArray, "In criteria can only operate with Iterable or Array parameters"); - Iterable iterable = isIterable ? ((Iterable) in) : Arrays.asList(ObjectUtils.toObjectArray(in)); - return criteria.withPropertyIn(leafNodePropertyName, iterable, leafNodePropertyType); - case CONTAINING : - return criteria.withSingleValueCriteria(leafNodePropertyName, ComparisonOperator.CONTAINS, - iterator.next(), leafNodePropertyType); - case STARTING_WITH : + return getInProperty(criteria, iterator, leafNodePropertyType, leafNodePropertyName); + case CONTAINING : + return getItemsProperty(criteria, ComparisonOperator.CONTAINS, iterator, leafNodePropertyType, leafNodePropertyName); + case NOT_CONTAINING: + return getItemsProperty(criteria, ComparisonOperator.NOT_CONTAINS, iterator, leafNodePropertyType, leafNodePropertyName); + case STARTING_WITH : return criteria.withSingleValueCriteria(leafNodePropertyName, ComparisonOperator.BEGINS_WITH, iterator.next(), leafNodePropertyType); case BETWEEN : @@ -192,7 +187,38 @@ protected DynamoDBQueryCriteria addCriteria(DynamoDBQueryCriteria } - @Override + private DynamoDBQueryCriteria getItemsProperty(DynamoDBQueryCriteria criteria, ComparisonOperator comparisonOperator, Iterator iterator, Class leafNodePropertyType, String leafNodePropertyName) { + Object in = iterator.next(); + Assert.notNull(in, "Creating conditions on null parameters not supported: please specify a value for '" + leafNodePropertyName + "'"); + + if(ObjectUtils.isArray(in)) { + List list = Arrays.asList(ObjectUtils.toObjectArray(in)); + Assert.isTrue(list.size()==1, "Only one value is supported: please specify a value for '\" + leafNodePropertyName + \"'\""); + Object value = list.get(0); + return criteria.withSingleValueCriteria(leafNodePropertyName, comparisonOperator, value, leafNodePropertyType); + } else if(ClassUtils.isAssignable(Iterable.class, in.getClass())) { + Iterator iter = ((Iterable) in).iterator(); + Assert.isTrue(iter.hasNext(), "Creating conditions on empty parameters not supported: please specify a value for '\" + leafNodePropertyName + \"'\""); + Object value = iter.next(); + Assert.isTrue(!iter.hasNext(), "Only one value is supported: please specify a value for '\" + leafNodePropertyName + \"'\""); + return criteria.withSingleValueCriteria(leafNodePropertyName, comparisonOperator, value, leafNodePropertyType); + } else { + return criteria.withSingleValueCriteria(leafNodePropertyName, comparisonOperator, in, leafNodePropertyType); + } + } + + private DynamoDBQueryCriteria getInProperty(DynamoDBQueryCriteria criteria, Iterator iterator, Class leafNodePropertyType, String leafNodePropertyName) { + Object in = iterator.next(); + Assert.notNull(in, "Creating conditions on null parameters not supported: please specify a value for '" + + leafNodePropertyName + "'"); + boolean isIterable = ClassUtils.isAssignable(Iterable.class, in.getClass()); + boolean isArray = ObjectUtils.isArray(in); + Assert.isTrue(isIterable || isArray, "In criteria can only operate with Iterable or Array parameters"); + Iterable iterable = isIterable ? ((Iterable) in) : Arrays.asList(ObjectUtils.toObjectArray(in)); + return criteria.withPropertyIn(leafNodePropertyName, iterable, leafNodePropertyType); + } + + @Override protected DynamoDBQueryCriteria and(Part part, DynamoDBQueryCriteria base, Iterator iterator) { return addCriteria(base, part, iterator); diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCriteria.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCriteria.java index 023daee8..6ac10fc8 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCriteria.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCriteria.java @@ -476,7 +476,7 @@ public DynamoDBQueryCriteria withPropertyIn(String propertyName, Iterable return withCondition(propertyName, condition); } - @Override + @Override public DynamoDBQueryCriteria withSingleValueCriteria(String propertyName, ComparisonOperator comparisonOperator, Object value, Class propertyType) { if (comparisonOperator.equals(ComparisonOperator.EQ)) { @@ -554,8 +554,15 @@ protected Object getPropertyAttributeValue(final String prope DynamoDBMapperFieldModel fieldModel = tableModel.field(attributeName); if (fieldModel != null) { - return fieldModel.convert(value); - } + if (fieldModel.attributeType() == DynamoDBMapperFieldModel.DynamoDBAttributeType.SS) { + if(value instanceof Collection) { + return fieldModel.convert(value); + } else { + return new AttributeValue(value.toString()); + } + } + return fieldModel.convert(value); + } } return value; diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/CRUDOperationsIT.java b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/CRUDOperationsIT.java index 217da80b..89e8c2e6 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/CRUDOperationsIT.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/CRUDOperationsIT.java @@ -17,7 +17,6 @@ import org.junit.Before; import org.junit.Rule; - import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; @@ -36,8 +35,10 @@ import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashSet; import java.util.List; import java.util.Optional; +import java.util.Set; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.ThreadLocalRandom; @@ -263,14 +264,163 @@ public void testFilterAndPagination() { @Test public void testDeleteNonExistentIdWithCondition() { - // Delete conditional - userRepository.deleteByIdAndName("non-existent", "non-existent"); - } + // Delete conditional + userRepository.deleteByIdAndName("non-existent", "non-existent"); + } + + @Test + public void testDeleteNonExistingGsiWithCondition() { + // Delete via GSI + userRepository.deleteByPostCodeAndNumberOfPlaylists("non-existing", 23); + + } + + + @Test + public void testFilterWithCollections() { + // Prepare + User u1 = new User(); + String name1 = "name1" + ThreadLocalRandom.current().nextLong(); + u1.setId("u1"); + u1.setName(name1); + u1.setPostCode("1234"); + Set u1Tags = new HashSet<>(); + u1Tags.add("tag-a"); + u1Tags.add("tag-b"); + u1Tags.add("tag-c"); + u1.setTags(u1Tags); + + User u2 = new User(); + String name2 = "name1" + ThreadLocalRandom.current().nextLong(); + u2.setId("u2"); + u2.setName(name2); + u2.setPostCode("1234"); + Set u2Tags = new HashSet<>(); + u2Tags.add("tag-a"); + u2Tags.add("tag-b"); + u2.setTags(u2Tags); + + User u3 = new User(); + String name3 = "name1" + ThreadLocalRandom.current().nextLong(); + u3.setId("u3"); + u3.setName(name3); + u3.setPostCode("1234"); + Set u3Tags = new HashSet<>(); + u3Tags.add("tag-a"); + u3Tags.add("tag-c"); + u3.setTags(u3Tags); + + + u1 = userRepository.save(u1); + u2 = userRepository.save(u2); + u3 = userRepository.save(u3); + + Set tagA = setOf(u1, u2, u3); + Set tagB = setOf(u1,u2); + Set tagC = setOf(u1, u3); + + Set notTagA = setOf(); + Set notTagB = setOf(u3); + Set notTagC = setOf(u2); + + + // Single value + assertEquals(tagA, new HashSet<>(userRepository.findAllByTagsContaining("tag-a"))); + assertEquals(tagB, new HashSet<>(userRepository.findAllByTagsContaining("tag-b"))); + assertEquals(tagC, new HashSet<>(userRepository.findAllByTagsContaining("tag-c"))); + + assertEquals(tagA, new HashSet<>(userRepository.findAllByTagsContains("tag-a"))); + assertEquals(tagB, new HashSet<>(userRepository.findAllByTagsContains("tag-b"))); + assertEquals(tagC, new HashSet<>(userRepository.findAllByTagsContains("tag-c"))); + + assertEquals(tagA, new HashSet<>(userRepository.findAllByTagsIsContaining("tag-a"))); + assertEquals(tagB, new HashSet<>(userRepository.findAllByTagsIsContaining("tag-b"))); + assertEquals(tagC, new HashSet<>(userRepository.findAllByTagsIsContaining("tag-c"))); + + assertEquals(notTagA, new HashSet<>(userRepository.findAllByTagsNotContaining("tag-a"))); + assertEquals(notTagB, new HashSet<>(userRepository.findAllByTagsNotContaining("tag-b"))); + assertEquals(notTagC, new HashSet<>(userRepository.findAllByTagsNotContaining("tag-c"))); + + assertEquals(notTagA, new HashSet<>(userRepository.findAllByTagsNotContains("tag-a"))); + assertEquals(notTagB, new HashSet<>(userRepository.findAllByTagsNotContains("tag-b"))); + assertEquals(notTagC, new HashSet<>(userRepository.findAllByTagsNotContains("tag-c"))); + + assertEquals(notTagA, new HashSet<>(userRepository.findAllByTagsIsNotContaining("tag-a"))); + assertEquals(notTagB, new HashSet<>(userRepository.findAllByTagsIsNotContaining("tag-b"))); + assertEquals(notTagC, new HashSet<>(userRepository.findAllByTagsIsNotContaining("tag-c"))); + + + //Sets + assertEquals(tagA, new HashSet<>(userRepository.findAllByTagsContaining(setOf("tag-a")))); + assertEquals(tagB, new HashSet<>(userRepository.findAllByTagsContaining(setOf("tag-b")))); + assertEquals(tagC, new HashSet<>(userRepository.findAllByTagsContaining(setOf("tag-c")))); + + assertEquals(tagA, new HashSet<>(userRepository.findAllByTagsContains(setOf("tag-a")))); + assertEquals(tagB, new HashSet<>(userRepository.findAllByTagsContains(setOf("tag-b")))); + assertEquals(tagC, new HashSet<>(userRepository.findAllByTagsContains(setOf("tag-c")))); + + assertEquals(tagA, new HashSet<>(userRepository.findAllByTagsIsContaining(setOf("tag-a")))); + assertEquals(tagB, new HashSet<>(userRepository.findAllByTagsIsContaining(setOf("tag-b")))); + assertEquals(tagC, new HashSet<>(userRepository.findAllByTagsIsContaining(setOf("tag-c")))); + + assertEquals(notTagA, new HashSet<>(userRepository.findAllByTagsNotContaining(setOf("tag-a")))); + assertEquals(notTagB, new HashSet<>(userRepository.findAllByTagsNotContaining(setOf("tag-b")))); + assertEquals(notTagC, new HashSet<>(userRepository.findAllByTagsNotContaining(setOf("tag-c")))); + + assertEquals(notTagA, new HashSet<>(userRepository.findAllByTagsNotContains(setOf("tag-a")))); + assertEquals(notTagB, new HashSet<>(userRepository.findAllByTagsNotContains(setOf("tag-b")))); + assertEquals(notTagC, new HashSet<>(userRepository.findAllByTagsNotContains(setOf("tag-c")))); + + assertEquals(notTagA, new HashSet<>(userRepository.findAllByTagsIsNotContaining(setOf("tag-a")))); + assertEquals(notTagB, new HashSet<>(userRepository.findAllByTagsIsNotContaining(setOf("tag-b")))); + assertEquals(notTagC, new HashSet<>(userRepository.findAllByTagsIsNotContaining(setOf("tag-c")))); + + //Lists + assertEquals(tagA, new HashSet<>(userRepository.findAllByTagsContaining(listOf("tag-a")))); + assertEquals(tagB, new HashSet<>(userRepository.findAllByTagsContaining(listOf("tag-b")))); + assertEquals(tagC, new HashSet<>(userRepository.findAllByTagsContaining(listOf("tag-c")))); + + assertEquals(tagA, new HashSet<>(userRepository.findAllByTagsContains(listOf("tag-a")))); + assertEquals(tagB, new HashSet<>(userRepository.findAllByTagsContains(listOf("tag-b")))); + assertEquals(tagC, new HashSet<>(userRepository.findAllByTagsContains(listOf("tag-c")))); + + assertEquals(tagA, new HashSet<>(userRepository.findAllByTagsIsContaining(listOf("tag-a")))); + assertEquals(tagB, new HashSet<>(userRepository.findAllByTagsIsContaining(listOf("tag-b")))); + assertEquals(tagC, new HashSet<>(userRepository.findAllByTagsIsContaining(listOf("tag-c")))); + + assertEquals(notTagA, new HashSet<>(userRepository.findAllByTagsNotContaining(listOf("tag-a")))); + assertEquals(notTagB, new HashSet<>(userRepository.findAllByTagsNotContaining(listOf("tag-b")))); + assertEquals(notTagC, new HashSet<>(userRepository.findAllByTagsNotContaining(listOf("tag-c")))); + + assertEquals(notTagA, new HashSet<>(userRepository.findAllByTagsNotContains(listOf("tag-a")))); + assertEquals(notTagB, new HashSet<>(userRepository.findAllByTagsNotContains(listOf("tag-b")))); + assertEquals(notTagC, new HashSet<>(userRepository.findAllByTagsNotContains(listOf("tag-c")))); - @Test - public void testDeleteNonExistingGsiWithConditoin() { - // Delete via GSI - userRepository.deleteByPostCodeAndNumberOfPlaylists("non-existing", 23); + assertEquals(notTagA, new HashSet<>(userRepository.findAllByTagsIsNotContaining(listOf("tag-a")))); + assertEquals(notTagB, new HashSet<>(userRepository.findAllByTagsIsNotContaining(listOf("tag-b")))); + assertEquals(notTagC, new HashSet<>(userRepository.findAllByTagsIsNotContaining(listOf("tag-c")))); - } + + } + + + @SafeVarargs + private final Set setOf(E... values) { + Set result = new HashSet<>(); + + if (values != null) { + result.addAll(Arrays.asList(values)); + } + return result; + } + + @SafeVarargs + private final List listOf(E... values) { + List result = new ArrayList<>(); + + if (values != null) { + result.addAll(Arrays.asList(values)); + } + return result; + } } diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/User.java b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/User.java index 82556b62..20db927c 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/User.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/User.java @@ -38,6 +38,8 @@ public class User { private Date joinDate; + private Set tags; + @SuppressWarnings("deprecation") @DynamoDBMarshalling(marshallerClass = DynamoDBYearMarshaller.class) private Date joinYear; @@ -72,7 +74,15 @@ public void setJoinYear(Date joinYear) { this.joinYear = joinYear; } - @SuppressWarnings("deprecation") + public Set getTags() { + return tags; + } + + public void setTags(Set tags) { + this.tags = tags; + } + + @SuppressWarnings("deprecation") @DynamoDBMarshalling(marshallerClass = Instant2IsoDynamoDBMarshaller.class) public Instant getLeaveDate() { return leaveDate; @@ -184,4 +194,8 @@ public boolean equals(Object obj) { return true; } + @Override + public String toString() { + return ""; + } } diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/UserRepository.java b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/UserRepository.java index 19a31dca..1627f248 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/UserRepository.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/UserRepository.java @@ -25,13 +25,14 @@ import java.time.Instant; import java.util.List; import java.util.Optional; +import java.util.Set; import java.util.concurrent.Future; public interface UserRepository extends CrudRepository { @EnableScan @Override - Iterable findAll(); + List findAll(); // CRUD method using Optional @Query(consistentReads = QueryConstants.ConsistentReadMode.CONSISTENT) @@ -43,7 +44,61 @@ public interface UserRepository extends CrudRepository { @EnableScan Optional findByName(String name); - @EnableScan + @EnableScan + List findAllByTagsContains(String tag); + + @EnableScan + List findAllByTagsContaining(String tag); + + @EnableScan + List findAllByTagsIsContaining(String tag); + + @EnableScan + List findAllByTagsNotContains(String tag); + + @EnableScan + List findAllByTagsNotContaining(String tag); + + @EnableScan + List findAllByTagsIsNotContaining(String tag); + + @EnableScan + List findAllByTagsContains(Set tags); + + @EnableScan + List findAllByTagsContaining(Set tags); + + @EnableScan + List findAllByTagsIsContaining(Set tags); + + @EnableScan + List findAllByTagsNotContains(Set tags); + + @EnableScan + List findAllByTagsNotContaining(Set tags); + + @EnableScan + List findAllByTagsIsNotContaining(Set tags); + + @EnableScan + List findAllByTagsContains(List tags); + + @EnableScan + List findAllByTagsContaining(List tags); + + @EnableScan + List findAllByTagsIsContaining(List tags); + + @EnableScan + List findAllByTagsNotContains(List tags); + + @EnableScan + List findAllByTagsNotContaining(List tags); + + @EnableScan + List findAllByTagsIsNotContaining(List tags); + + @EnableScan Future findByNameAndPostCode(String name, String postCode); @EnableScan User findFirstByPostCode(String postCode); From e7b4c6c0095d52bece5df89ba76a59d965767fea Mon Sep 17 00:00:00 2001 From: John Dorman Date: Tue, 16 Jun 2020 22:31:33 -0700 Subject: [PATCH 3/6] Updating changelog for #33 --- CHANELOG.md | 5 +++++ src/changes/changes.xml | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/CHANELOG.md b/CHANELOG.md index 3f00a44c..6ce71ebb 100644 --- a/CHANELOG.md +++ b/CHANELOG.md @@ -1,3 +1,8 @@ +# 5.2.5 + +## New Features +1. [Allow single object as parameter to query a set/list](https://github.com/boostchicken/spring-data-dynamodb/issues/33) + # 5.2.4 ## Housekeeping diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 28da7d30..06889dbd 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -23,6 +23,11 @@ boostchicken + + + Allow single object as parameter to query a set/list + + Added Filter Expression Support From 2046503dafe4cf10f7b7841d79bc6201aff5cd5b Mon Sep 17 00:00:00 2001 From: John Dorman Date: Wed, 17 Jun 2020 05:47:25 -0700 Subject: [PATCH 4/6] Updating for release --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 188ded0f..61a2b8f9 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ Download the JAR though [Maven Central](http://mvnrepository.com/artifact/io.git io.github.boostchicken spring-data-dynamodb - 5.2.4 + 5.2.5 ``` From ece4cdf4d59716b54957fab677607ec03c2dc9ee Mon Sep 17 00:00:00 2001 From: John Dorman Date: Wed, 17 Jun 2020 05:48:18 -0700 Subject: [PATCH 5/6] [maven-release-plugin] prepare release v5.2.5 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index d25035e2..d1f6389a 100755 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ 4.0.0 io.github.boostchicken spring-data-dynamodb - 5.2.5-SNAPSHOT + 5.2.5 Spring Data DynamoDB 2018 @@ -495,7 +495,7 @@ https://github.com/boostchicken/spring-data-dynamodb scm:git:ssh://github.com/boostchicken/spring-data-dynamodb.git scm:git:ssh://git@github.com/boostchicken/spring-data-dynamodb.git - HEAD + v5.2.5 From e87108ae4b5500a894f61b02d41b903a5065f061 Mon Sep 17 00:00:00 2001 From: John Dorman Date: Wed, 17 Jun 2020 05:48:19 -0700 Subject: [PATCH 6/6] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index d1f6389a..6df9d31f 100755 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ 4.0.0 io.github.boostchicken spring-data-dynamodb - 5.2.5 + 5.2.6-SNAPSHOT Spring Data DynamoDB 2018 @@ -495,7 +495,7 @@ https://github.com/boostchicken/spring-data-dynamodb scm:git:ssh://github.com/boostchicken/spring-data-dynamodb.git scm:git:ssh://git@github.com/boostchicken/spring-data-dynamodb.git - v5.2.5 + HEAD