Repository: gora
Updated Branches:
  refs/heads/master c0c8c6135 -> 22f400d53


GORA_447 NPE Fix


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

Branch: refs/heads/master
Commit: b7fb9eea768a6daac93d1835726c737153f45ef4
Parents: 96e623b
Author: Kevin Ratnasekera <djkevi...@yahoo.com>
Authored: Mon Apr 25 18:51:58 2016 +0530
Committer: Kevin Ratnasekera <djkevi...@yahoo.com>
Committed: Mon Apr 25 18:51:58 2016 +0530

----------------------------------------------------------------------
 .../org/apache/gora/memory/store/MemStore.java  | 23 +++++++++++++++-----
 .../org/apache/gora/persistency/Persistent.java |  7 ++++++
 .../gora/persistency/impl/PersistentBase.java   | 11 ++++++++++
 .../apache/gora/memory/store/MemStoreTest.java  | 15 ++++++++-----
 .../gora/dynamodb/example/generated/Person.java |  2 ++
 .../dynamodb/example/generated/Webpage.java     |  2 ++
 .../dynamodb/compiler/GoraDynamoDBCompiler.java |  2 ++
 7 files changed, 50 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/gora/blob/b7fb9eea/gora-core/src/main/java/org/apache/gora/memory/store/MemStore.java
