/// <summary>
        /// Returns <see cref="QueryViewRequest.Keys"/> as compatible JSON document for use e.g.
        /// with POST of keys against views.
        /// </summary>
        /// <returns></returns>
        protected virtual string GetKeysAsJsonObject(QueryViewRequest query)
        {
            if (!query.HasKeys)
                return "{}";

            return string.Format("{{\"keys\":[{0}]}}",
                string.Join(",", query.Keys.Select(k => FormatValue(k))));
        }
        public virtual HttpRequest Create(QueryViewRequest request)
        {
            Ensure.That(request, "request").IsNotNull();

            return request.HasKeys
                ? CreateFor<QueryViewRequest>(HttpMethod.Post, GenerateRequestUrl(request)).SetContent(GetKeysAsJsonObject(request))
                : CreateFor<QueryViewRequest>(HttpMethod.Get, GenerateRequestUrl(request));
        }
        /// <summary>
        /// Returns all configured options of <see cref="QueryViewRequest"/> as key values.
        /// The values are formatted to JSON-compatible strings.
        /// </summary>
        /// <returns></returns>
        protected virtual IDictionary<string, string> ConvertRequestToJsonCompatibleKeyValues(QueryViewRequest request)
        {
            var kvs = new Dictionary<string, string>();

            if (request.IncludeDocs.HasValue)
                kvs.Add(KeyNames.IncludeDocs, request.IncludeDocs.Value.ToString().ToLower());

            if (request.Descending.HasValue)
                kvs.Add(KeyNames.Descending, request.Descending.Value.ToString().ToLower());

            if (request.Reduce.HasValue)
                kvs.Add(KeyNames.Reduce, request.Reduce.Value.ToString().ToLower());

            if (request.InclusiveEnd.HasValue)
                kvs.Add(KeyNames.InclusiveEnd, request.InclusiveEnd.Value.ToString().ToLower());

            if (request.UpdateSeq.HasValue)
                kvs.Add(KeyNames.UpdateSeq, request.UpdateSeq.Value.ToString().ToLower());

            if (request.Group.HasValue)
                kvs.Add(KeyNames.Group, request.Group.Value.ToString().ToLower());

            if (request.GroupLevel.HasValue)
                kvs.Add(KeyNames.GroupLevel, request.GroupLevel.Value.ToString(MyCouchRuntime.NumberFormat));

            if (request.Stale.HasValue)
                kvs.Add(KeyNames.Stale, request.Stale.Value.AsString());

            if (HasValue(request.Key))
                kvs.Add(KeyNames.Key, FormatValue(request.Key));

            if (HasValue(request.Keys))
                kvs.Add(KeyNames.Keys, FormatValues(request.Keys));

            if (HasValue(request.StartKey))
                kvs.Add(KeyNames.StartKey, FormatValue(request.StartKey));

            if (HasValue(request.StartKeyDocId))
                kvs.Add(KeyNames.StartKeyDocId, FormatValue(request.StartKeyDocId));

            if (HasValue(request.EndKey))
                kvs.Add(KeyNames.EndKey, FormatValue(request.EndKey));

            if (HasValue(request.EndKeyDocId))
                kvs.Add(KeyNames.EndKeyDocId, FormatValue(request.EndKeyDocId));

            if (request.Limit.HasValue)
                kvs.Add(KeyNames.Limit, request.Limit.Value.ToString(MyCouchRuntime.NumberFormat));

            if (request.Skip.HasValue)
                kvs.Add(KeyNames.Skip, request.Skip.Value.ToString(MyCouchRuntime.NumberFormat));

            return kvs;
        }
        protected virtual string GenerateRequestUrl(QueryViewRequest request)
        {
            if (request is QuerySystemViewRequest)
            {
                return string.Format("{0}/{1}{2}",
                    Connection.Address,
                    request.ViewIdentity.Name,
                    GenerateQueryString(request));
            }

            return string.Format("{0}/_design/{1}/_view/{2}{3}",
                Connection.Address,
                request.ViewIdentity.DesignDocument,
                request.ViewIdentity.Name,
                GenerateQueryString(request));
        }
