com.google.datastore.v1.Query getPb(String namespace) { if (filters.size() == 1) { query.setFilter(filters.get(0).getPb(namespace)); } else if (filters.size() > 1) { query.setFilter(com.google.datastore.v1.Filter.newBuilder() .setCompositeFilter( com.google.datastore.v1.CompositeFilter.newBuilder() .addAllFilters(filters.stream().map(f -> f.getPb(namespace)).collect(Collectors.toList())) .setOp(com.google.datastore.v1.CompositeFilter.Operator.AND))); } return query.build(); } }
/** * List the greetings in the specified guestbook. */ private void listGreetings(String guestbookName) throws DatastoreException { Query.Builder query = Query.newBuilder(); query.addKindBuilder().setName(GREETING_KIND); query.setFilter(makeFilter(KEY_PROPERTY, PropertyFilter.Operator.HAS_ANCESTOR, makeValue(makeKey(GUESTBOOK_KIND, guestbookName)))); query.addOrder(makeOrder(DATE_PROPERTY, PropertyOrder.Direction.DESCENDING)); List<Entity> greetings = runQuery(query.build()); if (greetings.size() == 0) { System.out.println("no greetings in " + guestbookName); } for (Entity greeting : greetings) { Map<String, Value> propertyMap = greeting.getProperties(); System.out.println( DatastoreHelper.toDate(propertyMap.get(DATE_PROPERTY)) + ": " + DatastoreHelper.getString(propertyMap.get(USER_PROPERTY)) + " says " + DatastoreHelper.getString(propertyMap.get(MESSAGE_PROPERTY))); } }
/** * Create a new {@link Query} given the query and range. * * @param lastKey the previous key. If null then assumed to be the beginning. * @param nextKey the next key. If null then assumed to be the end. * @param query the desired query. */ private Query createSplit(Key lastKey, Key nextKey, Query query) { if (lastKey == null && nextKey == null) { return query; } List<Filter> keyFilters = new ArrayList<Filter>(); if (query.hasFilter()) { keyFilters.add(query.getFilter()); } if (lastKey != null) { Filter lowerBound = DatastoreHelper.makeFilter(DatastoreHelper.KEY_PROPERTY_NAME, PropertyFilter.Operator.GREATER_THAN_OR_EQUAL, DatastoreHelper.makeValue(lastKey)).build(); keyFilters.add(lowerBound); } if (nextKey != null) { Filter upperBound = DatastoreHelper.makeFilter(DatastoreHelper.KEY_PROPERTY_NAME, PropertyFilter.Operator.LESS_THAN, DatastoreHelper.makeValue(nextKey)).build(); keyFilters.add(upperBound); } return Query.newBuilder(query).setFilter(makeAndFilter(keyFilters)).build(); }
queryBuilder.setFilter( makeAndFilter( makeFilter("kind_name", EQUAL, makeValue(ourKind).build()).build(),
queryPb.setFilter(filter.toPb());
/** * Create a new {@link Query} given the query and range. * * @param lastKey the previous key. If null then assumed to be the beginning. * @param nextKey the next key. If null then assumed to be the end. * @param query the desired query. */ private Query createSplit(Key lastKey, Key nextKey, Query query) { if (lastKey == null && nextKey == null) { return query; } List<Filter> keyFilters = new ArrayList<Filter>(); if (query.hasFilter()) { keyFilters.add(query.getFilter()); } if (lastKey != null) { Filter lowerBound = DatastoreHelper.makeFilter(DatastoreHelper.KEY_PROPERTY_NAME, PropertyFilter.Operator.GREATER_THAN_OR_EQUAL, DatastoreHelper.makeValue(lastKey)).build(); keyFilters.add(lowerBound); } if (nextKey != null) { Filter upperBound = DatastoreHelper.makeFilter(DatastoreHelper.KEY_PROPERTY_NAME, PropertyFilter.Operator.LESS_THAN, DatastoreHelper.makeValue(nextKey)).build(); keyFilters.add(upperBound); } return Query.newBuilder(query).setFilter(makeAndFilter(keyFilters)).build(); }
/** Builds a per-kind statistics query for the given timestamp and namespace. */ private static Query makeStatKindQuery(String namespace, long timestamp) { Query.Builder statQuery = Query.newBuilder(); if (namespace == null) { statQuery.addKindBuilder().setName("__Stat_Kind__"); } else { statQuery.addKindBuilder().setName("__Stat_Ns_Kind__"); } statQuery.setFilter( makeAndFilter( makeFilter("kind_name", EQUAL, makeValue(KIND).build()).build(), makeFilter("timestamp", EQUAL, makeValue(timestamp * 1000000L).build()).build())); return statQuery.build(); }
Key acmeKey = makeKey("Company", "Acme").build(); Query.Builder query = Query.newBuilder(); query.addKindBuilder().setName("Person"); query.setFilter(makeFilter( makeFilter("__key__", HAS_ANCESTOR, makeValue(acmeKey)).build(), makeFilter("age", GREATER_THAN, makeValue(20)).build())); query.addOrder(makeOrder("age", ASCENDING));
/** Build a datastore ancestor query for the specified kind, namespace and ancestor. */ static Query makeAncestorKindQuery(String kind, @Nullable String namespace, String ancestor) { Query.Builder q = Query.newBuilder(); q.addKindBuilder().setName(kind); q.setFilter( makeFilter( "__key__", PropertyFilter.Operator.HAS_ANCESTOR, makeValue(makeAncestorKey(namespace, kind, ancestor)))); return q.build(); }
queryPb.setFilter(filter.toPb());