ValueArray Client::FetchResults(const CommitFilter& f) const { SQLR * Select(SqlAll(RESULT), DT, CMT, BRANCH, UID, ToSqlVal(Regexp(PATH,data["SRC"])).As("FITS")) .From(COMMITS) .LeftJoin(RESULT).On(UID == CMT_UID && CLIENT_ID == data["ID"]) .Where(f) .OrderBy(Descending(DT)) .Limit(f.offset, f.limit); ValueArray res; ValueMap vm; Time t = GetUtcTime(); int maxage = int(data["MAX_AGE"])*24*60*60; while(SQLR.Fetch(vm)){ SetComputedAttributes(vm); SetDuration(vm, vm["STATUS"]); if (IsNull(vm["STATUS"])) { if (!vm["FITS"]) vm.Set("STATUSSTR", "Not interested"); else if (t-Time(vm["DT"]) > maxage) vm.Set("STATUSSTR", "Too old"); else vm.Set("STATUSSTR", "Ready"); } res.Add(vm); } return res; }
ValueMap Result::LoadPage(const CommitFilter& f) { SQLR * Select(SqlAll(RESULT),UID,CMT,BRANCH,CLIENT_ID) .From( Select(UID.As("FILTER")) .From(COMMITS) .Where(f) .OrderBy(Descending(DT)) .Limit(f.offset, f.limit) .AsTable("FILTER_TABLE") ) .InnerJoin(COMMITS).On(SqlId("FILTER")==UID) .LeftJoin(RESULT).On(CMT_UID == UID) .LeftJoin(CLIENT).On(ID == CLIENT_ID) .OrderBy(Descending(DT)); VectorMap<Tuple2<String, int>,ValueMap> rows; SortedIndex<int> clients; VectorMap<String, ValueMap> commits; ValueArray v_clients; ValueMap v_commits; ValueMap vm; while (SQLR.Fetch(vm)){ SetComputedAttributes(vm); String uid = vm["UID"]; int cid = vm["CLIENT_ID"]; rows.Add(MakeTuple(uid, cid), vm); clients.FindAdd(cid); ValueMap& commit = commits.GetAdd(uid); commit.Set("CMT", vm["CMT"]); commit.Set("BRANCH", vm["BRANCH"]); } ValueMap results; for(int i = 0; i<commits.GetCount() ; ++i){ v_commits.Add(commits.GetKey(i), commits[i]); vm.Clear(); for(int j = 0; j < clients.GetCount(); ++j){ if(!IsNull(clients[j])) vm.Add(clients[j], rows.GetAdd(MakeTuple(commits.GetKey(i), clients[j]))); } results.Add(commits.GetKey(i), vm); } for(int i = (!clients.IsEmpty() && IsNull(clients[0]))?1:0; i < clients.GetCount(); i++) v_clients.Add(clients[i]); ValueMap res; res.Set("RESULTS", results); res.Set("COMMITS", v_commits); res.Set("CLIENTS", v_clients); res.Set("ALLCLIENTS", Client::LoadAll()); return res; }
ValueMap Branch::LoadAll() { SQL * Select(BRANCH, SqlFunc("COUNT",Distinct(UID)).As("CMT_CNT"), SqlMin(DT).As("FIRST"), SqlMax(DT).As("LAST"), SqlSum(OK).As("OK"), SqlSum(FAIL).As("FAIL"), SqlSum(ERR).As("ERR"), SqlSum(SKIP).As("SKIP")) .From(COMMITS) .LeftJoin(RESULT).On(UID == CMT_UID) .GroupBy(BRANCH) .OrderBy(BRANCH); ValueMap vm; ValueMap branches; while(SQL.Fetch(vm)) { SetComputedAttributes(vm, WD_DONE); branches.Set(vm["BRANCH"],vm); } return branches; }