/// <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;
            }
        }
Пример #2
0
        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);
        }
Пример #4
0
 /// <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);
 }