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(); } }
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(); } }
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); } }