Ejemplo n.º 1
0
        public void Test_1_1_CountAllWhenObjectNotExists()
        {
            string    bucketName = "TestBucket" + CurrentTimeMillis();
            KiiBucket bucket     = Kii.Bucket(bucketName);

            KiiBucket      callbackBucket = null;
            KiiQuery       callbackQuery  = null;
            int            count          = -1;
            Exception      exp            = null;
            CountDownLatch cd             = new CountDownLatch(1);

            bucket.Count((KiiBucket b, KiiQuery q, int c, Exception e) => {
                callbackBucket = b;
                callbackQuery  = q;
                count          = c;
                exp            = e;
                cd.Signal();
            });

            if (!cd.Wait(new TimeSpan(0, 0, 0, 3)))
            {
                Assert.Fail("Callback not fired.");
            }
            Assert.IsNotNull(callbackBucket);
            Assert.AreEqual(bucket.Uri, callbackBucket.Uri);
            Assert.IsNotNull(callbackQuery);
            Assert.AreEqual(new KiiQuery(null).ToString(), callbackQuery.ToString());
            Assert.IsNull(exp);
            Assert.AreEqual(0, count);
        }
        public void Test_2_6_CountWithUnsupportedQuery()
        {
            string    bucketName = "bucket" + CurrentTimeMillis();
            KiiBucket bucket     = Kii.Bucket(bucketName);

            for (int i = 0; i < 2; i++)
            {
                KiiObject obj = bucket.NewKiiObject();
                obj ["intField"] = i;
                obj.Save();
            }


            KiiQuery query = new KiiQuery(null);

            query.Limit = 1;

            KiiQueryResult <KiiObject> result = bucket.Query(query);

            Assert.AreEqual(1, result.Count);
            query = result.NextKiiQuery;
            CloudException exp = null;

            try {
                bucket.Count(query);
                Assert.Fail("Exception not thrown");
            } catch (CloudException e) {
                exp = e;
            }
            Assert.IsNotNull(exp);
            Assert.AreEqual(400, exp.Status);
            JsonObject body = new JsonObject(exp.Body);

            Assert.AreEqual("QUERY_NOT_SUPPORTED", body.GetString("errorCode"));
        }
        public void Test_0001_GeoDistanceQuery()
        {
            KiiBucket   bucket = testUser.Bucket("aBucket");
            KiiObject   obj    = bucket.NewKiiObject();
            KiiGeoPoint point  = new KiiGeoPoint(35.667983, 139.739356);

            obj.SetGeoPoint("myLoc", point);
            obj.Save();

            KiiGeoPoint center = new KiiGeoPoint(35.677379, 139.702148);
            KiiClause   clause = KiiClause.GeoDistance("myloc", center, 4000, "distanceToMyLoc");
            KiiQuery    query  = new KiiQuery(clause);
            KiiQueryResult <KiiObject> result = bucket.Query(query);
            KiiObject   retObj = result [0];
            KiiGeoPoint retPoint;

            retPoint = retObj.GetGeoPoint("myLoc");
            Assert.AreEqual(point.Latitude, retPoint.Latitude);
            Assert.AreEqual(point.Longitude, retPoint.Longitude);
            JsonObject jObj             = retObj.GetJsonObject("_calculated");
            double     retDistance      = jObj.GetDouble("distanceToMyLoc");
            double     expectedDistance = distanceInMeter(point, center);

            Assert.IsTrue(approximateEqual(expectedDistance, retDistance, 0.00001));
        }
        public void Test_0005_GeoBoxQuery()
        {
            KiiBucket   bucket = testUser.Bucket("aBucket");
            KiiObject   obj    = bucket.NewKiiObject();
            KiiGeoPoint point  = new KiiGeoPoint(35.667983, 139.739356);

            obj.SetGeoPoint("myloc", point);
            obj.Save();
            //not in the box
            KiiObject   obj2   = bucket.NewKiiObject();
            KiiGeoPoint point2 = new KiiGeoPoint();

            obj2.SetGeoPoint("myloc", point2);
            obj2.Save();

            KiiGeoPoint sw = new KiiGeoPoint(35.52105, 139.699402);
            KiiGeoPoint ne = new KiiGeoPoint(36.069082, 140.07843);

            KiiClause clause = KiiClause.GeoBox("myloc", ne, sw);
            KiiQuery  query  = new KiiQuery(clause);
            KiiQueryResult <KiiObject> result = bucket.Query(query);

            Assert.AreEqual(result.Count, 1);
            KiiObject   retObj = result [0];
            KiiGeoPoint retPoint;

            retPoint = retObj.GetGeoPoint("myloc");
            Assert.AreEqual(point.Latitude, retPoint.Latitude);
            Assert.AreEqual(point.Longitude, retPoint.Longitude);
        }