예제 #5
0
        /// <summary>
        /// Gets the idea open status.
        /// </summary>
        /// <returns>The idea open status.</returns>
        public async Task <Result> GetIdeasOpenStatus()
        {
            var queryViewRequest = new QueryViewRequest("ideas", "status").Configure(c => c.Key("open").IncludeDocs(true));
            var response         = await Views.QueryAsync <Idea>(queryViewRequest)
                                   as ViewQueryResponse <Idea>;

            var ideas      = response.Rows.Select(row => (Idea)JsonConvert.DeserializeObject(row.IncludedDoc, typeof(Idea)));
            var taskResult = new TaskResult
            {
                IsSuccessful = true,
                Messages     = new List <string>
                {
                    response.Error,
                    response.Reason
                }
            };

            taskResult.SetData(ideas.ToList());
            return(taskResult);
        }
예제 #6
0
        // List all
        public async Task <GetMovies> GetList()
        {
            using (var client = new MyCouchClient(host, db))
            {
                // View
                var req = new QueryViewRequest("search", "all");

                var result = await client.Views.QueryAsync <Movie>(req);

                var movies = result.Rows.Select
                             (
                    x => new Movie(x.Id, x.Value.Title,
                                   x.Value.Summary, x.Value.InTheaters,
                                   x.Value.Trailer, x.Value.ReleaseDate,
                                   x.Value.Poster)
                             ).ToList();

                return(new GetMovies(result.IsSuccess, result.RowCount, movies));
            }
        }
예제 #7
0
        public virtual async Task <QueryInfo> GetValueByKeysAsync <TValue>(ViewIdentity view, object[] keys, Action <TValue> onResult) where TValue : class
        {
            ThrowIfDisposed();

            EnsureArg.IsNotNull(view, nameof(view));
            EnsureArg.HasItems(keys, nameof(keys));
            EnsureArg.IsNotNull(onResult, nameof(onResult));

            var request  = new QueryViewRequest(view).Configure(r => r.Keys(keys));
            var response = await Client.Views.QueryAsync <TValue>(request).ForAwait();

            ThrowIfNotSuccessfulResponse(response);

            foreach (var row in response.Rows.Where(r => r.Value != null))
            {
                onResult(row.Value);
            }

            return(CreateQueryInfoFrom(response));
        }
예제 #8
0
        public async virtual Task <QueryInfo> GetIncludedDocByKeysAsync <TIncludedDoc>(ViewIdentity view, object[] keys, Action <TIncludedDoc> onResult) where TIncludedDoc : class
        {
            ThrowIfDisposed();

            Ensure.That(view, "view").IsNotNull();
            Ensure.That(keys, "keys").HasItems();
            Ensure.That(onResult, "onResult").IsNotNull();

            var request  = new QueryViewRequest(view).Configure(r => r.Keys(keys).IncludeDocs(true));
            var response = await Client.Views.QueryAsync <string, TIncludedDoc>(request).ForAwait();

            ThrowIfNotSuccessfulResponse(response);

            foreach (var row in response.Rows.Where(r => r.IncludedDoc != null))
            {
                onResult(row.IncludedDoc);
            }

            return(CreateQueryInfoFrom(response));
        }
예제 #9
0
        public async Task <IEnumerable <TEntity> > ListAsync(int?limit = null)
        {
            using (var client = _couchDb.GetClient())
            {
                var query = new QueryViewRequest("all", "list");
                query.Key    = typeof(TEntity).Name.ToLower();
                query.Reduce = false;
                if (limit.HasValue)
                {
                    query.Limit = limit.Value;
                }
                var response = await client.Views.QueryAsync <TEntity>(query);

                if (response.IsSuccess)
                {
                    return(response.Rows.Select(r => r.Value));
                }
                throw new CouchDbException(response.Error);
            }
        }
