Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
cbe1932
OR Query Implementation
tom-andersen May 29, 2023
e2623f6
Pretty
tom-andersen May 29, 2023
aa2a045
Add includes
tom-andersen Jun 13, 2023
516ff39
Fix from PR feedback
tom-andersen Jun 13, 2023
f858b7b
Fix variadic parameters
tom-andersen Jun 15, 2023
9a0f88a
Add and fix tests
tom-andersen Jun 16, 2023
fd4e5dd
Add/fix method descriptions.
tom-andersen Jun 19, 2023
602a463
Add/fix constructor and class descriptions.
tom-andersen Jun 19, 2023
959f53b
Add method description to disjunction/conjunction.
tom-andersen Jun 19, 2023
0f3e62f
Add tests. Revealed bugs to be fixed.
tom-andersen Jun 20, 2023
95b2a8c
Fix type
tom-andersen Jun 20, 2023
787ec3c
Add test
tom-andersen Jun 20, 2023
56f15c2
Android implementation
tom-andersen Jun 22, 2023
1a6d116
Pretty
tom-andersen Jun 22, 2023
a26cf80
Pretty
tom-andersen Jun 22, 2023
62fcf27
Pretty
tom-andersen Jun 22, 2023
bc3cba0
Remove const
tom-andersen Jun 22, 2023
fe5b6e8
Pretty
tom-andersen Jun 22, 2023
a232d50
Fixes from code review
tom-andersen Jun 28, 2023
1c71573
Merge branch 'main' into tomandersen/or_query
tom-andersen Jun 28, 2023
d6961a7
Release notes
tom-andersen Jun 29, 2023
678262c
Merge branch 'main' into tomandersen/or_query
tom-andersen Jun 29, 2023
6f3fc73
Release notes
tom-andersen Jun 29, 2023
a43892b
Merge remote-tracking branch 'origin/main' into tomandersen/or_query
tom-andersen Jul 17, 2023
bfa8e5e
Merge remote-tracking branch 'origin/main' into tomandersen/or_query
tom-andersen Sep 18, 2023
156ea40
Fix Android OR Query
tom-andersen Sep 21, 2023
ab93d43
Release notes.
tom-andersen Sep 21, 2023
a81a803
Merge remote-tracking branch 'origin/main' into tomandersen/or_query
tom-andersen Sep 21, 2023
bda2909
Fix release notes.
tom-andersen Sep 21, 2023
d7555da
Format
tom-andersen Sep 21, 2023
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Fix Android OR Query
  • Loading branch information
tom-andersen committed Sep 21, 2023
commit 156ea40ff7d12c24cfc3574eceddb88d65a19a64
48 changes: 30 additions & 18 deletions firestore/src/android/filter_android.cc
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ using jni::Local;
using jni::Object;
using jni::StaticMethod;