Ejemplo n.º 5
0
        public void NotPrefixTest()
        {
            KiiBucket bucket = KiiUser.CurrentUser.Bucket("my_bucket");
            KiiObject obj1   = bucket.NewKiiObject();

            obj1["name"] = "foo";
            obj1.Save();
            KiiObject obj2 = bucket.NewKiiObject();

            obj2["name"] = "fool";
            obj2.Save();
            KiiObject obj3 = bucket.NewKiiObject();

            obj3["name"] = "hoge";
            obj3.Save();

            KiiQuery query = new KiiQuery(KiiClause.Not(KiiClause.StartsWith("name", "foo")));

            query.SortByAsc("name");

            KiiQueryResult <KiiObject> results = bucket.Query(query);

            Assert.AreEqual(1, results.Count);
            Assert.AreEqual("hoge", results[0].GetString("name"));
        }
Ejemplo n.º 6
0
        private void ExecCount(KiiQuery query, KiiHttpClientFactory factory, CountCallback callback)
        {
            Utils.CheckInitialize(false);
            if (query == null)
            {
                query = new KiiQuery(null);
            }

            KiiHttpClient client = factory.Create(QueryUrl, Kii.AppId, Kii.AppKey, KiiHttpMethod.POST);

            KiiCloudEngine.SetAuthBearer(client);
            client.ContentType = "application/vnd.kii.QueryRequest+json";

            // send request
            string queryString = CountAggregationQuery(query);
            int    count       = 0;

            client.SendRequest(queryString, (ApiResponse response, Exception e) =>
            {
                if (e != null)
                {
                    callback(this, query, count, e);
                    return;
                }
                // parse response
                try {
                    JsonObject responseJson = new JsonObject(response.Body);
                    JsonObject aggregations = responseJson.GetJsonObject("aggregations");
                    count = aggregations.GetInt("count_field");
                    callback(this, query, count, null);
                } catch (JsonException jse) {
                    callback(this, query, count, new IllegalKiiBaseObjectFormatException(jse.Message));
                }
            });
        }
Ejemplo n.º 7
0
        public void NotHasFieldTest()
        {
            KiiBucket bucket = KiiUser.CurrentUser.Bucket("my_bucket");
            KiiObject obj1   = bucket.NewKiiObject();

            obj1["name"] = "foo";
            obj1["age"]  = 20;
            obj1.Save();
            KiiObject obj2 = bucket.NewKiiObject();

            obj2["name"] = "bar";
            obj2["age"]  = 33;
            obj2.Save();
            KiiObject obj3 = bucket.NewKiiObject();

            obj3["name"] = "hoge";
            obj3.Save();

            KiiQuery query = new KiiQuery(KiiClause.Not(KiiClause.HasField("age", FieldType.INTEGER)));

            query.SortByAsc("name");

            KiiQueryResult <KiiObject> results = bucket.Query(query);

            Assert.AreEqual(1, results.Count);
            Assert.AreEqual("hoge", results[0].GetString("name"));
        }
Ejemplo n.º 8
0
        public void Test_0303_Limit()
        {
            KiiQuery query = new KiiQuery();

            query.Limit = -1;
            Assert.AreEqual("{\"bucketQuery\":{\"clause\":{\"type\":\"all\"}}}", query.ToString());
        }