예제 #10
0
        public virtual async Task <QueryInfo> GetIncludedDocByKeysAsync <TIncludedDoc>(ViewIdentity view, object[] keys, Action <TIncludedDoc> onResult, CancellationToken cancellationToken = default) where TIncludedDoc : class
        {
            ThrowIfDisposed();

            EnsureArg.IsNotNull(view, nameof(view));
            EnsureArg.HasItems(keys, nameof(keys));
            EnsureArg.IsNotNull(onResult, nameof(onResult));

            var request  = new QueryViewRequest(view).Configure(r => r.Keys(keys).IncludeDocs(true));
            var response = await Client.Views.QueryAsync <string, TIncludedDoc>(request, cancellationToken).ForAwait();

            ThrowIfNotSuccessfulResponse(response);

            foreach (var row in response.Rows.Where(r => r.IncludedDoc != null))
            {
                onResult(row.IncludedDoc);
            }

            return(CreateQueryInfoFrom(response, cancellationToken));
        }
예제 #11
0
        private async void GetEveryDoc()
        {
            dataViewAll.Rows.Clear();

            using (var dbClient = new MyCouchClient(link, databaseName))
            {
                var dbQuery    = new QueryViewRequest("_all_docs");
                var responseDB = await dbClient.Views.QueryAsync <dynamic>(dbQuery);

                dynamic array = responseDB.Rows.ToArray();

                foreach (var keyValue in array)
                {
                    dataViewAll.Rows.Add(keyValue.Key.ToString());
                    MessageBox.Show(keyValue.Key.ToString() + ":" + keyValue.Value.ToString(), "Film Documents IDs", MessageBoxButtons.OK);
                }

                dataViewAll.AutoResizeColumns();
                dataViewAll.AutoResizeRows();
            }
        }
예제 #12
0
        public async Task <IEnumerable <T> > GetDocumentsById <T>(IEnumerable <string> documentIds)
        {
            using (var client = new MyCouchClient(DbConnectionInfo))
            {
                var keys = documentIds.Select(GetFullDocumentId <T>);

                var viewQuery = new QueryViewRequest(SystemViewIdentity.AllDocs)
                                .Configure(q => q.Reduce(false)
                                           .IncludeDocs(true)
                                           .Keys(keys.ToArray()));

                ViewQueryResponse result = await client.Views.QueryAsync(viewQuery);

                if (!result.IsSuccess)
                {
                    _logger.Debug($"there was an error getting documents - message: {result.Reason}");
                }

                return(result.Rows.Select(r => r.IncludedDoc).Deserialize <T>());
            }
        }
        /// <summary>
        /// Gets the orphan transactions.
        /// </summary>
        /// <returns>The orphan transactions.</returns>
        public async Task<Result> GetOrphanTransactions()
        {
            var queryViewRequest = new QueryViewRequest("query", "byPositionId").Configure(query => query.IncludeDocs(true));
            var response = await Views.QueryAsync<Transaction>(queryViewRequest)
                                      as ViewQueryResponse<Transaction>;

            var transactions = response
            .Rows
            .Select(row => (Transaction) JsonConvert.DeserializeObject(row.IncludedDoc, typeof(Transaction))) // iad to resort to this, freakin framework works finicky
            .ToList();
            
            var result = new TaskResult { 
                IsSuccessful = true,
                Messages = new List<string>
                {
                    response.Error,
                    response.Reason
                }}
                .SetData(transactions);
            return result;
        }
        public IEnumerable <BookOrder> Get()
        {
            List <BookOrder> bookOrders = new List <BookOrder>();

            using (var client = new MyCouchClient(_databaseUri, _databaseName))
            {
                QueryViewRequest request = new QueryViewRequest(
                    "bookorders", "allOrders");
                request.Configure(parameters => parameters.IncludeDocs(true));

                ViewQueryResponse <string> results =
                    client.Views.QueryAsync <string>(request).Result;

                foreach (var resultsRow in results.Rows)
                {
                    BookOrderDto dto = JsonConvert.DeserializeObject <BookOrderDto>(
                        resultsRow.IncludedDoc);
                    bookOrders.Add(BookOrderMapper.MapFrom(dto));
                }
            }
            return(bookOrders);
        }