jclass filter_class = nullptr;
constexpr char kClassName[] =
PROGUARD_KEEP_CLASS "com/google/firebase/firestore/Filter";
StaticMethod<Object> kEqualTo(
Expand Down Expand Up @@ -75,11 +76,11 @@ StaticMethod<Object> kArrayContainsAny(
"(Lcom/google/firebase/firestore/FieldPath;Ljava/util/List;)"
"Lcom/google/firebase/firestore/Filter;");
StaticMethod<Object> kIn(
"in",
"inArray",
"(Lcom/google/firebase/firestore/FieldPath;Ljava/util/List;)"
"Lcom/google/firebase/firestore/Filter;");
StaticMethod<Object> kNotIn(
"notIn",
"notInArray",
"(Lcom/google/firebase/firestore/FieldPath;Ljava/util/List;)"
"Lcom/google/firebase/firestore/Filter;");
StaticMethod<Object> kAnd("and",
Expand All @@ -91,13 +92,17 @@ StaticMethod<Object> kOr("or",
} // namespace

void FilterInternal::Initialize(jni::Loader& loader) {
filter_class = loader.LoadClass(kClassName);
loader.LoadClass(kClassName, kEqualTo, kNotEqualTo, kLessThan,
kLessThanOrEqualTo, kGreaterThan, kGreaterThanOrEqualTo,
kArrayContains, kArrayContainsAny, kIn, kNotIn, kAnd, kOr);
}

FilterInternal::FilterInternal(jni::Object&& object, bool is_empty)
: object_(object), is_empty_(is_empty) {}
FilterInternal::FilterInternal(const jni::Object& obj, bool is_empty)
: is_empty_(is_empty) {
Env env = GetEnv();
obj_.reset(env, obj);
}

Filter FilterInternal::EqualTo(const FieldPath& field,
const FieldValue& value) {
Expand Down Expand Up @@ -164,9 +169,9 @@ Filter FilterInternal::Where(const FieldPath& field,
const FieldValue& value) {
Env env = GetEnv();
Local<Object> java_field = FieldPathConverter::Create(env, field);
Object filter =
Local<Object> filter =
env.Call(method, java_field, FieldValueInternal::ToJava(value));
return Filter(new FilterInternal(std::move(filter), false));
return Filter(new FilterInternal(filter, false));
}

Filter FilterInternal::Where(const FieldPath& field,
Expand All @@ -180,25 +185,32 @@ Filter FilterInternal::Where(const FieldPath& field,
}

Local<Object> java_field = FieldPathConverter::Create(env, field);
Object filter = env.Call(method, java_field, java_values);
return Filter(new FilterInternal(std::move(filter), false));
Local<Object> filter = env.Call(method, java_field, java_values);
return Filter(new FilterInternal(filter, false));
}

Filter FilterInternal::Where(const StaticMethod<Object>& method,
const std::vector<Filter>& filters) {
Env env = GetEnv();
size_t size = filters.size();
Local<Array<Object>> java_filters = env.NewArray(size, Object::GetClass());
bool is_empty = true;
for (int i = 0; i < size; ++i) {
FilterInternal* internal_filter = filters[i].internal_;
if (!internal_filter->IsEmpty()) {
is_empty = false;
std::vector<int> non_empty_indexes;
size_t filters_size = filters.size();
for (int i = 0; i < filters_size; ++i) {
if (!filters[i].internal_->IsEmpty()) {
non_empty_indexes.push_back(i);
}
java_filters.Set(env, i, internal_filter->object_);
}
Object filter = env.Call(method, java_filters);
return Filter(new FilterInternal(std::move(filter), is_empty));
size_t non_empty_size = non_empty_indexes.size();
Local<Array<Object>> java_filters = env.NewArray(non_empty_size, filter_class);
for (int i = 0; i < non_empty_size; ++i) {
java_filters.Set(env, i, filters[non_empty_indexes[i]].internal_->ToJava());
}
Local<Object> filter = env.Call(method, java_filters);
return Filter(new FilterInternal(filter, non_empty_size == 0));
}

Local<Object> FilterInternal::ToJava() const {
Env env = GetEnv();
return obj_.get(env);
}

bool operator==(const FilterInternal& lhs, const FilterInternal& rhs) {
Expand Down
6 changes: 3 additions & 3 deletions firestore/src/android/filter_android.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class FilterInternal final {
public:
static void Initialize(jni::Loader& loader);

FilterInternal(jni::Object&& object, bool is_empty);
FilterInternal(const jni::Object& object, bool is_empty);

static Filter ArrayContains(const FieldPath& field, const FieldValue& value);
static Filter ArrayContainsAny(const FieldPath& field,
Expand All @@ -51,7 +51,7 @@ class FilterInternal final {
static Filter Or(const std::vector<Filter>& filters);
static Filter And(const std::vector<Filter>& filters);

const jni::Global<jni::Object>& ToJava() const { return object_; }
jni::Local<jni::Object> ToJava() const;

private:
friend class Filter;
Expand All @@ -63,7 +63,7 @@ class FilterInternal final {

static jni::Env GetEnv();

jni::Global<jni::Object> object_;
jni::ArenaRef obj_;
const bool is_empty_;

// A generalized function for all WhereFoo calls.
Expand Down
2 changes: 2 additions & 0 deletions firestore/src/android/firestore_android.cc
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
#include "firestore/src/android/exception_android.h"
#include "firestore/src/android/field_path_android.h"
#include "firestore/src/android/field_value_android.h"
#include "firestore/src/android/filter_android.h"
#include "firestore/src/android/geo_point_android.h"
#include "firestore/src/android/jni_runnable_android.h"
#include "firestore/src/android/lambda_event_listener.h"
Expand Down Expand Up @@ -339,6 +340,7 @@ bool FirestoreInternal::Initialize(App* app) {
ExceptionInternal::Initialize(loader);
FieldPathConverter::Initialize(loader);
FieldValueInternal::Initialize(loader);
FilterInternal::Initialize(loader);
GeoPointInternal::Initialize(loader);
JniRunnableBase::Initialize(loader);
ListenerRegistrationInternal::Initialize(loader);
Expand Down