예제 #1
0
 public Tuple <RemoteResult, SelectSearchResult> SelectQuery(SelectDescription description)
 {
     return(SendFunc <Tuple <RemoteResult, SelectSearchResult>, ICommonNetReceiverWriterForCollector>(
                api => api.SelectQuery(description),
                e => new Tuple <RemoteResult, SelectSearchResult>(new ServerNotAvailable(Server), null),
                NetLogHelper.GetLog(description)));
 }
예제 #2
0
        public Tuple <RemoteResult, SelectSearchResult> SelectQuery(SelectDescription description)
        {
            SelectSearchResult selectResult;
            var result = _db.SelectRead(description, out selectResult);

            return(new Tuple <RemoteResult, SelectSearchResult>(result, selectResult));
        }
예제 #3
0
        public Tuple <RemoteResult, SelectSearchResult> SelectQuery(ServerId server, SelectDescription description)
        {
            var connection = FindServer(server) as SingleConnectionToWriter;

            if (connection == null)
            {
                ConnectToWriter(server);
                connection = FindServer(server) as SingleConnectionToWriter;
            }

            if (connection == null)
            {
                Logger.Logger.Instance.DebugFormat("CollectorNetModule: process server not found  server = {0}", server);
                _distributor.ServerUnavailable(server);
                return(new Tuple <RemoteResult, SelectSearchResult>(new ServerNotFoundResult(), null));
            }

            var ret = connection.SelectQuery(description);

            if (ret.Item1 is FailNetResult)
            {
                Logger.Logger.Instance.DebugFormat("CollectorNetModule: process fail result  server = {0}", server);
                _distributor.ServerUnavailable(server);
                RemoveConnection(server);
            }

            return(ret);
        }
예제 #4
0
        public override RemoteResult SelectRead(SelectDescription description, out SelectSearchResult searchResult)
        {
            SelectSearchResult value = null;
            var ret = CommonMethodHandler(description.TableName,
                                          (dbModule) => dbModule.SelectRead(description, out value));

            searchResult = value;
            return(ret);
        }
예제 #5
0
 private string GetTableName(SelectDescription selectDescription)
 {
     if (selectDescription.TableNameAliasingPrevented)
     {
         return(selectDescription.Table);
     }
     else
     {
         return(QBuilder.TableNameAliaser.GetTableAlias(selectDescription.Table));
     }
 }
예제 #6
0
        private List <MetaData> ReadMetaDataUsingSelect(string script, int countElements, bool isfirstAsk, ref object lastId,
                                                        Func <MetaData, bool> isMine, ref bool isAllDataRead)
        {
            var list          = new List <MetaData>();
            var idDescription = PrepareKeyDescription(countElements, isfirstAsk, lastId);
            SelectSearchResult result;

            int count = 0;

            var select = new SelectDescription(idDescription, script, countElements, new List <FieldDescription>());
            var ret    = SelectRead(select, out result);

            while (!ret.IsError)
            {
                bool exit = false;
                foreach (var searchData in result.Data)
                {
                    var meta = _metaDataCommandCreator.ReadMetaFromSearchData(searchData);
                    meta.Hash = _hashCalculater.CalculateHashFromKey(meta.Id);

                    if (isMine(meta))
                    {
                        list.Add(meta);
                        count++;
                    }

                    lastId = meta.Id;

                    if (count == countElements)
                    {
                        exit = true;
                        break;
                    }
                }

                if (result.IsAllDataRead || exit)
                {
                    break;
                }

                idDescription = PrepareKeyDescription(countElements, false, lastId);
                select        = new SelectDescription(idDescription, script, count, new List <FieldDescription>());
                ret           = SelectRead(select, out result);
            }

            isAllDataRead = result.IsAllDataRead;

            return(list);
        }
예제 #7
0
            public void Projections_TopSkip()
            {
                CombinatorialEngine engine = CombinatorialEngine.FromDimensions(
                    new Dimension("DataServiceType", new Type[] { typeof(CustomDataContext), typeof(ocs.CustomObjectContext), typeof(CustomRowBasedContext), typeof(CustomRowBasedOpenTypesContext) }),
                    new Dimension("Format", UnitTestsUtil.ResponseFormats));

                using (TestUtil.MetadataCacheCleaner())
                    using (ocs.PopulateData.CreateTableAndPopulateData())
                        using (TestWebRequest request = TestWebRequest.CreateForInProcess())
                        {
                            TestUtil.RunCombinatorialEngineFail(engine, values =>
                            {
                                request.DataServiceType = (Type)values["DataServiceType"];
                                request.Accept          = (string)values["Format"];
                                TestUtil.RunCombinatorialEngineFail(CombinatorialEngine.FromDimensions(
                                                                        new Dimension("TopSkip", new TopSkipSetting[] {
                                    new TopSkipSetting("2", null, 0, 1),
                                    new TopSkipSetting(null, "1", 1, 2),
                                    new TopSkipSetting(null, "3"),
                                    new TopSkipSetting("1", "1", 1),
                                    new TopSkipSetting("1", null, "ID desc", 2),
                                    new TopSkipSetting(null, "1", "ID desc", 1, 0),
                                    new TopSkipSetting("1", "2", "ID desc", 0)
                                }),
                                                                        new Dimension("Select", CustomerSelects)), values2 =>
                                {
                                    TopSkipSetting topskip   = (TopSkipSetting)values2["TopSkip"];
                                    SelectDescription select = (SelectDescription)values2["Select"];

                                    VerifyEntryIDsAndXPaths(
                                        "/Customers?$select=" + select.Select +
                                        (topskip.Top != null ? "&$top=" + topskip.Top : "") +
                                        (topskip.Skip != null ? "&$skip=" + topskip.Skip : "") +
                                        (topskip.OrderBy != null ? "&$orderby=" + topskip.OrderBy : ""),
                                        request,
                                        topskip.IDs,
                                        select.VerificationXPaths);
                                });

                                VerifyEntryIDsAndXPaths("/Customers(1)/Orders?$select=ID&$top=1&$skip=1&$orderby=ID", request, new int[] { 101 });
                            });
                        }
            }