예제 #15
0
        public virtual IObservable <T> GetByIds <T>(params string[] ids) where T : class
        {
            ThrowIfDisposed();

            Ensure.That(ids, "ids").HasItems();

            return(Observable.Create <T>(async o =>
            {
                var request = new QueryViewRequest(SystemViewIdentity.AllDocs).Configure(r => r.Keys(ids).IncludeDocs(true));
                var response = await Client.Views.QueryAsync <string, T>(request).ForAwait();

                ThrowIfNotSuccessfulResponse(response);

                foreach (var row in response.Rows.Where(r => r.IncludedDoc != null))
                {
                    o.OnNext(row.IncludedDoc);
                }

                o.OnCompleted();

                return Disposable.Empty;
            }).SubscribeOn(ObservableSubscribeOnScheduler()));
        }
예제 #16
0
        public virtual IObservable <DocumentHeader> GetHeaders(string[] ids)
        {
            ThrowIfDisposed();

            Ensure.That(ids, "ids").HasItems();

            return(Observable.Create <DocumentHeader>(async o =>
            {
                var request = new QueryViewRequest(SystemViewIdentity.AllDocs).Configure(r => r.Keys(ids));
                var response = await Client.Views.QueryAsync <AllDocsValue>(request).ForAwait();

                ThrowIfNotSuccessfulResponse(response);

                foreach (var row in response.Rows)
                {
                    o.OnNext(new DocumentHeader(row.Id, row.Value.Rev));
                }

                o.OnCompleted();

                return Disposable.Empty;
            }).SubscribeOn(ObservableSubscribeOnScheduler()));
        }
        public async Task <IEnumerable <TShirt> > GetAll()
        {
            Task <ViewQueryResponse <TShirt> > tshirtTask;
            ViewQueryResponse <TShirt>         tshirtResult;
            List <TShirt> tshirts = null;

            // TODO: inject client or replace client with store
            using (var client = new MyCouchClient("http://localhost:5984", "cshirts")) {
                var query = new QueryViewRequest("getAllTshirts");
                tshirtTask = client.Views.QueryAsync <TShirt>(query);
            }

            tshirtResult = await tshirtTask;

            foreach (var row in tshirtResult.Rows)
            {
                var tshirt = new TShirt();
                tshirt = row.Value;
                tshirts.Add(tshirt);
            }
            Console.WriteLine(tshirts);
            return(tshirts);
        }
예제 #18
0
        protected virtual string GenerateRelativeUrl(QueryViewRequest request)
        {
            if (request.ViewIdentity is SystemViewIdentity)
            {
                return(string.Format("/{0}{1}",
                                     new UrlSegment(request.ViewIdentity.Name),
                                     GenerateRequestUrlQueryString(request)));
            }

            if (!string.IsNullOrWhiteSpace(request.ListName))
            {
                return(string.Format("/_design/{0}/_list/{1}/{2}{3}",
                                     new UrlSegment(request.ViewIdentity.DesignDocument),
                                     new UrlSegment(request.ListName),
                                     new UrlSegment(request.ViewIdentity.Name),
                                     GenerateRequestUrlQueryString(request)));
            }

            return(string.Format("/_design/{0}/_view/{1}{2}",
                                 new UrlSegment(request.ViewIdentity.DesignDocument),
                                 new UrlSegment(request.ViewIdentity.Name),
                                 GenerateRequestUrlQueryString(request)));
        }