Ejemplo n.º 9
0
        /// <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;
            }
        }
Ejemplo n.º 10
0
        public void Test_Non_Initialize_StorageAPI()
        {
            KiiUser   user   = null;
            KiiGroup  group  = null;
            KiiBucket bucket = null;
            KiiObject obj    = null;

            try
            {
                // User Management
                user = KiiUser.BuilderWithName("hoge").Build();
                user.Register("password");
                Assert.Fail("InvalidOperationException isn't thrown");
            }
            catch (InvalidOperationException e)
            {
                Assert.AreEqual(ErrorInfo.UTILS_KIICLIENT_NULL, e.Message);
            }
            try
            {
                bucket = Kii.Bucket("appbucket");
                bucket.Delete();
                Assert.Fail("InvalidOperationException isn't thrown");
            }
            catch (InvalidOperationException e)
            {
                Assert.AreEqual(ErrorInfo.UTILS_KIICLIENT_NULL, e.Message);
            }
            try
            {
                obj = bucket.NewKiiObject();
                obj.Save();
                Assert.Fail("InvalidOperationException isn't thrown");
            }
            catch (InvalidOperationException e)
            {
                Assert.AreEqual(ErrorInfo.UTILS_KIICLIENT_NULL, e.Message);
            }
            try
            {
                KiiQuery query = new KiiQuery();
                bucket.Query(query);
                Assert.Fail("InvalidOperationException isn't thrown");
            }
            catch (InvalidOperationException e)
            {
                Assert.AreEqual(ErrorInfo.UTILS_KIICLIENT_NULL, e.Message);
            }
            try
            {
                group = Kii.Group("myGroup");
                group.Save();
                Assert.Fail("InvalidOperationException isn't thrown");
            }
            catch (InvalidOperationException e)
            {
                Assert.AreEqual(ErrorInfo.UTILS_KIICLIENT_NULL, e.Message);
            }
        }
Ejemplo n.º 11
0
        public void Test_0200_SortByDesc()
        {
            KiiQuery query = new KiiQuery();

            query.SortByDesc("score");

            Assert.AreEqual("{\"bucketQuery\":{\"clause\":{\"type\":\"all\"},\"orderBy\":\"score\",\"descending\":true}}", query.ToString());
        }
Ejemplo n.º 12
0
 /// <summary>
 /// Asynchronous version of <see cref = 'Count(KiiQuery)'/>.
 /// </summary>
 /// <remarks>
 /// This API sends a request to KiiCloud.
 /// </remarks>
 /// <param name = 'callback'>
 /// Executes when count execution completed.
 /// </param>
 /// <param name = 'query'>
 /// query to be executed. If null, the operation will be same as <see cref = 'Count(CountCallback)'/>.
 /// </param>
 /// <exception cref='ArgumentException'>
 /// Is thrown when callback is null.
 /// </exception>
 public void Count(KiiQuery query, CountCallback callback)
 {
     if (callback == null)
     {
         throw new ArgumentException("Specified callback is null");
     }
     ExecCount(query, Kii.AsyncHttpClientFactory, callback);
 }
Ejemplo n.º 13
0
        public void Test_0400_NextPaginationKey()
        {
            KiiQuery query = new KiiQuery();

            query.NextPaginationKey = "abcd";

            Assert.AreEqual("{\"bucketQuery\":{\"clause\":{\"type\":\"all\"}},\"paginationKey\":\"abcd\"}", query.ToString());
        }
Ejemplo n.º 14
0
        public void Test_0301_Limit_1()
        {
            KiiQuery query = new KiiQuery();

            query.Limit = 1;

            Assert.AreEqual("{\"bucketQuery\":{\"clause\":{\"type\":\"all\"}},\"bestEffortLimit\":1}", query.ToString());
        }
