[mono/monkeywrench] ad8613b5: Rework data fetching for the front page to be chunkier.

"Rolf Bjarne Kvinge ([email protected])" <[email protected]> Tue, 12 Nov 2013 11:06:08 +0000
Newsgroups gmane.comp.gnome.mono.patches
Message-ID <000001424bfd6baa-647cfef1-6a0b-423c-b786-71afd582a854-000000@email.amazonses.com>
   Branch: refs/heads/master
     Home: https://github.com/mono/monkeywrench
  Compare: https://github.com/mono/monkeywrench/compare/91fa40cefd19...ad8613b535f3

   Commit: ad8613b535f3311d25acfc15be8afdfb3ea20596
   Author: Rolf Bjarne Kvinge <[email protected]> (rolfbjarne)
     Date: 2013-11-12 11:04:52 GMT
      URL: https://github.com/mono/monkeywrench/commit/ad8613b535f3311d25acfc15be8afdfb3ea20596

Rework data fetching for the front page to be chunkier.

Changed paths:
  M MonkeyWrench.Web.WebService/WebServices.asmx.cs

Modified: MonkeyWrench.Web.WebService/WebServices.asmx.cs
===================================================================
@@ -1026,7 +1026,6 @@ public FrontPageResponse GetFrontPageData3 (WebServiceLogin login, int page_size
 			List<DBLane> Lanes = new List<DBLane> ();
 			List<DBHost> Hosts = new List<DBHost> ();
 			List<DBHostLane> HostLanes = new List<DBHostLane> ();
-			List<DBRevisionWorkView2> RevisionWork;
 
 			page_size = Math.Min (page_size, 500);
 
@@ -1092,23 +1091,42 @@ FROM HostLane
 					response.RevisionWorkViews = new List<List<DBRevisionWorkView2>> ();
 					response.RevisionWorkHostLaneRelation = new List<int> ();
 
-					foreach (DBHostLane hl in HostLanes) {
-						RevisionWork = new List<DBRevisionWorkView2> ();
-						using (IDbCommand cmd = db.CreateCommand ()) {
-							cmd.CommandText = @"SELECT R.* FROM (" + DBRevisionWorkView2.SQL.Replace (';', ' ') + ") AS R WHERE R.host_id = @host_id AND R.lane_id = @lane_id LIMIT @limit OFFSET @offset";
-							DB.CreateParameter (cmd, "host_id", hl.host_id);
-							DB.CreateParameter (cmd, "lane_id", hl.lane_id);
-							DB.CreateParameter (cmd, "limit", page_size);
-							DB.CreateParameter (cmd, "offset", page * page_size);
+					using (IDbCommand cmd = db.CreateCommand ()) {
+						var revisionworklists = new Queue<List<DBRevisionWorkView2>> ();
 
-							using (IDataReader reader = cmd.ExecuteReader ()) {
+						for (int i = 0; i < HostLanes.Count; i++) {
+							DBHostLane hl = HostLanes [i];
+							var RevisionWork = new List<DBRevisionWorkView2> ();
+							revisionworklists.Enqueue (RevisionWork);
+
+							var stri = i.ToString ();
+							cmd.CommandText += @"SELECT R.* FROM (" + DBRevisionWorkView2.SQL.Replace (';', ' ') + ") AS R WHERE " +
+								"R.host_id = @host_id" + stri + " AND R.lane_id = @lane_id" + stri + " LIMIT @limit OFFSET @offset;\n";
+							DB.CreateParameter (cmd, "host_id" + stri, hl.host_id);
+							DB.CreateParameter (cmd, "lane_id" + stri, hl.lane_id);
+
+							response.RevisionWorkHostLaneRelation.Add (hl.id);
+							response.RevisionWorkViews.Add (RevisionWork);
+						}
+
+						DB.CreateParameter (cmd, "limit", page_size);
+						DB.CreateParameter (cmd, "offset", page * page_size);
+
+						using (IDataReader reader = cmd.ExecuteReader ()) {
+							while (reader.NextResult ()) {
+								if (revisionworklists.Count == 0)
+									throw new Exception ("GetFrontPageData3: got more datasets back for revision works than expected. This is most likely a bug, not a configuration issue.");
+
+								var RevisionWork = revisionworklists.Dequeue ();
 								while (reader.Read ())
 									RevisionWork.Add (new DBRevisionWorkView2 (reader));
 							}
+
+							if (revisionworklists.Count != 0)
+								throw new Exception ("GetFrontPageData3: got fewer datasets back for revision works than expected. This is most likely a bug, not a configuration issue.");
+
 						}
 
-						response.RevisionWorkHostLaneRelation.Add (hl.id);
-						response.RevisionWorkViews.Add (RevisionWork);
 					}
 
 					// Create a list of all the lanes which have hostlanes


_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches