Search in sources :

Example 1 with Filter

use of com.google.firebase.firestore.core.Filter in project firebase-android-sdk by firebase.

the class RemoteSerializer method encodeCompositeFilter.

@VisibleForTesting
StructuredQuery.Filter encodeCompositeFilter(com.google.firebase.firestore.core.CompositeFilter compositeFilter) {
    List<StructuredQuery.Filter> protos = new ArrayList<>(compositeFilter.getFilters().size());
    for (Filter filter : compositeFilter.getFilters()) {
        protos.add(encodeFilter(filter));
    }
    // If there's only one filter in the composite filter, use it directly.
    if (protos.size() == 1) {
        return protos.get(0);
    }
    CompositeFilter.Builder composite = CompositeFilter.newBuilder();
    composite.setOp(compositeFilter.getOperator());
    composite.addAllFilters(protos);
    return StructuredQuery.Filter.newBuilder().setCompositeFilter(composite).build();
}
Also used : CompositeFilter(com.google.firestore.v1.StructuredQuery.CompositeFilter) FieldFilter(com.google.firebase.firestore.core.FieldFilter) CompositeFilter(com.google.firestore.v1.StructuredQuery.CompositeFilter) UnaryFilter(com.google.firestore.v1.StructuredQuery.UnaryFilter) Filter(com.google.firebase.firestore.core.Filter) ArrayList(java.util.ArrayList) VisibleForTesting(androidx.annotation.VisibleForTesting)

Example 2 with Filter

use of com.google.firebase.firestore.core.Filter in project firebase-android-sdk by firebase.

the class RemoteSerializer method decodeQueryTarget.

public com.google.firebase.firestore.core.Target decodeQueryTarget(String parent, StructuredQuery query) {
    ResourcePath path = decodeQueryPath(parent);
    String collectionGroup = null;
    int fromCount = query.getFromCount();
    if (fromCount > 0) {
        hardAssert(fromCount == 1, "StructuredQuery.from with more than one collection is not supported.");
        CollectionSelector from = query.getFrom(0);
        if (from.getAllDescendants()) {
            collectionGroup = from.getCollectionId();
        } else {
            path = path.append(from.getCollectionId());
        }
    }
    List<Filter> filterBy;
    if (query.hasWhere()) {
        filterBy = decodeFilters(query.getWhere());
    } else {
        filterBy = Collections.emptyList();
    }
    List<OrderBy> orderBy;
    int orderByCount = query.getOrderByCount();
    if (orderByCount > 0) {
        orderBy = new ArrayList<>(orderByCount);
        for (int i = 0; i < orderByCount; i++) {
            orderBy.add(decodeOrderBy(query.getOrderBy(i)));
        }
    } else {
        orderBy = Collections.emptyList();
    }
    long limit = com.google.firebase.firestore.core.Target.NO_LIMIT;
    if (query.hasLimit()) {
        limit = query.getLimit().getValue();
    }
    Bound startAt = null;
    if (query.hasStartAt()) {
        startAt = new Bound(query.getStartAt().getValuesList(), query.getStartAt().getBefore());
    }
    Bound endAt = null;
    if (query.hasEndAt()) {
        endAt = new Bound(query.getEndAt().getValuesList(), !query.getEndAt().getBefore());
    }
    return new com.google.firebase.firestore.core.Target(path, collectionGroup, filterBy, orderBy, limit, startAt, endAt);
}
Also used : OrderBy(com.google.firebase.firestore.core.OrderBy) Bound(com.google.firebase.firestore.core.Bound) DocumentsTarget(com.google.firestore.v1.Target.DocumentsTarget) Target(com.google.firestore.v1.Target) QueryTarget(com.google.firestore.v1.Target.QueryTarget) ResourcePath(com.google.firebase.firestore.model.ResourcePath) CollectionSelector(com.google.firestore.v1.StructuredQuery.CollectionSelector) FieldFilter(com.google.firebase.firestore.core.FieldFilter) CompositeFilter(com.google.firestore.v1.StructuredQuery.CompositeFilter) UnaryFilter(com.google.firestore.v1.StructuredQuery.UnaryFilter) Filter(com.google.firebase.firestore.core.Filter)