Ejemplo n.º 15
0
        public void Test_2_6_CountWithUnsupportedQuery()
        {
            MockHttpClientFactory factory = new MockHttpClientFactory();

            Kii.HttpClientFactory = factory;

            // set response
            MockHttpClient client           = factory.Client;
            string         mockResponseBody = "{\"errorCode\" : \"QUERY_NOT_SUPPORTED\"}";

            client.AddResponse(new CloudException(400, mockResponseBody));

            string    bucketName = "TestBucket";
            KiiBucket bucket     = Kii.Bucket(bucketName);
            KiiClause clause     = KiiClause.Equals("key", "value");
            KiiQuery  query      = new KiiQuery(clause);

            query.NextPaginationKey = "pkey";
            CloudException exp = null;

            try {
                bucket.Count(query);
                Assert.Fail("Exception not thrown");
            } catch (CloudException e) {
                exp = e;
            }
            Assert.IsNotNull(exp);
            Assert.AreEqual(400, exp.Status);
            Assert.AreEqual(mockResponseBody, exp.Body);

            // check request.
            string url = Utils.Path(ConstantValues.DEFAULT_BASE_URL, "apps", "appId", "buckets", "TestBucket", "query");

            Assert.AreEqual(url, client.RequestUrl[0]);
            Assert.AreEqual(KiiHttpMethod.POST, client.RequestMethod[0]);
            MockHttpHeaderList headerList = client.RequestHeader[0];

            Assert.AreEqual("appId", headerList["X-Kii-AppID"]);
            Assert.AreEqual("appKey", headerList["X-Kii-AppKey"]);
            String queryStr = "{ " +
                              "\"bucketQuery\" : {" +
                              "\"clause\" : {" +
                              "\"type\" : \"eq\"," +
                              "\"field\" : \"key\"," +
                              "\"value\" : \"value\"" +
                              "}," +
                              "\"aggregations\" : [ {" +
                              "\"type\" : \"COUNT\"," +
                              "\"putAggregationInto\" : \"count_field\"" +
                              "}]" +
                              "}, " +
                              "\"paginationKey\" : \"pkey\"" +
                              "}";
            JsonObject expectedBodyJson = new JsonObject(queryStr);
            JsonObject actualBodyJson   = new JsonObject(client.RequestBody[0]);

            KiiAssertion.AssertJson(expectedBodyJson, actualBodyJson);
        }
Ejemplo n.º 16
0
        public void Test_2_5_CountWithOrQuery()
        {
            MockHttpClientFactory factory = new MockHttpClientFactory();

            Kii.HttpClientFactory = factory;

            // set response
            MockHttpClient client = factory.Client;

            client.AddResponse(200, "{\"aggregations\" : { \"count_field\" : 5 } }");

            string    bucketName = "TestBucket";
            KiiBucket bucket     = Kii.Bucket(bucketName);
            KiiClause clause1    = KiiClause.Equals("key1", "value1");
            KiiClause clause2    = KiiClause.Equals("key2", "value2");
            KiiClause clause     = KiiClause.Or(clause1, clause2);
            KiiQuery  query      = new KiiQuery(clause);
            int       count      = bucket.Count(query);

            Assert.AreEqual(5, count);

            // check request.
            Console.WriteLine(client.RequestBody[0]);
            string url = Utils.Path(ConstantValues.DEFAULT_BASE_URL, "apps", "appId", "buckets", "TestBucket", "query");

            Assert.AreEqual(url, client.RequestUrl[0]);
            Assert.AreEqual(KiiHttpMethod.POST, client.RequestMethod[0]);
            MockHttpHeaderList headerList = client.RequestHeader[0];

            Assert.AreEqual("appId", headerList["X-Kii-AppID"]);
            Assert.AreEqual("appKey", headerList["X-Kii-AppKey"]);
            String queryStr = "{ " +
                              "\"bucketQuery\" : {" +
                              "\"clause\" : {" +
                              "\"type\" : \"or\"," +
                              "\"clauses\" :[ {" +
                              "\"type\" : \"eq\"," +
                              "\"field\" : \"key1\"," +
                              "\"value\" : \"value1\"" +
                              "}," +
                              "{" +
                              "\"type\" : \"eq\"," +
                              "\"field\" : \"key2\"," +
                              "\"value\" : \"value2\"" +
                              "}]" +
                              "}," +
                              "\"aggregations\" : [ {" +
                              "\"type\" : \"COUNT\"," +
                              "\"putAggregationInto\" : \"count_field\"" +
                              "}]" +
                              "}" +
                              "}";
            JsonObject expectedBodyJson = new JsonObject(queryStr);
            JsonObject actualBodyJson   = new JsonObject(client.RequestBody[0]);

            KiiAssertion.AssertJson(expectedBodyJson, actualBodyJson);
        }