예제 #19
0
        public Task <IEnumerable <T> > GetDocuments <T>(string documentKey)
        {
            var validKey = ReplaceInvalidChars(documentKey);

            using (var client = new MyCouchClient(DbConnectionInfo))
            {
                var viewQuery = new QueryViewRequest(SystemViewIdentity.AllDocs)
                                .Configure(q => q.Reduce(false)
                                           .IncludeDocs(true)
                                           .StartKey(validKey)
                                           .EndKey($"{validKey}{HighestUnicodeChar}"));

                ViewQueryResponse result = client.Views.QueryAsync(viewQuery).Result;

                if (!result.IsSuccess)
                {
                    _logger.Error($"unable to find documents for type: {validKey} - error: {result.Reason}");
                    throw new Exception($"unable to find documents for type: {validKey} - error: {result.Reason}");
                }

                return(Task.FromResult(result.Rows.Select(r => r.IncludedDoc).Deserialize <T>()));
            }
        }
        /// <summary>
        /// Bulks the async.
        /// </summary>
        /// <returns>The async.</returns>
        public TaskResult GetAll()
        {
            var queryViewRequest = new QueryViewRequest("query", "all")
                                   .Configure(c => c.IncludeDocs(true));
            var response = Views.QueryAsync <ImportTracker>(queryViewRequest);

            if (response.Result.RowCount == 0)
            {
                var taskResult = new TaskResult {
                    IsSuccessful = false
                };
                taskResult.SetData(new List <ImportTracker>());
                return(taskResult);
            }


            var importTrackers = response
                                 .Result
                                 .Rows
                                 .Select(row =>
                                         (ImportTracker)JsonConvert.DeserializeObject(row.IncludedDoc,
                                                                                      typeof(ImportTracker))) // iad to resort to this, freakin framework works finicky
                                 .ToList();

            var result = new TaskResult
            {
                IsSuccessful = true,
                Messages     = new List <string>
                {
                    response.Result.Error,
                    response.Result.Reason
                }
            };

            result.SetData(importTrackers);
            return(result);
        }
예제 #21
0
        public virtual HttpRequest Create(QueryViewRequest request)
        {
            Ensure.Any.IsNotNull(request, nameof(request));

            var httpRequest = request.HasKeys
                ? new HttpRequest(HttpMethod.Post, GenerateRelativeUrl(request)).SetJsonContent(GenerateRequestBody(request))
                : new HttpRequest(HttpMethod.Get, GenerateRelativeUrl(request));

            httpRequest.SetRequestTypeHeader(request.GetType());

            if (request.HasAccepts)
            {
                httpRequest.SetAcceptHeader(request.Accepts);
            }
            else
            {
                if (!string.IsNullOrWhiteSpace(request.ListName))
                {
                    httpRequest.SetAcceptHeader(HttpContentTypes.Json, HttpContentTypes.Html);
                }
            }

            return(httpRequest);
        }
        /// <summary>
        /// Bulks the async.
        /// </summary>
        /// <returns>The async.</returns>
        public async Task <Result> GetAll()
        {
            var queryViewRequest = new QueryViewRequest("query", "all")
                                   .Configure(c => c.IncludeDocs(true));
            var response = await Views.QueryAsync <Import>(queryViewRequest);

            var imports = response
                          .Rows
                          .Select(row => row.Value) // iad to resort to this, freakin framework works finicky
                          .ToList();

            var result = new TaskResult
            {
                IsSuccessful = true,
                Messages     = new List <string>
                {
                    response.Error,
                    response.Reason
                }
            }
            .SetData(imports);

            return(result);
        }
예제 #23
0
        public virtual IObservable <TIncludedDoc> GetIncludedDocByKeys <TIncludedDoc>(ViewIdentity view, params object[] keys) where TIncludedDoc : class
        {
            ThrowIfDisposed();

            Ensure.That(view, "view").IsNotNull();
            Ensure.That(keys, "keys").HasItems();

            return(Observable.Create <TIncludedDoc>(async o =>
            {
                var request = new QueryViewRequest(view).Configure(r => r.Keys(keys).IncludeDocs(true));
                var response = await Client.Views.QueryAsync <string, TIncludedDoc>(request).ForAwait();

                ThrowIfNotSuccessfulResponse(response);

                foreach (var row in response.Rows.Where(r => r.IncludedDoc != null))
                {
                    o.OnNext(row.IncludedDoc);
                }

                o.OnCompleted();

                return Disposable.Empty;
            }).SubscribeOn(ObservableSubscribeOnScheduler()));
        }
예제 #24
0
 protected virtual string GenerateRequestBody(QueryViewRequest request)
 {
     return(request.HasKeys
         ? Serializer.Serialize(new { keys = request.Keys })
         : "{}");
 }
