/// <summary> /// Fetches the query result of next page /// </summary> /// <remarks> /// Same as calling KiiBucket.Query(KiiQuery) with NextKiiQuery /// </remarks> /// <returns> /// The next query result. /// </returns> /// <param name='callback'> /// Callback. /// </param> public void GetNextQueryResult(KiiQueryCallback <T> callback) { if (!HasNext) { if (callback != null) { callback(null, new InvalidOperationException("End of the page. no more results.")); } return; } KiiQuery query = NextKiiQuery; if (mBucket is KiiBucket) { mBucket.Query(query, callback); // } else if (mBucket is KiiFileBucket) { // KiiFileBucket bucket = (KiiFileBucket) mBucket; // return (KiiQueryResult<T>) bucket.query(query, mIsTrashed); } else { if (callback != null) { callback(null, new SystemException("Unexpected error! " + mBucket.GetType().ToString())); } return; } }
private void ExecQuery(KiiQuery query, KiiHttpClientFactory factory, KiiQueryCallback <KiiObject> callback) { Utils.CheckInitialize(false); KiiHttpClient client = factory.Create(QueryUrl, Kii.AppId, Kii.AppKey, KiiHttpMethod.POST); KiiCloudEngine.SetAuthBearer(client); client.ContentType = "application/vnd.kii.QueryRequest+json"; if (query == null) { query = new KiiQuery(null); } // send request client.SendRequest(query.ToString(), (ApiResponse response, Exception e) => { if (e != null) { if (callback != null) { callback(null, e); } return; } // parse response KiiQueryResult <KiiObject> queryResult = null; try { JsonObject obj = new JsonObject(response.Body); JsonArray array = obj.GetJsonArray("results"); String nextPaginationKey = obj.OptString("nextPaginationKey"); queryResult = new KiiQueryResult <KiiObject>(query, nextPaginationKey, this, false); for (int i = 0; i < array.Length(); i++) { JsonObject entry = array.GetJsonObject(i); KiiObject kiiObject = new KiiObject(mParent, mBucketName, entry); queryResult.Add(kiiObject); } } catch (JsonException e2) { if (callback != null) { callback(null, new IllegalKiiBaseObjectFormatException(e2.Message)); } return; } if (callback != null) { callback(queryResult, null); } }); }
public void Test_0102_query_next() { // set response client.AddResponse(200, "{" + "\"queryDescription\" : \"WHERE ( 1 = 1 )\"," + "\"results\":[" + "{\"_id\":\"497fd6ff-9178-42ec-b6ec-14bce7b5c7c9\",\"name\":\"Nick\",\"age\":18," + "\"_created\":1334505527480,\"_modified\":1334505527480,\"_owner\":\"789399f7-7552-47a8-a524-b9119056edd9\",\"_version\":1}" + "]," + "\"nextPaginationKey\":\"abcd\"" + "}"); KiiBucket bucket = Kii.Bucket("test"); KiiQuery query = new KiiQuery(); bool done = false; int calledCount = 0; KiiQueryCallback <KiiObject> callback = null; callback = (KiiQueryResult <KiiObject> result, Exception e) => { ++calledCount; if (calledCount == 1) { // first result Assert.AreEqual(1, result.Count); Assert.IsTrue(result.HasNext); Assert.AreEqual("Nick", result[0]["name"]); // set response this.SetDefaultQueryResult(); result.GetNextQueryResult(callback); } else { Assert.AreEqual(1, result.Count); Assert.IsFalse(result.HasNext); Assert.AreEqual("John Smith", result[0]["name"]); done = true; } }; bucket.Query(query, callback); Assert.IsTrue(done); }
/// <summary> /// Query KiiObjects in this bucket. /// </summary> /// <remarks> /// Query KiiObjects in this bucket with conditions given by argument. /// </remarks> /// <param name='query'> /// Query conditions. /// </param> /// <param name='callback'> /// Callback. /// </param> /// <returns> /// List of KiiObject. If number of result is big, please call GetNextQueryResult() /// </returns> public void Query(KiiQuery query, KiiQueryCallback <KiiObject> callback) { ExecQuery(query, Kii.AsyncHttpClientFactory, callback); }