Ejemplo n.º 17
0
 /// <summary>
 /// Copy constructor
 /// </summary>
 /// <param name="query">Query.</param>
 private KiiQuery(KiiQuery query)
 {
     if (query == null)
     {
         throw new ArgumentNullException("query is null");
     }
     mJson  = new JsonObject(query.mJson.ToString());
     mLimit = query.mLimit;
 }
        public void Test_2_3_CountAllAsyncWithNullCallback()
        {
            string        bucketName = "TestBucket";
            KiiBucket     bucket     = Kii.Bucket(bucketName);
            KiiQuery      query      = new KiiQuery(null);
            CountCallback callback   = null;

            bucket.Count(query, callback);
        }
Ejemplo n.º 19
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_0004_GeoDistanceQuery_sort_asc()
        {
            KiiBucket   bucket = testUser.Bucket("aBucket");
            KiiObject   obj1   = bucket.NewKiiObject();
            KiiGeoPoint point1 = new KiiGeoPoint(35.672568, 139.723606);

            obj1.SetGeoPoint("myLoc", point1);
            obj1.Save();

            KiiObject   obj2   = bucket.NewKiiObject();
            KiiGeoPoint point2 = new KiiGeoPoint(35.667983, 139.739356);

            obj2.SetGeoPoint("myLoc", point2);
            obj2.Save();
            // not in radius
            KiiObject   obj3   = bucket.NewKiiObject();
            KiiGeoPoint point3 = new KiiGeoPoint();

            obj3.SetGeoPoint("myLoc", point3);
            obj3.Save();

            KiiGeoPoint center = new KiiGeoPoint(35.677379, 139.702148);
            KiiClause   clause = KiiClause.GeoDistance("myloc", center, 4000, "distanceToMyLoc");
            KiiQuery    query  = new KiiQuery(clause);

            query.SortByAsc("_calculated.distanceToMyLoc");

            KiiQueryResult <KiiObject> result = bucket.Query(query);

            Assert.AreEqual(result.Count, 2);
            KiiObject   retObj1   = result [0];
            KiiGeoPoint retPoint1 = retObj1.GetGeoPoint("myLoc");

            Assert.AreEqual(point1.Latitude, retPoint1.Latitude);
            Assert.AreEqual(point1.Longitude, retPoint1.Longitude);
            JsonObject jObj1 = retObj1.GetJsonObject("_calculated");

            KiiObject   retObj2   = result [1];
            KiiGeoPoint retPoint2 = retObj2.GetGeoPoint("myLoc");

            Assert.AreEqual(point2.Latitude, retPoint2.Latitude);
            Assert.AreEqual(point2.Longitude, retPoint2.Longitude);
            JsonObject jObj2 = retObj2.GetJsonObject("_calculated");

            double retDistance1      = jObj1.GetDouble("distanceToMyLoc");
            double retDistance2      = jObj2.GetDouble("distanceToMyLoc");
            double expectedDistance1 = distanceInMeter(point1, center);
            double expectedDistance2 = distanceInMeter(point2, center);

            Assert.IsTrue(approximateEqual(expectedDistance1, retDistance1, 0.00001));
            Assert.IsTrue(approximateEqual(expectedDistance2, retDistance2, 0.00001));
        }
