public async virtual Task <MobileServiceTableOperation> PeekAsync(long prevSequenceId, MobileServiceTableKind tableKind, IEnumerable <string> tableNames)
        {
            MobileServiceTableQueryDescription query = CreateQuery();

            var tableKindNode = Compare(BinaryOperatorKind.Equal, "tableKind", (int)tableKind);
            var sequenceNode  = Compare(BinaryOperatorKind.GreaterThan, "sequence", prevSequenceId);

            query.Filter = new BinaryOperatorNode(BinaryOperatorKind.And, tableKindNode, sequenceNode);

            if (tableNames != null && tableNames.Any())
            {
                BinaryOperatorNode nameInList = tableNames.Select(t => Compare(BinaryOperatorKind.Equal, "tableName", t))
                                                .Aggregate((first, second) => new BinaryOperatorNode(BinaryOperatorKind.Or, first, second));
                query.Filter = new BinaryOperatorNode(BinaryOperatorKind.And, query.Filter, nameInList);
            }

            query.Ordering.Add(new OrderByNode(new MemberAccessNode(null, "sequence"), OrderByDirection.Ascending));
            query.Top = 1;

            JObject op = await this.store.FirstOrDefault(query);

            if (op == null)
            {
                return(null);
            }

            return(MobileServiceTableOperation.Deserialize(op));
        }
        public async Task <MobileServiceTableOperation> GetOperationAsync(string id)
        {
            JObject op = await this.store.LookupAsync(MobileServiceLocalSystemTables.OperationQueue, id);

            if (op == null)
            {
                return(null);
            }
            return(MobileServiceTableOperation.Deserialize(op));
        }
        public async Task <MobileServiceTableOperation> GetOperationByItemIdAsync(string tableName, string itemId)
        {
            MobileServiceTableQueryDescription query = CreateQuery();

            query.Filter = new BinaryOperatorNode(BinaryOperatorKind.And,
                                                  Compare(BinaryOperatorKind.Equal, "tableName", tableName),
                                                  Compare(BinaryOperatorKind.Equal, "itemId", itemId));
            JObject op = await this.store.FirstOrDefault(query);

            return(MobileServiceTableOperation.Deserialize(op));
        }