public void ARSession_ServerInfo_Get_SERVER_INFO_MAX_ENTRIES()
        {
            ARSession session = new ARSession();
            try
            {
                session.Login(TestServer, TestAdmin, TestAdminPwd);
                List<uint> tar = new List<uint>();
                tar.Add((uint)ServerInfoType.SERVER_INFO_MAX_ENTRIES);
                var result = session.GetServerInfo(tar.ToArray());
                Assert.AreEqual(1,result.Count);
                Assert.AreEqual(ServerInfoType.SERVER_INFO_MAX_ENTRIES, result[0].Type);
            }
            catch (Exception ex)
            {
                Assert.AreEqual(null, ex);

            }
            finally
            {
                session.LogOut();
            }
        }
Пример #2
0
        public void ARSession_ServerInfo_Get_SERVER_INFO_MAX_ENTRIES()
        {
            ARSession session = new ARSession();

            try
            {
                session.Login(TestServer, TestAdmin, TestAdminPwd);
                List <uint> tar = new List <uint>();
                tar.Add((uint)ServerInfoType.SERVER_INFO_MAX_ENTRIES);
                var result = session.GetServerInfo(tar.ToArray());
                Assert.AreEqual(1, result.Count);
                Assert.AreEqual(ServerInfoType.SERVER_INFO_MAX_ENTRIES, result[0].Type);
            }
            catch (Exception ex)
            {
                Assert.AreEqual(null, ex);
            }
            finally
            {
                session.LogOut();
            }
        }
Пример #3
0
        public List <AREntry> GetEntryList(string SchemaName, string Qulification, List <uint> FieldIdList, uint StartIndex, uint?RetrieveCount, ref int totalMatch, List <ARSortInfo> SortInfo)
        {
            CheckSessionNull();

            //try to get the SERVER_INFO_MAX_ENTRIES when first GetEntryList call
            //consider multi-thread problem
            if (SERVER_INFO_MAX_ENTRIES == -1)
            {
                //thread may suspend just here,so we had better double check the SERVER_INFO_MAX_ENTRIES
                lock (_lock){
                    if (SERVER_INFO_MAX_ENTRIES == -1)
                    {
                        List <uint> request = new List <uint>()
                        {
                            (uint)ServerInfoType.SERVER_INFO_MAX_ENTRIES
                        };
                        var result = SessionInstance.GetServerInfo(request.ToArray());
                        SERVER_INFO_MAX_ENTRIES = (int)result[0].Value;
                    }
                }
            }

            //if SERVER_INFO_MAX_ENTRIES is 0 or -1, no need to cut page
            if ((SERVER_INFO_MAX_ENTRIES == 0 || SERVER_INFO_MAX_ENTRIES == -1)
                //if maxEntriesPerQuery can cover per Query,only one query needed.
                || RetrieveCount <= SERVER_INFO_MAX_ENTRIES)
            {
                return(SessionInstance.GetEntryList(
                           SchemaName,
                           Qulification,
                           FieldIdList == null ? null : FieldIdList.ToArray(),
                           StartIndex,
                           RetrieveCount,
                           ref totalMatch,
                           SortInfo == null ? null : SortInfo.ToArray()
                           ));
            }
            else
            {
                List <AREntry> list = new List <AREntry>();
                //if StartIndex or RetrieveCount is null, all records should be return
                if (StartIndex == null || RetrieveCount == null)
                {
                    uint startIndex = StartIndex;
                    int  totalm     = -1;
                    do
                    {
                        var l = SessionInstance.GetEntryList(SchemaName, Qulification,
                                                             FieldIdList == null ? null : FieldIdList.ToArray(),
                                                             startIndex, (uint)SERVER_INFO_MAX_ENTRIES, ref totalm, //loop the page
                                                             SortInfo == null ? null : SortInfo.ToArray());
                        if (l.Count <= 0)
                        {
                            break;
                        }
                        list.AddRange(l);
                        startIndex += (uint)SERVER_INFO_MAX_ENTRIES;
                    }while (true);
                    if (totalMatch != -1)
                    {
                        totalMatch = list.Count;
                    }
                }
                //if both StartIndex and RetrieveCount is not null, only one page should be return
                else
                {
                    uint startIndex2 = (uint)StartIndex;
                    //we must seperaly use the parameter : totalMatch, in order to get the totalMatch once in this case
                    var l2 = SessionInstance.GetEntryList(SchemaName, Qulification,
                                                          FieldIdList == null ? null : FieldIdList.ToArray(),
                                                          startIndex2, (uint)SERVER_INFO_MAX_ENTRIES, ref totalMatch,
                                                          SortInfo == null ? null : SortInfo.ToArray());
                    int reservedCount = (int)RetrieveCount - SERVER_INFO_MAX_ENTRIES;
                    startIndex2 += (uint)SERVER_INFO_MAX_ENTRIES;
                    list.AddRange(l2);
                    int tlm = -1; //avoid count(*) multiple times
                    while (reservedCount > 0)
                    {
                        List <AREntry> l3;
                        if (reservedCount > SERVER_INFO_MAX_ENTRIES)
                        {
                            l3 = SessionInstance.GetEntryList(SchemaName, Qulification,
                                                              FieldIdList == null ? null : FieldIdList.ToArray(),
                                                              startIndex2, (uint)SERVER_INFO_MAX_ENTRIES, ref tlm,
                                                              SortInfo == null ? null : SortInfo.ToArray());
                            reservedCount = reservedCount - SERVER_INFO_MAX_ENTRIES;
                            startIndex2  += (uint)SERVER_INFO_MAX_ENTRIES;
                        }
                        else
                        {
                            l3 = SessionInstance.GetEntryList(SchemaName, Qulification,
                                                              FieldIdList == null ? null : FieldIdList.ToArray(),
                                                              startIndex2, (uint)reservedCount, ref tlm,
                                                              SortInfo == null ? null : SortInfo.ToArray());
                            reservedCount = 0;
                        }
                        list.AddRange(l3);
                    }
                }

                return(list);
            }
        }