From dc4d04c132a4bf5392a39a8e67ad76685a511c28 Mon Sep 17 00:00:00 2001 From: Tom Morris Date: Fri, 26 Jul 2013 15:20:44 -0400 Subject: [PATCH] Allow arrays containing null in Filter & ForEach - fixes #741 --- .../google/refine/grel/controls/Filter.java | 18 +++++++++++++++--- .../google/refine/grel/controls/ForEach.java | 18 +++++++++++++++--- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/main/src/com/google/refine/grel/controls/Filter.java b/main/src/com/google/refine/grel/controls/Filter.java index d41e7b8db..1ae69f51c 100644 --- a/main/src/com/google/refine/grel/controls/Filter.java +++ b/main/src/com/google/refine/grel/controls/Filter.java @@ -81,7 +81,11 @@ public class Filter implements Control { results = new ArrayList(values.length); for (Object v : values) { - bindings.put(name, v); + if (v != null) { + bindings.put(name, v); + } else { + bindings.remove(name); + } Object r = args[2].evaluate(bindings); if (r instanceof Boolean && ((Boolean) r).booleanValue()) { @@ -97,7 +101,11 @@ public class Filter implements Control { try { Object v = a.get(i); - bindings.put(name, v); + if (v != null) { + bindings.put(name, v); + } else { + bindings.remove(name); + } Object r = args[2].evaluate(bindings); if (r instanceof Boolean && ((Boolean) r).booleanValue()) { @@ -113,7 +121,11 @@ public class Filter implements Control { results = new ArrayList(collection.size()); for (Object v : collection) { - bindings.put(name, v); + if (v != null) { + bindings.put(name, v); + } else { + bindings.remove(name); + } Object r = args[2].evaluate(bindings); if (r instanceof Boolean && ((Boolean) r).booleanValue()) { diff --git a/main/src/com/google/refine/grel/controls/ForEach.java b/main/src/com/google/refine/grel/controls/ForEach.java index 977f4633b..c02cae44b 100644 --- a/main/src/com/google/refine/grel/controls/ForEach.java +++ b/main/src/com/google/refine/grel/controls/ForEach.java @@ -81,7 +81,11 @@ public class ForEach implements Control { results = new ArrayList(values.length); for (Object v : values) { - bindings.put(name, v); + if (v != null) { + bindings.put(name, v); + } else { + bindings.remove(name); + } Object r = args[2].evaluate(bindings); @@ -96,7 +100,11 @@ public class ForEach implements Control { try { Object v = a.get(i); - bindings.put(name, v); + if (v != null) { + bindings.put(name, v); + } else { + bindings.remove(name); + } Object r = args[2].evaluate(bindings); @@ -111,7 +119,11 @@ public class ForEach implements Control { results = new ArrayList(collection.size()); for (Object v : collection) { - bindings.put(name, v); + if (v != null) { + bindings.put(name, v); + } else { + bindings.remove(name); + } Object r = args[2].evaluate(bindings);