----------------------------------------------------------------------
diff --git a/gora-core/src/main/java/org/apache/gora/memory/store/MemStore.java 
b/gora-core/src/main/java/org/apache/gora/memory/store/MemStore.java
index 81dc3b9..481b2a7 100644
--- a/gora-core/src/main/java/org/apache/gora/memory/store/MemStore.java
+++ b/gora-core/src/main/java/org/apache/gora/memory/store/MemStore.java
@@ -106,13 +106,24 @@ public class MemStore<K, T extends PersistentBase> 
extends DataStoreBase<K, T> {
 
   @Override
   public long deleteByQuery(Query<K, T> query) {
-    try{
+    try {
       long deletedRows = 0;
-      Result<K,T> result = query.execute();
-
-      while(result.next()) {
-        if(delete(result.getKey()))
-          deletedRows++;
+      Result<K, T> result = query.execute();
+
+      String[] fields = getFieldsToQuery(query.getFields());
+      boolean isAllFields = Arrays.equals(fields, getFields());
+
+      while (result.next()) {
+        if (isAllFields) {
+          if (delete(result.getKey())) {
+            deletedRows++;
+            continue;
+          }
+        }
+        for (String field : fields) {
+          result.get().clearField(field);
+        }
+        deletedRows++;
       }
       return deletedRows;
     } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/gora/blob/b7fb9eea/gora-core/src/main/java/org/apache/gora/persistency/Persistent.java
----------------------------------------------------------------------
diff --git 
a/gora-core/src/main/java/org/apache/gora/persistency/Persistent.java 
b/gora-core/src/main/java/org/apache/gora/persistency/Persistent.java
index bd520a9..9d4b601 100644
--- a/gora-core/src/main/java/org/apache/gora/persistency/Persistent.java
+++ b/gora-core/src/main/java/org/apache/gora/persistency/Persistent.java
@@ -36,6 +36,13 @@ public interface Persistent extends Dirtyable {
   void clear();
 
   /**
+* Clears the inner state of the object based on field without any modification 
to the actual
+* data on the data store. This method should be called before re-using the 
existing fields on
+* object to hold the data for another result.
+*/
+  void clearField(String Field);
+
+  /**
 * Returns whether the field has been modified.
 *
 * @param fieldIndex

http://git-wip-us.apache.org/repos/asf/gora/blob/b7fb9eea/gora-core/src/main/java/org/apache/gora/persistency/impl/PersistentBase.java
----------------------------------------------------------------------
diff --git 
a/gora-core/src/main/java/org/apache/gora/persistency/impl/PersistentBase.java 
b/gora-core/src/main/java/org/apache/gora/persistency/impl/PersistentBase.java
index 56c4816..d436d56 100644
--- 
a/gora-core/src/main/java/org/apache/gora/persistency/impl/PersistentBase.java
+++ 
b/gora-core/src/main/java/org/apache/gora/persistency/impl/PersistentBase.java
@@ -197,6 +197,17 @@ public abstract class PersistentBase extends 
SpecificRecordBase implements
   }
 
   @Override
+  public void clearField(String field) {
+    Collection<Field> unmanagedFields = getUnmanagedFields();
+    Field specificField = getSchema().getField(field);
+    if (unmanagedFields.contains(specificField)) {
+      put(specificField.pos(), 
PersistentData.get().deepCopy(specificField.schema(),
+              PersistentData.get().getDefaultValue(specificField)));
+    }
+    clearDirynessIfFieldIsDirtyable(specificField.pos());
+  }
+
+  @Override
   public boolean equals(Object that) {
     if (that == this) {
       return true;

http://git-wip-us.apache.org/repos/asf/gora/blob/b7fb9eea/gora-core/src/test/java/org/apache/gora/memory/store/MemStoreTest.java
----------------------------------------------------------------------
diff --git 
a/gora-core/src/test/java/org/apache/gora/memory/store/MemStoreTest.java 
b/gora-core/src/test/java/org/apache/gora/memory/store/MemStoreTest.java
index 0c56d8e..49db17a 100644
--- a/gora-core/src/test/java/org/apache/gora/memory/store/MemStoreTest.java
+++ b/gora-core/src/test/java/org/apache/gora/memory/store/MemStoreTest.java
@@ -22,6 +22,8 @@ import java.io.IOException;
 import org.apache.gora.examples.WebPageDataCreator;
 import org.apache.gora.examples.generated.Employee;
 import org.apache.gora.examples.generated.WebPage;
+import org.apache.gora.persistency.BeanFactory;
+import org.apache.gora.persistency.impl.BeanFactoryImpl;
 import org.apache.gora.query.Query;
 import org.apache.gora.store.DataStore;
 import org.apache.gora.store.DataStoreFactory;
@@ -69,7 +71,7 @@ public class MemStoreTest extends DataStoreTestBase {
   @SuppressWarnings("unchecked")
   @Override
   protected DataStore<String, WebPage> createWebPageDataStore() throws 
IOException {
-    return DataStoreFactory.getDataStore(MemStore.class, String.class, 
Employee.class, conf);
+    return DataStoreFactory.getDataStore(MemStore.class, String.class, 
WebPage.class, conf);
   }
 
   @Test
@@ -110,11 +112,12 @@ public class MemStoreTest extends DataStoreTestBase {
   @Test
   public void testGetWithFields() {}
 
-  @Ignore("GORA-447")
   @Test
   public void testMemStoreDeleteByQueryFields() throws Exception {
 
     DataStore<String, WebPage> store = new MemStore<>();
+    BeanFactory<String, WebPage> beanFactory = new 
BeanFactoryImpl<>(String.class, WebPage.class);
+    store.setBeanFactory(beanFactory);
     Query<String, WebPage> query;
 
     //test 5 - delete all with some fields
@@ -124,9 +127,9 @@ public class MemStoreTest extends DataStoreTestBase {
     query.setFields("outlinks", "parsedContent", "content");
     
     Query<String, WebPage> newQuery = store.newQuery();
-    newQuery.setStartKey(URLS[0]);
-    newQuery.setEndKey(URLS[9]);
-    //newQuery.setFields("outlinks", "parsedContent", "content");
+    newQuery.setStartKey(SORTED_URLS[0]);
+    newQuery.setEndKey(SORTED_URLS[9]);
+    newQuery.setFields("outlinks", "parsedContent", "content");
 
     DataStoreTestUtil.assertNumResults(newQuery, URLS.length);
     store.deleteByQuery(query);
@@ -178,7 +181,7 @@ public class MemStoreTest extends DataStoreTestBase {
     for (int i = 0; i < URLS.length; i++) {
       WebPage page = store.get(URLS[i]);
       assertNotNull(page);
-      if( URLS[i].compareTo(startKey) < 0 || URLS[i].compareTo(endKey) >= 0) {
+      if( URLS[i].compareTo(startKey) < 0 || URLS[i].compareTo(endKey) > 0) {
         //not deleted
         DataStoreTestUtil.assertWebPage(page, i);
       } else {

http://git-wip-us.apache.org/repos/asf/gora/blob/b7fb9eea/gora-dynamodb/src/examples/java/org/apache/gora/dynamodb/example/generated/Person.java
----------------------------------------------------------------------
diff --git 
a/gora-dynamodb/src/examples/java/org/apache/gora/dynamodb/example/generated/Person.java
 
b/gora-dynamodb/src/examples/java/org/apache/gora/dynamodb/example/generated/Person.java
index 471fb59..f9c3ca6 100644
--- 
a/gora-dynamodb/src/examples/java/org/apache/gora/dynamodb/example/generated/Person.java
+++ 
b/gora-dynamodb/src/examples/java/org/apache/gora/dynamodb/example/generated/Person.java
@@ -51,6 +51,8 @@ public class Person implements Persistent {
     @Override
     public void clear() { }
     @Override
+    public void clearField(String Field) { }
+    @Override
     public Person clone() { return null; }
     @Override
     public boolean isDirty() { return false; }

http://git-wip-us.apache.org/repos/asf/gora/blob/b7fb9eea/gora-dynamodb/src/examples/java/org/apache/gora/dynamodb/example/generated/Webpage.java
----------------------------------------------------------------------
diff --git 
a/gora-dynamodb/src/examples/java/org/apache/gora/dynamodb/example/generated/Webpage.java
 
b/gora-dynamodb/src/examples/java/org/apache/gora/dynamodb/example/generated/Webpage.java
index df9eb80..e3b6024 100644
--- 
a/gora-dynamodb/src/examples/java/org/apache/gora/dynamodb/example/generated/Webpage.java
+++ 
b/gora-dynamodb/src/examples/java/org/apache/gora/dynamodb/example/generated/Webpage.java
@@ -44,6 +44,8 @@ public class Webpage implements Persistent {
     @Override
     public void clear() { }
     @Override
+    public void clearField(String Field) { }
+    @Override
     public Webpage clone() { return null; }
     @Override
     public boolean isDirty() { return false; }

http://git-wip-us.apache.org/repos/asf/gora/blob/b7fb9eea/gora-dynamodb/src/main/java/org/apache/gora/dynamodb/compiler/GoraDynamoDBCompiler.java
----------------------------------------------------------------------
diff --git 
a/gora-dynamodb/src/main/java/org/apache/gora/dynamodb/compiler/GoraDynamoDBCompiler.java
 
b/gora-dynamodb/src/main/java/org/apache/gora/dynamodb/compiler/GoraDynamoDBCompiler.java
index be38e36..906773b 100644
--- 
a/gora-dynamodb/src/main/java/org/apache/gora/dynamodb/compiler/GoraDynamoDBCompiler.java
+++ 
b/gora-dynamodb/src/main/java/org/apache/gora/dynamodb/compiler/GoraDynamoDBCompiler.java
@@ -291,6 +291,8 @@ public class GoraDynamoDBCompiler {
     line(pIden, "@Override");
     line(pIden, "public void clear() { }");
     line(pIden, "@Override");
+    line(pIden, "public void clearField(String Field) { }");
+    line(pIden, "@Override");
     line(pIden, "public " + tabName + " clone() { return null; }");
     line(pIden, "@Override");
     line(pIden, "public boolean isDirty() { return false; }");

Reply via email to