/** * Add a constraint to the query that requires a particular key's value does not match another * AVQuery. This only works on keys whose values are AVObjects or lists of AVObjects. * * @param key The key to check. * @param query The query that the value should not match * @return Returns the query so you can chain this call. */ public AVQuery<T> whereDoesNotMatchQuery(String key, AVQuery<?> query) { Map<String, Object> map = AVUtils.createMap("className", query.className); map.put("where", query.conditions.compileWhereOperationMap()); addWhereItem(key, "$notInQuery", map); return this; }
/** * Add a constraint to the query that requires a particular key's value does not match another * AVQuery. This only works on keys whose values are AVObjects or lists of AVObjects. * * @param key The key to check. * @param query The query that the value should not match * @return Returns the query so you can chain this call. */ public AVQuery<T> whereDoesNotMatchQuery(String key, AVQuery<?> query) { Map<String, Object> map = AVUtils.createMap("className", query.className); map.put("where", query.conditions.compileWhereOperationMap()); addWhereItem(key, "$notInQuery", map); return this; }
/** * Add a constraint to the query that requires a particular key's value does not match any value * for a key in the results of another AVQuery. * * @param key The key whose value is being checked and excluded * @param keyInQuery The key in the objects from the sub query to look in * @param query The sub query to run * @return Returns the query so you can chain this call. */ public AVQuery<T> whereDoesNotMatchKeyInQuery(String key, String keyInQuery, AVQuery<?> query) { Map<String, Object> map = AVUtils.createMap("className", query.className); map.put("where", query.conditions.compileWhereOperationMap()); Map<String, Object> queryMap = AVUtils.createMap("query", map); queryMap.put("key", keyInQuery); addWhereItem(key, "$dontSelect", queryMap); return this; }
/** * Add a constraint to the query that requires a particular key's value does not match any value * for a key in the results of another AVQuery. * * @param key The key whose value is being checked and excluded * @param keyInQuery The key in the objects from the sub query to look in * @param query The sub query to run * @return Returns the query so you can chain this call. */ public AVQuery<T> whereDoesNotMatchKeyInQuery(String key, String keyInQuery, AVQuery<?> query) { Map<String, Object> map = AVUtils.createMap("className", query.className); map.put("where", query.conditions.compileWhereOperationMap()); Map<String, Object> queryMap = AVUtils.createMap("query", map); queryMap.put("key", keyInQuery); addWhereItem(key, "$dontSelect", queryMap); return this; }
/** * Add a constraint to the query that requires a particular key's value matches a value for a key * in the results of another AVQuery * * @param key The key whose value is being checked * @param keyInQuery The key in the objects from the sub query to look in * @param query The sub query to run * @return Returns the query so you can chain this call. */ public AVQuery<T> whereMatchesKeyInQuery(String key, String keyInQuery, AVQuery<?> query) { Map<String, Object> inner = new HashMap<String, Object>(); inner.put("className", query.getClassName()); inner.put("where", query.conditions.compileWhereOperationMap()); if (query.conditions.getSkip() > 0) inner.put("skip", query.conditions.getSkip()); if (query.conditions.getLimit() > 0) inner.put("limit", query.conditions.getLimit()); if (!AVUtils.isBlankContent(query.getOrder())) inner.put("order", query.getOrder()); Map<String, Object> queryMap = new HashMap<String, Object>(); queryMap.put("query", inner); queryMap.put("key", keyInQuery); return addWhereItem(key, "$select", queryMap); }
/** * Add a constraint to the query that requires a particular key's value matches a value for a key * in the results of another AVQuery * * @param key The key whose value is being checked * @param keyInQuery The key in the objects from the sub query to look in * @param query The sub query to run * @return Returns the query so you can chain this call. */ public AVQuery<T> whereMatchesKeyInQuery(String key, String keyInQuery, AVQuery<?> query) { Map<String, Object> inner = new HashMap<String, Object>(); inner.put("className", query.getClassName()); inner.put("where", query.conditions.compileWhereOperationMap()); if (query.conditions.getSkip() > 0) inner.put("skip", query.conditions.getSkip()); if (query.conditions.getLimit() > 0) inner.put("limit", query.conditions.getLimit()); if (!AVUtils.isBlankContent(query.getOrder())) inner.put("order", query.getOrder()); Map<String, Object> queryMap = new HashMap<String, Object>(); queryMap.put("query", inner); queryMap.put("key", keyInQuery); return addWhereItem(key, "$select", queryMap); }
/** * Add a constraint to the query that requires a particular key's value match another AVQuery. * This only works on keys whose values are AVObjects or lists of AVObjects. * * @param key The key to check. * @param query The query that the value should match * @return Returns the query so you can chain this call. */ public AVQuery<T> whereMatchesQuery(String key, AVQuery<?> query) { Map<String, Object> map = AVUtils.createMap("where", query.conditions.compileWhereOperationMap()); map.put("className", query.className); if (query.conditions.getSkip() > 0) map.put("skip", query.conditions.getSkip()); if (query.conditions.getLimit() > 0) map.put("limit", query.conditions.getLimit()); if (!AVUtils.isBlankContent(query.getOrder())) map.put("order", query.getOrder()); addWhereItem(key, "$inQuery", map); return this; }
/** * Add a constraint to the query that requires a particular key's value match another AVQuery. * This only works on keys whose values are AVObjects or lists of AVObjects. * * @param key The key to check. * @param query The query that the value should match * @return Returns the query so you can chain this call. */ public AVQuery<T> whereMatchesQuery(String key, AVQuery<?> query) { Map<String, Object> map = AVUtils.createMap("where", query.conditions.compileWhereOperationMap()); map.put("className", query.className); if (query.conditions.getSkip() > 0) map.put("skip", query.conditions.getSkip()); if (query.conditions.getLimit() > 0) map.put("limit", query.conditions.getLimit()); if (!AVUtils.isBlankContent(query.getOrder())) map.put("order", query.getOrder()); addWhereItem(key, "$inQuery", map); return this; }
/** * Gets a query that can be used to query the subclass objects in this relation. * * @param clazz The AVObject subclass. * @return A AVQuery that restricts the results to objects in this relations. */ public AVQuery<T> getQuery(Class<T> clazz) { if (getParent() == null || AVUtils.isBlankString(getParent().getObjectId())) { throw new IllegalStateException("unable to encode an association with an unsaved AVObject"); } Map<String, Object> map = new HashMap<String, Object>() { { put("object", AVUtils.mapFromPointerObject(AVRelation.this.getParent())); put("key", AVRelation.this.getKey()); } }; Map<String, Object> result = new HashMap<String, Object>(); result.put("$relatedTo", map); String targetClassName = getTargetClass(); if (AVUtils.isBlankString(getTargetClass())) { targetClassName = getParent().getClassName(); } AVQuery<T> query = new AVQuery<T>(targetClassName, clazz); query.addWhereItem("$relatedTo", null, map); if (AVUtils.isBlankString(getTargetClass())) { query.getParameters().put("redirectClassNameForKey", this.getKey()); } return query; }
/** * Gets a query that can be used to query the subclass objects in this relation. * * @param clazz The AVObject subclass. * @return A AVQuery that restricts the results to objects in this relations. */ public AVQuery<T> getQuery(Class<T> clazz) { if (getParent() == null || AVUtils.isBlankString(getParent().getObjectId())) { throw new IllegalStateException("unable to encode an association with an unsaved AVObject"); } Map<String, Object> map = new HashMap<String, Object>() { { put("object", AVUtils.mapFromPointerObject(AVRelation.this.getParent())); put("key", AVRelation.this.getKey()); } }; Map<String, Object> result = new HashMap<String, Object>(); result.put("$relatedTo", map); String targetClassName = getTargetClass(); if (AVUtils.isBlankString(getTargetClass())) { targetClassName = getParent().getClassName(); } AVQuery<T> query = new AVQuery<T>(targetClassName, clazz); query.addWhereItem("$relatedTo", null, map); if (AVUtils.isBlankString(getTargetClass())) { query.getParameters().put("redirectClassNameForKey", this.getKey()); } return query; }