Ejemplo n.º 21
0
// we will use this later
//        private bool mIsTrashed;

        internal KiiQueryResult(KiiQuery query, string paginationKey, KiiBaseBucket <T> bucket, bool trashed)
        {
            if (Utils.IsEmpty(paginationKey))
            {
                mNextQuery = null;
            }
            else
            {
                mNextQuery = KiiQuery.copy(query);
                mNextQuery.NextPaginationKey = paginationKey;
            }
            mBucket = bucket;
//            mIsTrashed = trashed;
        }
Ejemplo n.º 22
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>
        /// <returns>
        /// List of KiiObject. If number of result is big, please call GetNextQueryResult()
        /// </returns>
        /// <exception cref='IllegalKiiBaseObjectFormatException'>
        /// Is thrown when server sends broken Json.
        /// </exception>
        /// <exception cref='CloudException'>
        /// Is thrown when server sends error response.
        /// </exception>
        public KiiQueryResult <KiiObject> Query(KiiQuery query)
        {
            KiiQueryResult <KiiObject> result = null;

            ExecQuery(query, Kii.HttpClientFactory, (KiiQueryResult <KiiObject> r, Exception e) =>
            {
                if (e != null)
                {
                    throw e;
                }
                result = r;
            });
            return(result);
        }
Ejemplo n.º 23
0
        /// <summary>
        /// Execute count aggregation of specified query on current bucket.
        /// </summary>
        /// <remarks>
        /// Query generated from <see cref = 'KiiQueryResult.NextKiiQuery'/> is not supported,
        /// <see cref = 'CloudException'/> will be thrown in this case.
        /// NOTE: This api access to server. Should not be executed in UI/Main thread.
        /// </remarks>
        /// <param name = 'query'>
        /// query to be executed. If null, the operation will be same as <see cref = 'Count'/>.
        /// </param>
        /// <returns>
        /// number of objects in the bucket.
        /// </returns>
        /// <exception cref='CloudException'>
        /// Is thrown when server sends error response.
        /// </exception>
        public int Count(KiiQuery query)
        {
            int result = -1;

            ExecCount(query, Kii.HttpClientFactory, (KiiBucket b, KiiQuery q, int count, Exception e) =>
            {
                if (e != null)
                {
                    throw e;
                }
                result = count;
            });
            return(result);
        }
        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);
        }
Ejemplo n.º 25
0
        public void Test_0101_query_all()
        {
            Kii.Initialize("appId", "appKey", Kii.Site.US);
            MockHttpClientFactory factory = new MockHttpClientFactory();

            Kii.HttpClientFactory = factory;

            // set response
            MockHttpClient client = (MockHttpClient)factory.Client;

            this.SetDefaultQueryResult(client);

            KiiBucket bucket = Kii.Bucket("test");
            KiiQuery  query  = new KiiQuery();
            KiiQueryResult <KiiObject> result = bucket.Query(query);

            Assert.AreEqual(1, result.Count);
            Assert.IsFalse(result.HasNext);
        }
Ejemplo n.º 26
0
        /// <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>
        /// <exception cref='InvalidOperationException'>
        /// Is thrown when an operation cannot be performed.
        /// </exception>
        /// <exception cref='SystemException'>
        /// <see cref="T:System.SystemException" /> is the base class for all exceptions defined by the system.
        /// </exception>
        public KiiQueryResult <T> GetNextQueryResult()
        {
            if (!HasNext)
            {
                throw new InvalidOperationException("End of the page. no more results.");
            }
            KiiQuery query = NextKiiQuery;

            if (mBucket is KiiBucket)
            {
                return(mBucket.Query(query));
//            } else if (mBucket is KiiFileBucket) {
//                KiiFileBucket bucket = (KiiFileBucket) mBucket;
//                return (KiiQueryResult<T>) bucket.query(query, mIsTrashed);
            }
            else
            {
                throw new SystemException("Unexpected error! " + mBucket.GetType().ToString());
            }
        }