예제 #25
0
        public virtual async Task <ViewQueryResponse <TValue, TIncludedDoc> > QueryAsync <TValue, TIncludedDoc>(QueryViewRequest request, CancellationToken cancellationToken)
        {
            EnsureThatNoListFunctionIsUsed(request);

            var httpRequest = QueryViewHttpRequestFactory.Create(request);

            using (var res = await SendAsync(httpRequest, cancellationToken).ForAwait())
                return(await ViewQueryResponseFactory.CreateAsync <TValue, TIncludedDoc>(res).ForAwait());
        }
예제 #26
0
 public QueryViewRequestConfigurator(QueryViewRequest request)
 {
     Request = request;
 }
        protected virtual string GenerateQueryString(QueryViewRequest request)
        {
            var p = GenerateQueryStringParams(request);

            return string.IsNullOrEmpty(p) ? string.Empty : string.Concat("?", p);
        }
예제 #28
0
        static void WorkTimerCallback(object state)
        {
            MyCouchClient   couch    = (MyCouchClient)state;
            List <ADAITask> taskList = new List <ADAITask>();

            Console.Write("Getting settings...");
            Task <GetEntityResponse <Settings> > settingsTask = couch.Entities.GetAsync <Settings>("settings");

            settingsTask.Wait();

            Settings settings;

            if (settingsTask.Result.IsSuccess)
            {
                settings = settingsTask.Result.Content;
                Console.WriteLine("done");
            }
            else
            {
                settings = new Settings();
                Console.WriteLine("error - using defaults");
            }
            Console.WriteLine("Current settings: autoWatch = " + settings.autoWatch);

            Console.Write("Polling tasklist...");

            QueryViewRequest req = new QueryViewRequest("tasks", "tasks").Configure(q => q.IncludeDocs(true));
            Task <ViewQueryResponse <string, ADAITask> > queryTask = couch.Views.QueryAsync <string, ADAITask>(req);

            queryTask.Wait();

            Console.WriteLine("done - " + queryTask.Result.TotalRows + " tasks fetched");

            if (queryTask.Result.TotalRows == 0 && !settings.autoWatch)
            {
                Console.WriteLine("Finished! Waiting for next polling interval...");
                return;
            }

            Console.Write("Connecting to " + DB + "...");
            OracleConnection conn = null;

            try
            {
                conn = new OracleConnection(connString);
                conn.Open();

                // Open session
                OracleCommand cmdOpenSession = new OracleCommand("e.env_session_intf#.open_session", conn);
                cmdOpenSession.CommandType = System.Data.CommandType.StoredProcedure;
                cmdOpenSession.ExecuteNonQuery();

                Console.WriteLine("done");

                OracleCommand cmd = new OracleCommand();
                cmd.Connection  = conn;
                cmd.CommandType = System.Data.CommandType.Text;

                // Copy task IDs to a list that we then use in an OracleParameter for the IN clause
                foreach (ViewQueryResponse <string, ADAITask> .Row row in queryTask.Result.Rows)
                {
                    //taskIdList.Add(row.IncludedDoc.TaskID);
                    OracleParameter par = new OracleParameter(":t" + cmd.Parameters.Count, OracleDbType.Int32);
                    par.Value = row.IncludedDoc.TaskID;

                    cmd.Parameters.Add(par);
                }

                StringBuilder inClause = new StringBuilder();
                foreach (OracleParameter par in cmd.Parameters)
                {
                    inClause.AppendFormat("{0},", par.ParameterName);
                }

                if (inClause.Length > 0)
                {
                    inClause.Remove(inClause.Length - 1, 1); // Remove trailing comma
                }
                else
                {
                    inClause.Append("null");
                }

                StringBuilder q = new StringBuilder();
                q.AppendLine("select env_task.id, env_task.name, env_wfc_status.name, env_release.user_id");
                q.AppendLine("  from e.env_task, e.env_wfc_status, e.env_release, env_user");
                q.AppendLine(" where env_task.env_wfc_status_id = env_wfc_status.id");
                q.AppendLine("   and env_task.env_release_id = env_release.id");
                q.AppendLine("   and env_task.resp_env_user_id = env_user.id");
                q.AppendFormat("   and (env_task.id in ({0})", inClause);
                q.AppendLine();

                // Also include new tasks not already watched?
                if (settings.autoWatch)
                {
                    OracleParameter parUser = new OracleParameter();
                    parUser.OracleDbType  = OracleDbType.Varchar2;
                    parUser.ParameterName = ":oracle_user";
                    parUser.Value         = username.ToUpper();
                    cmd.Parameters.Add(parUser);

                    q.AppendFormat("    or env_user.oracle_user = {0}", parUser.ParameterName);
                    q.AppendLine();
                    q.AppendLine("   and env_task.env_wfc_status_id in (2018 /* Integration Test Running */, 2015 /* Ready to Integrate */)");
                }
                q.AppendLine(")");

                cmd.CommandText = q.ToString();
                Console.Write("Running query...");

                Debug.WriteLine(cmd.CommandText);
                OracleDataReader reader = cmd.ExecuteReader();

                Console.WriteLine("done");

                foreach (ViewQueryResponse <string, ADAITask> .Row row in queryTask.Result.Rows)
                {
                    taskList.Add(row.IncludedDoc);
                }

                while (reader.Read())
                {
                    ADAITask t = null;

                    if (taskList.Exists(m => m.TaskID == reader.GetInt32(0)))
                    {
                        t = queryTask.Result.Rows.Where(e => e.IncludedDoc.TaskID == reader.GetInt32(0)).Single().IncludedDoc;
                    }
                    else
                    {
                        t = new ADAITask(reader.GetInt32(0));
                        taskList.Add(t);
                    }
                    t.TaskName    = reader.GetString(1);
                    t.TaskStatus  = reader.GetString(2);
                    t.TaskRelease = reader.GetString(3);
                    t.LastUpdated = DateTime.Now;

                    Debug.WriteLine("Task ID: " + t.TaskID + ", Task Name: " + t.TaskName + ", Task Status: " + t.TaskStatus +
                                    ", Task Release: " + t.TaskRelease);
                }

                reader.Close();
            }
            catch (OracleException e)
            {
                Console.WriteLine(e.Message);
                return;
            }
            finally
            {
                if (conn != null)
                {
                    conn.Close();
                }
            }

            MyCouchStore store = new MyCouchStore(couch);

            foreach (ADAITask t in taskList)
            {
                Console.Write("Updating doc for task " + t.TaskID + "...");
                Task <ADAITask> storeTask = store.StoreAsync <ADAITask>(t);
                storeTask.Wait();
                Console.WriteLine("done");
            }

            Console.WriteLine("Finished! Waiting for next polling interval...");

            //GetChangesRequest getChangesRequest = new GetChangesRequest
            //{
            //    Feed = ChangesFeed.Normal
            //};

            //Task<ChangesResponse> changesTask = store.Client.Changes.GetAsync(getChangesRequest);
            //changesTask.Wait();
            //changeObserver.SetIgnoreUntilSeqNr(changesTask.Result.LastSeq);
        }
 /// <summary>
 /// Generates <see cref="QueryViewRequest"/> configured values as querystring params.
 /// </summary>
 /// <remarks><see cref="QueryViewRequest.Keys"/> are not included in this string.</remarks>
 /// <returns></returns>
 protected virtual string GenerateQueryStringParams(QueryViewRequest request)
 {
     return string.Join("&", ConvertRequestToJsonCompatibleKeyValues(request)
         .Where(kv => kv.Key != KeyNames.Keys)
         .Select(kv => string.Format("{0}={1}", kv.Key, Uri.EscapeDataString(kv.Value))));
 }