Example 3 with Filter

use of com.google.firebase.firestore.core.Filter in project firebase-android-sdk by firebase.

the class BundleSerializer method decodeBundledQuery.

private BundledQuery decodeBundledQuery(JSONObject bundledQuery) throws JSONException {
    JSONObject structuredQuery = bundledQuery.getJSONObject("structuredQuery");
    verifyNoSelect(structuredQuery);
    ResourcePath parent = decodeName(bundledQuery.getString("parent"));
    JSONArray from = structuredQuery.getJSONArray("from");
    verifyCollectionSelector(from);
    JSONObject collectionSelector = from.getJSONObject(0);
    boolean allDescendants = collectionSelector.optBoolean("allDescendants", false);
    @Nullable String collectionGroup = null;
    if (allDescendants) {
        collectionGroup = collectionSelector.getString("collectionId");
    } else {
        parent = parent.append(collectionSelector.getString("collectionId"));
    }
    List<Filter> filters = decodeWhere(structuredQuery.optJSONObject("where"));
    List<OrderBy> orderBys = decodeOrderBy(structuredQuery.optJSONArray("orderBy"));
    @Nullable Bound startAt = decodeStartAtBound(structuredQuery.optJSONObject("startAt"));
    @Nullable Bound endAt = decodeEndAtBound(structuredQuery.optJSONObject("endAt"));
    verifyNoOffset(structuredQuery);
    int limit = decodeLimit(structuredQuery);
    Query.LimitType limitType = decodeLimitType(bundledQuery);
    return new BundledQuery(new Target(parent, collectionGroup, filters, orderBys, limit, startAt, endAt), limitType);
}
Also used : OrderBy(com.google.firebase.firestore.core.OrderBy) Query(com.google.firebase.firestore.core.Query) JSONArray(org.json.JSONArray) Bound(com.google.firebase.firestore.core.Bound) ByteString(com.google.protobuf.ByteString) Target(com.google.firebase.firestore.core.Target) ResourcePath(com.google.firebase.firestore.model.ResourcePath) JSONObject(org.json.JSONObject) FieldFilter(com.google.firebase.firestore.core.FieldFilter) Filter(com.google.firebase.firestore.core.Filter) Nullable(androidx.annotation.Nullable)

Example 4 with Filter

use of com.google.firebase.firestore.core.Filter in project firebase-android-sdk by firebase.

the class SQLiteIndexManagerTest method testEqualsWithNotEqualsOnSameField.

@Test
public void testEqualsWithNotEqualsOnSameField() {
    setUpSingleValueFilter();
    Object[][] filtersAndResults = new Object[][] { new Filter[] { filter("count", ">", 1), filter("count", "!=", 2) }, new String[] { "coll/val3" }, new Filter[] { filter("count", "==", 1), filter("count", "!=", 2) }, new String[] { "coll/val1" }, new Filter[] { filter("count", "==", 1), filter("count", "!=", 1) }, new String[] {}, new Filter[] { filter("count", ">", 2), filter("count", "!=", 2) }, new String[] { "coll/val3" }, new Filter[] { filter("count", ">=", 2), filter("count", "!=", 2) }, new String[] { "coll/val3" }, new Filter[] { filter("count", "<=", 2), filter("count", "!=", 2) }, new String[] { "coll/val1" }, new Filter[] { filter("count", "<=", 2), filter("count", "!=", 1) }, new String[] { "coll/val2" }, new Filter[] { filter("count", "<", 2), filter("count", "!=", 2) }, new String[] { "coll/val1" }, new Filter[] { filter("count", "<", 2), filter("count", "!=", 1) }, new String[] {}, new Filter[] { filter("count", ">", 2), filter("count", "not-in", Collections.singletonList(3)) }, new String[] {}, new Filter[] { filter("count", ">=", 2), filter("count", "not-in", Collections.singletonList(3)) }, new String[] { "coll/val2" }, new Filter[] { filter("count", ">=", 2), filter("count", "not-in", Arrays.asList(3, 3)) }, new String[] { "coll/val2" }, new Filter[] { filter("count", ">", 1), filter("count", "<", 3), filter("count", "!=", 2) }, new String[] {}, new Filter[] { filter("count", ">=", 1), filter("count", "<", 3), filter("count", "!=", 2) }, new String[] { "coll/val1" }, new Filter[] { filter("count", ">=", 1), filter("count", "<=", 3), filter("count", "!=", 2) }, new String[] { "coll/val1", "coll/val3" }, new Filter[] { filter("count", ">", 1), filter("count", "<=", 3), filter("count", "!=", 2) }, new String[] { "coll/val3" } };
    for (int i = 0; i < filtersAndResults.length; i += 2) {
        Query query = query("coll");
        for (Filter filter : (Filter[]) filtersAndResults[i]) {
            query = query.filter(filter);
        }
        verifyResults(query, (String[]) filtersAndResults[i + 1]);
    }
}
Also used : Query(com.google.firebase.firestore.core.Query) Filter(com.google.firebase.firestore.core.Filter) Test(org.junit.Test)