Ejemplo n.º 27
0
        private string CountAggregationQuery(KiiQuery query)
        {
            // generate aggregations
            JsonArray  aggregations = new JsonArray();
            JsonObject json         = new JsonObject();

            json.Put("type", "COUNT");
            json.Put("putAggregationInto", "count_field");
            aggregations.Put(json);

            // add aggregations with bucketQuery.
            JsonObject queryJson       = new JsonObject(query.ToString());
            JsonObject bucketQueryJson = queryJson.GetJsonObject("bucketQuery");

            bucketQueryJson.Put("aggregations", aggregations);

            // clobbering the new value of bucketQuery
            queryJson.Put("bucketQuery", bucketQueryJson);
            return(queryJson.ToString());
        }
Ejemplo n.º 28
0
        public void Test_2_2_CountWithQueryWhenObjectExistsInBucket()
        {
            string    bucketName = "TestBucket" + CurrentTimeMillis();
            KiiBucket bucket     = Kii.Bucket(bucketName);

            for (int i = 0; i < 10; i++)
            {
                KiiObject obj = bucket.NewKiiObject();
                obj ["key"] = "value";
                obj.Save();
            }

            KiiBucket      callbackBucket = null;
            KiiQuery       callbackQuery  = null;
            int            count          = -1;
            Exception      exp            = null;
            CountDownLatch cd             = new CountDownLatch(1);

            KiiClause clause = KiiClause.Equals("key", "value");
            KiiQuery  query  = new KiiQuery(clause);

            bucket.Count(query, (KiiBucket b, KiiQuery q, int c, Exception e) => {
                callbackBucket = b;
                callbackQuery  = q;
                count          = c;
                exp            = e;
                cd.Signal();
            });

            if (!cd.Wait(new TimeSpan(0, 0, 0, 3)))
            {
                Assert.Fail("Callback not fired.");
            }
            Assert.IsNotNull(callbackBucket);
            Assert.AreEqual(bucket.Uri, callbackBucket.Uri);
            Assert.IsNotNull(callbackQuery);
            Assert.AreEqual(query.ToString(), callbackQuery.ToString());
            Assert.IsNull(exp);
            Assert.AreEqual(10, count);
        }
        public void Test_0002_GeoDistanceQuery_calculatedDistance_nil()
        {
            KiiBucket   bucket = testUser.Bucket("aBucket");
            KiiObject   obj    = bucket.NewKiiObject();
            KiiGeoPoint point  = new KiiGeoPoint(35.667983, 139.739356);

            obj.SetGeoPoint("myLoc", point);
            obj.Save();

            KiiGeoPoint center = new KiiGeoPoint(35.677379, 139.702148);
            KiiClause   clause = KiiClause.GeoDistance("myloc", center, 4000, "");
            KiiQuery    query  = new KiiQuery(clause);
            KiiQueryResult <KiiObject> result = bucket.Query(query);
            KiiObject   retObj = result [0];
            KiiGeoPoint retPoint;

            retPoint = retObj.GetGeoPoint("myLoc");
            Assert.AreEqual(point.Latitude, retPoint.Latitude);
            Assert.AreEqual(point.Longitude, retPoint.Longitude);

            Assert.IsFalse(retObj.Has("_calculated"));
        }
Ejemplo n.º 30
0
        public void NotAndTest()
        {
            KiiBucket bucket = KiiUser.CurrentUser.Bucket("my_bucket");
            KiiObject obj1   = bucket.NewKiiObject();

            obj1["name"] = "foo";
            obj1["age"]  = 20;
            obj1.Save();
            KiiObject obj2 = bucket.NewKiiObject();

            obj2["name"] = "foo";
            obj2["age"]  = 33;
            obj2.Save();

            KiiQuery query = new KiiQuery(KiiClause.Not(KiiClause.And(KiiClause.Equals("name", "foo"), KiiClause.LessThan("age", 30))));

            query.SortByAsc("name");

            KiiQueryResult <KiiObject> results = bucket.Query(query);

            Assert.AreEqual(1, results.Count);
            Assert.AreEqual(33, results[0].GetInt("age"));
        }