Add delete by query functionality to aerospike module

Project: http://git-wip-us.apache.org/repos/asf/gora/repo
Commit: http://git-wip-us.apache.org/repos/asf/gora/commit/c485f5be
Tree: http://git-wip-us.apache.org/repos/asf/gora/tree/c485f5be
Diff: http://git-wip-us.apache.org/repos/asf/gora/diff/c485f5be

Branch: refs/heads/master
Commit: c485f5bed92b784a4dd915c6fe5d7b95a9990618
Parents: 2d667ed
Author: nishadi <ndime...@gmail.com>
Authored: Wed Jul 19 23:35:55 2017 +0530
Committer: nishadi <ndime...@gmail.com>
Committed: Wed Jul 19 23:35:55 2017 +0530

----------------------------------------------------------------------
 .../aerospike/query/AerospikeQueryResult.java   |  1 +
 .../gora/aerospike/store/AerospikeStore.java    | 20 ++++++++++++++++++-
 .../aerospike/store/TestAerospikeStore.java     | 21 ++++++++++++++++----
 3 files changed, 37 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/gora/blob/c485f5be/gora-aerospike/src/main/java/org/apache/gora/aerospike/query/AerospikeQueryResult.java
----------------------------------------------------------------------
diff --git 
a/gora-aerospike/src/main/java/org/apache/gora/aerospike/query/AerospikeQueryResult.java
 
b/gora-aerospike/src/main/java/org/apache/gora/aerospike/query/AerospikeQueryResult.java
index 8858f34..3ddca3c 100644
--- 
a/gora-aerospike/src/main/java/org/apache/gora/aerospike/query/AerospikeQueryResult.java
+++ 
b/gora-aerospike/src/main/java/org/apache/gora/aerospike/query/AerospikeQueryResult.java
@@ -73,6 +73,7 @@ public class AerospikeQueryResult<K, T extends Persistent> 
extends ResultBase<K,
     if (offset < 0 || offset > (resultRecords.size() - 1)) {
       return false;
     }
+    key = (K) resultRecords.get((int) this.offset).getKey().userKey;
     persistent = (T) getDataStore()
             .createPersistentInstance(resultRecords.get((int) 
this.offset).getRecord(), fields);
     return true;

http://git-wip-us.apache.org/repos/asf/gora/blob/c485f5be/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeStore.java
----------------------------------------------------------------------
diff --git 
a/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeStore.java
 
b/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeStore.java
index 7fe7573..dfa8ed9 100644
--- 
a/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeStore.java
+++ 
b/gora-aerospike/src/main/java/org/apache/gora/aerospike/store/AerospikeStore.java
@@ -211,9 +211,27 @@ public class AerospikeStore<K, T extends PersistentBase> 
extends DataStoreBase<K
             
.delete(aerospikeParameters.getAerospikeMapping().getWritePolicy(), recordKey);
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @param query matching records to this query will be deleted
+   * @return the number of deleted records
+   */
   @Override
   public long deleteByQuery(Query<K, T> query) {
-    return 0;
+    Result<K, T> result = query.execute();
+    int deleteCount = 0;
+    try {
+      while(result.next()) {
+        if(aerospikeClient.delete(null,getAerospikeKey(result.getKey()))){
+          deleteCount++;
+        }
+      }
+      return deleteCount;
+    } catch (Exception e) {
+      LOG.error(e.getMessage(), e);
+      return -1;
+    }
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/gora/blob/c485f5be/gora-aerospike/src/test/java/org/apache/gora/aerospike/store/TestAerospikeStore.java
----------------------------------------------------------------------
diff --git 
a/gora-aerospike/src/test/java/org/apache/gora/aerospike/store/TestAerospikeStore.java
 
b/gora-aerospike/src/test/java/org/apache/gora/aerospike/store/TestAerospikeStore.java
index 317fb12..d88ea1a 100644
--- 
a/gora-aerospike/src/test/java/org/apache/gora/aerospike/store/TestAerospikeStore.java
+++ 
b/gora-aerospike/src/test/java/org/apache/gora/aerospike/store/TestAerospikeStore.java
@@ -19,12 +19,17 @@
 package org.apache.gora.aerospike.store;
 
 import org.apache.gora.aerospike.GoraAerospikeTestDriver;
+import org.apache.gora.examples.WebPageDataCreator;
+import org.apache.gora.examples.generated.WebPage;
+import org.apache.gora.query.Query;
 import org.apache.gora.store.DataStoreTestBase;
 import org.junit.ClassRule;
 import org.junit.Ignore;
 import org.junit.Test;
 import org.testcontainers.containers.GenericContainer;
 
+import static org.apache.gora.examples.WebPageDataCreator.URLS;
+
 /**
  * Test case for AerospikeStore.
  */
@@ -85,11 +90,14 @@ public class TestAerospikeStore extends DataStoreTestBase {
   }
 
   @Test
-  @Ignore("Functionality is to be implemented in the next iteration")
   @Override
   public void testQuery() throws Exception {
-    //done
-    //ToDo: clear the data before executing
+    // Clearing the test data in the database
+    Query<String, WebPage> query;
+    WebPageDataCreator.createWebPageData(webPageStore);
+    query = webPageStore.newQuery();
+    webPageStore.deleteByQuery(query);
+
     super.testQuery();
   }
 
@@ -115,9 +123,14 @@ public class TestAerospikeStore extends DataStoreTestBase {
   }
 
   @Test
-  @Ignore("Functionality is to be implemented in the next iteration as this 
incurs query execution")
   @Override
   public void testDelete() throws Exception {
+    // Clearing the test data in the database
+    Query<String, WebPage> query;
+    WebPageDataCreator.createWebPageData(webPageStore);
+    query = webPageStore.newQuery();
+    webPageStore.deleteByQuery(query);
+
     super.testDelete();
   }
 

Reply via email to