예제 #8
0
            public void Projections_Filter()
            {
                CombinatorialEngine engine = CombinatorialEngine.FromDimensions(
                    new Dimension("DataServiceType", new Type[] { typeof(CustomDataContext), typeof(ocs.CustomObjectContext), typeof(CustomRowBasedContext), typeof(CustomRowBasedOpenTypesContext) }),
                    new Dimension("Format", UnitTestsUtil.ResponseFormats));

                using (TestUtil.MetadataCacheCleaner())
                    using (ocs.PopulateData.CreateTableAndPopulateData())
                        using (TestWebRequest request = TestWebRequest.CreateForInProcess())
                        {
                            TestUtil.RunCombinatorialEngineFail(engine, values =>
                            {
                                request.DataServiceType = (Type)values["DataServiceType"];
                                request.Accept          = (string)values["Format"];
                                TestUtil.RunCombinatorialEngineFail(CombinatorialEngine.FromDimensions(
                                                                        new Dimension("Filter", new FilterSetting[] {
                                    new FilterSetting("ID eq 1", 1),
                                    new FilterSetting("ID gt 0", 1, 2),
                                    new FilterSetting("length(Name) sub ID gt 9", 0),
                                    new FilterSetting("BestFriend/ID eq 1", 2),
                                    new FilterSetting("2 sub BestFriend/BestFriend/ID gt 0", 2)
                                }),
                                                                        new Dimension("Select", CustomerSelects)), values2 =>
                                {
                                    FilterSetting filter     = (FilterSetting)values2["Filter"];
                                    SelectDescription select = (SelectDescription)values2["Select"];

                                    VerifyEntryIDsAndXPaths(
                                        "/Customers?$select=" + select.Select + "&$filter=" + filter.Filter,
                                        request,
                                        filter.FilteredIDs,
                                        select.VerificationXPaths);
                                });

                                VerifyEntryIDsAndXPaths("/Customers(1)/Orders?$select=DollarAmount&$filter=ID gt 1", request, new int[] { 101 });
                                VerifyEntryIDsAndXPaths(
                                    "/Customers?$select=BestFriend&$expand=BestFriend($select=ID)&$filter=ID gt 0&$orderby=BestFriend/ID desc",
                                    request, new int[] { 2, 1 });
                            });
                        }
            }
예제 #9
0
        public override RemoteResult SelectRead(SelectDescription description, out SelectSearchResult searchResult)
        {
            var result = new List <SearchData>();

            description.IdDescription.PageSize = description.CountElements + 2;
            var command = _metaDataCommandCreator.CreateSelectCommand(description.Script, description.IdDescription,
                                                                      description.UserParametrs);

            if (command == null)
            {
                searchResult = new SelectSearchResult(new List <SearchData>(), true);
                return(new InnerServerError(Errors.QueryError));
            }

            var reader = _implModule.CreateReader(command);

            reader.Start();

            if (reader.IsFail)
            {
                searchResult = new SelectSearchResult(result, true);
                return(new InnerFailResult("script error"));
            }

            while (reader.IsCanRead && result.Count < description.CountElements)
            {
                reader.ReadNext();

                var fields = _metaDataCommandCreator.SelectProcess(reader);

                var key = fields.Find(x => x.Item2.ToLower() == description.IdDescription.AsFieldName.ToLower());
                result.Add(new SearchData(fields, key.Item1));
            }
            bool isAllDataRead = !reader.IsCanRead;

            reader.Dispose();
            searchResult = new SelectSearchResult(result, isAllDataRead);

            return(new SuccessResult());
        }
예제 #10
0
        private void LoadSingleServer(SingleServerSearchTask searchTask)
        {
            var description = new SelectDescription(searchTask.IdDescription, searchTask.Script,
                                                    _serverPageSize, searchTask.UserParametrs)
            {
                TableName = searchTask.TableName
            };
            var result = _net.SelectQuery(searchTask.ServerId, description);

            if (result.Item1.IsError)
            {
                searchTask.ServerUnavailable();
            }
            else
            {
                if (result.Item2.IsAllDataRead)
                {
                    searchTask.AllDataRead();
                }
                searchTask.AddPage(result.Item2.Data);
            }
        }
예제 #11
0
 public static string GetLog(SelectDescription description)
 {
     return(string.Format("Script = {0}", description.Script));
 }
예제 #12
0
 public abstract RemoteResult SelectRead(SelectDescription description, out SelectSearchResult searchResult);
예제 #13
0
 public Tuple <RemoteResult, SelectSearchResult> SelectQuery(SelectDescription description)
 {
     return(_inputModule.SelectQuery(description));
 }