public DBRevisionWork GetRevisionWork (DBLane lane, DBHost host, DBHost workhost)
{
DBRevisionWork result = null;
using (IDbCommand cmd = CreateCommand ()) {
// sorting by RevisionWork.workhost_id ensures that we'll get
// revisionwork which has been started at the top of the list.
cmd.CommandText = @"
SELECT
RevisionWork.*
FROM
RevisionWork
INNER JOIN
Revision ON RevisionWork.revision_id = Revision.id
WHERE
RevisionWork.host_id = @host_id
AND (RevisionWork.workhost_id = @workhost_id OR RevisionWork.workhost_id IS NULL)
AND RevisionWork.lane_id = @lane_id
AND RevisionWork.state <> @dependencynotfulfilled AND RevisionWork.state <> 10 AND RevisionWork.State <> @ignore
AND RevisionWork.completed = false
ORDER BY RevisionWork.workhost_id IS NULL ASC, RevisionWork.priority DESC, Revision.date DESC
LIMIT 1
;";
DB.CreateParameter (cmd, "host_id", host.id);
DB.CreateParameter (cmd, "lane_id", lane.id);
DB.CreateParameter (cmd, "workhost_id", workhost.id);
DB.CreateParameter (cmd, "dependencynotfulfilled", (int) DBState.DependencyNotFulfilled);
DB.CreateParameter (cmd, "ignore", (int) DBState.Ignore);
using (IDataReader reader = cmd.ExecuteReader ()) {
if (reader.Read ())
result = new DBRevisionWork (reader);
}
}
return result;
}