Search in sources :

Example 21 with Language

use of cn.edu.zju.acm.onlinejudge.bean.enumeration.Language in project zoj by licheng.

the class SubmissionPersistenceImpl method getProblemStatistics.

public ProblemStatistics getProblemStatistics(long problemId, String orderBy, int count) throws PersistenceException {
    Connection conn = null;
    String ob = null;
    ProblemStatistics ret = null;
    if ("time".equals(orderBy)) {
        ob = "s.time_consumption ASC,memory_consumption ASC,s.submission_date ASC";
        ret = new ProblemStatistics(problemId, "time");
    } else if ("memory".equals(orderBy)) {
        ob = "s.memory_consumption ASC,s.time_consumption ASC,submission_date ASC";
        ret = new ProblemStatistics(problemId, "memory");
    } else {
        ob = "s.submission_date ASC,s.time_consumption ASC,memory_consumption ASC";
        ret = new ProblemStatistics(problemId, "date");
    }
    Map<Long, Language> languageMap = PersistenceManager.getInstance().getLanguagePersistence().getLanguageMap();
    try {
        conn = Database.createConnection();
        PreparedStatement ps = null;
        try {
            ps = conn.prepareStatement("SELECT judge_reply_id, count(*) FROM submission WHERE problem_id=? GROUP BY judge_reply_id");
            ps.setLong(1, problemId);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                long jid = rs.getLong(1);
                int c = rs.getInt(2);
                ret.setCount(jid, c);
            }
        } finally {
            Database.dispose(ps);
        }
        String sql = SubmissionPersistenceImpl.GET_SUBMISSIONS + " AND s.problem_id=? AND s.judge_reply_id=? ORDER BY " + ob + " LIMIT " + count;
        sql = sql.replace("FORCE_INDEX", "USE INDEX (index_submission_problem_reply)");
        try {
            ps = conn.prepareStatement(sql);
            ps.setLong(1, problemId);
            ps.setLong(2, JudgeReply.ACCEPTED.getId());
            ResultSet rs = ps.executeQuery();
            List<Submission> submissions = new ArrayList<Submission>();
            while (rs.next()) {
                Submission submission = this.populateSubmission(rs, false, languageMap);
                submissions.add(submission);
            }
            ret.setBestRuns(submissions);
            return ret;
        } finally {
            Database.dispose(ps);
        }
    } catch (SQLException e) {
        throw new PersistenceException("Failed to get the QQs", e);
    } finally {
        Database.dispose(conn);
    }
}
Also used : ProblemStatistics(cn.edu.zju.acm.onlinejudge.util.ProblemStatistics) Submission(cn.edu.zju.acm.onlinejudge.bean.Submission) SQLException(java.sql.SQLException) Connection(java.sql.Connection) ArrayList(java.util.ArrayList) PreparedStatement(java.sql.PreparedStatement) Language(cn.edu.zju.acm.onlinejudge.bean.enumeration.Language) ResultSet(java.sql.ResultSet) PersistenceException(cn.edu.zju.acm.onlinejudge.persistence.PersistenceException)

Aggregations

Language (cn.edu.zju.acm.onlinejudge.bean.enumeration.Language)21 ArrayList (java.util.ArrayList)12 PreparedStatement (java.sql.PreparedStatement)8 Submission (cn.edu.zju.acm.onlinejudge.bean.Submission)7 ResultSet (java.sql.ResultSet)7 List (java.util.List)7 PersistenceException (cn.edu.zju.acm.onlinejudge.persistence.PersistenceException)6 Connection (java.sql.Connection)6 SQLException (java.sql.SQLException)6 Date (java.util.Date)5 AbstractContest (cn.edu.zju.acm.onlinejudge.bean.AbstractContest)4 Limit (cn.edu.zju.acm.onlinejudge.bean.Limit)3 Problemset (cn.edu.zju.acm.onlinejudge.bean.Problemset)3 JudgeReply (cn.edu.zju.acm.onlinejudge.bean.enumeration.JudgeReply)3 ActionForward (org.apache.struts.action.ActionForward)3 Course (cn.edu.zju.acm.onlinejudge.bean.Course)2 Problem (cn.edu.zju.acm.onlinejudge.bean.Problem)2 Reference (cn.edu.zju.acm.onlinejudge.bean.Reference)2 UserProfile (cn.edu.zju.acm.onlinejudge.bean.UserProfile)2 SubmissionCriteria (cn.edu.zju.acm.onlinejudge.bean.request.SubmissionCriteria)2