예제 #30
0
 protected virtual void WithHttpRequestFor(QueryViewRequest query, Action <HttpRequestMessage> a)
 {
     using (var req = SUT.Create(query))
         a(req);
 }
예제 #31
0
        protected virtual string GenerateRequestUrlQueryString(QueryViewRequest request)
        {
            var p = GenerateQueryStringParams(request);

            return(string.IsNullOrEmpty(p) ? string.Empty : string.Concat("?", p));
        }
        protected virtual void WithHttpRequestFor(QueryViewRequest query, Action <HttpRequest> a)
        {
            var req = SUT.Create(query);

            a(req);
        }
예제 #33
0
 protected virtual string GenerateQueryStringParams(QueryViewRequest request)
 {
     return(string.Join("&", GenerateJsonCompatibleKeyValues(request)
                        .Select(kv => string.Format("{0}={1}", kv.Key, UrlParam.Encode(kv.Value)))));
 }
예제 #34
0
        /// <summary>
        /// Returns all configured options of <see cref="QueryViewRequest"/> as key values.
        /// The values are formatted to JSON-compatible strings.
        /// </summary>
        /// <returns></returns>
        protected virtual IDictionary <string, string> GenerateJsonCompatibleKeyValues(QueryViewRequest request)
        {
            var kvs = new Dictionary <string, string>();

            if (request.IncludeDocs.HasValue)
            {
                kvs.Add(KeyNames.IncludeDocs, Serializer.ToJson(request.IncludeDocs.Value));
            }

            if (request.Descending.HasValue)
            {
                kvs.Add(KeyNames.Descending, Serializer.ToJson(request.Descending.Value));
            }

            if (request.Reduce.HasValue)
            {
                kvs.Add(KeyNames.Reduce, Serializer.ToJson(request.Reduce.Value));
            }

            if (request.InclusiveEnd.HasValue)
            {
                kvs.Add(KeyNames.InclusiveEnd, Serializer.ToJson(request.InclusiveEnd.Value));
            }

            if (request.UpdateSeq.HasValue)
            {
                kvs.Add(KeyNames.UpdateSeq, Serializer.ToJson(request.UpdateSeq.Value));
            }

            if (request.Group.HasValue)
            {
                kvs.Add(KeyNames.Group, Serializer.ToJson(request.Group.Value));
            }

            if (request.GroupLevel.HasValue)
            {
                kvs.Add(KeyNames.GroupLevel, Serializer.ToJson(request.GroupLevel.Value));
            }

            if (request.Stale.HasValue)
            {
                kvs.Add(KeyNames.Stale, request.Stale.Value.AsString());
            }

            if (request.Key != null)
            {
                kvs.Add(KeyNames.Key, Serializer.ToJson(request.Key));
            }

            if (request.StartKey != null)
            {
                kvs.Add(KeyNames.StartKey, Serializer.ToJson(request.StartKey));
            }

            if (!string.IsNullOrWhiteSpace(request.StartKeyDocId))
            {
                kvs.Add(KeyNames.StartKeyDocId, request.StartKeyDocId);
            }

            if (request.EndKey != null)
            {
                kvs.Add(KeyNames.EndKey, Serializer.ToJson(request.EndKey));
            }

            if (!string.IsNullOrWhiteSpace(request.EndKeyDocId))
            {
                kvs.Add(KeyNames.EndKeyDocId, request.EndKeyDocId);
            }

            if (request.Limit.HasValue)
            {
                kvs.Add(KeyNames.Limit, Serializer.ToJson(request.Limit.Value));
            }

            if (request.Skip.HasValue)
            {
                kvs.Add(KeyNames.Skip, Serializer.ToJson(request.Skip.Value));
            }

            if (request.HasCustomQueryParameters)
            {
                foreach (var param in request.CustomQueryParameters)
                {
                    kvs.Add(param.Key, param.Value.ToStringExtended());
                }
            }

            return(kvs);
        }
        public QueryViewRequestConfiguratorTests()
        {
            _request = new QueryViewRequest("foodesigndocument", "barviewname");

            SUT = new QueryViewRequestConfigurator(_request);
        }
예제 #36
0
파일: Views.cs 프로젝트: willholley/mycouch
 public virtual async Task <ViewQueryResponse <TValue, TIncludedDoc> > QueryAsync <TValue, TIncludedDoc>(QueryViewRequest request)
 {
     using (var httpRequest = CreateHttpRequest(request))
     {
         using (var res = await SendAsync(httpRequest).ForAwait())
         {
             return(ProcessHttpResponse <TValue, TIncludedDoc>(res));
         }
     }
 }