Example 5 with Filter

use of com.google.firebase.firestore.core.Filter in project firebase-android-sdk by firebase.

the class SQLiteIndexManager method getSubTargets.

private List<Target> getSubTargets(Target target) {
    if (targetToDnfSubTargets.containsKey(target)) {
        return targetToDnfSubTargets.get(target);
    }
    List<Target> subTargets = new ArrayList<>();
    if (target.getFilters().isEmpty()) {
        subTargets.add(target);
    } else {
        // There is an implicit AND operation between all the filters stored in the target.
        List<Filter> dnf = LogicUtils.DnfTransform(new CompositeFilter(target.getFilters(), StructuredQuery.CompositeFilter.Operator.AND));
        for (Filter term : dnf) {
            subTargets.add(new Target(target.getPath(), target.getCollectionGroup(), term.getFilters(), target.getOrderBy(), target.getLimit(), target.getStartAt(), target.getEndAt()));
        }
    }
    targetToDnfSubTargets.put(target, subTargets);
    return subTargets;
}
Also used : Target(com.google.firebase.firestore.core.Target) CompositeFilter(com.google.firebase.firestore.core.CompositeFilter) FieldFilter(com.google.firebase.firestore.core.FieldFilter) Filter(com.google.firebase.firestore.core.Filter) CompositeFilter(com.google.firebase.firestore.core.CompositeFilter) ArrayList(java.util.ArrayList)

Aggregations

Filter (com.google.firebase.firestore.core.Filter)5 FieldFilter (com.google.firebase.firestore.core.FieldFilter)4 Bound (com.google.firebase.firestore.core.Bound)2 OrderBy (com.google.firebase.firestore.core.OrderBy)2 Query (com.google.firebase.firestore.core.Query)2 Target (com.google.firebase.firestore.core.Target)2 ResourcePath (com.google.firebase.firestore.model.ResourcePath)2 CompositeFilter (com.google.firestore.v1.StructuredQuery.CompositeFilter)2 UnaryFilter (com.google.firestore.v1.StructuredQuery.UnaryFilter)2 ArrayList (java.util.ArrayList)2 Nullable (androidx.annotation.Nullable)1 VisibleForTesting (androidx.annotation.VisibleForTesting)1 CompositeFilter (com.google.firebase.firestore.core.CompositeFilter)1 CollectionSelector (com.google.firestore.v1.StructuredQuery.CollectionSelector)1 Target (com.google.firestore.v1.Target)1 DocumentsTarget (com.google.firestore.v1.Target.DocumentsTarget)1 QueryTarget (com.google.firestore.v1.Target.QueryTarget)1 ByteString (com.google.protobuf.ByteString)1 JSONArray (org.json.JSONArray)1 JSONObject (org.json.JSONObject)1