Search in sources :

Example 31 with Submission

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

the class SubmissionPersistenceImpl method getQueueingSubmissions.

public List<Submission> getQueueingSubmissions(long maxSubmissionId, int count) throws PersistenceException {
    Connection conn = null;
    try {
        conn = Database.createConnection();
        PreparedStatement ps = null;
        if (maxSubmissionId < 0) {
            ps = conn.prepareStatement("SELECT MAX(submission_id) FROM submission;");
            try {
                ResultSet rs = ps.executeQuery();
                rs.next();
                maxSubmissionId = rs.getLong(1);
            } finally {
                Database.dispose(ps);
            }
        }
        StringBuilder query = new StringBuilder(SubmissionPersistenceImpl.GET_SUBMISSIONS_WITH_CONTENT.replace("FORCE_INDEX", ""));
        query.append(" AND s.judge_reply_id=");
        query.append(JudgeReply.QUEUING.getId());
        query.append(" AND s.submission_id<=");
        query.append(maxSubmissionId);
        query.append(" ORDER BY s.submission_id DESC LIMIT ");
        query.append(count);
        System.out.println(query.toString());
        ps = conn.prepareStatement(query.toString());
        try {
            ResultSet rs = ps.executeQuery();
            List<Submission> submissions = new ArrayList<Submission>();
            Map<Long, Language> languageMap = PersistenceManager.getInstance().getLanguagePersistence().getLanguageMap();
            while (rs.next()) {
                Submission submission = this.populateSubmission(rs, true, languageMap);
                submissions.add(submission);
            }
            return submissions;
        } finally {
            Database.dispose(ps);
        }
    } catch (SQLException e) {
        throw new PersistenceException("Failed to get queueing submissions", e);
    } finally {
        Database.dispose(conn);
    }
}
Also used : Submission(cn.edu.zju.acm.onlinejudge.bean.Submission) Language(cn.edu.zju.acm.onlinejudge.bean.enumeration.Language) SQLException(java.sql.SQLException) Connection(java.sql.Connection) ResultSet(java.sql.ResultSet) ArrayList(java.util.ArrayList) PersistenceException(cn.edu.zju.acm.onlinejudge.persistence.PersistenceException) PreparedStatement(java.sql.PreparedStatement)

Example 32 with Submission

use of cn.edu.zju.acm.onlinejudge.bean.Submission 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)

Example 33 with Submission

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

the class ContestManager method getSubmission.

public Submission getSubmission(long submissionId) throws PersistenceException {
    Object key = new Long(submissionId);
    synchronized (this.submissionCache) {
        Submission submission = this.submissionCache.get(key);
        if (submission == null) {
            SubmissionPersistence submissionPersistence = PersistenceManager.getInstance().getSubmissionPersistence();
            submission = submissionPersistence.getSubmission(submissionId);
            this.submissionCache.put(key, submission);
        }
        return submission;
    }
}
Also used : Submission(cn.edu.zju.acm.onlinejudge.bean.Submission) SubmissionPersistence(cn.edu.zju.acm.onlinejudge.persistence.SubmissionPersistence)

Aggregations

Submission (cn.edu.zju.acm.onlinejudge.bean.Submission)33 Test (org.junit.Test)8 ExtendedSubmission (cn.edu.zju.acm.onlinejudge.bean.ExtendedSubmission)7 Language (cn.edu.zju.acm.onlinejudge.bean.enumeration.Language)7 ArrayList (java.util.ArrayList)5 UserProfile (cn.edu.zju.acm.onlinejudge.bean.UserProfile)4 PersistenceException (cn.edu.zju.acm.onlinejudge.persistence.PersistenceException)4 Connection (java.sql.Connection)4 PreparedStatement (java.sql.PreparedStatement)4 ResultSet (java.sql.ResultSet)4 SQLException (java.sql.SQLException)4 Date (java.util.Date)4 ActionForward (org.apache.struts.action.ActionForward)4 Before (org.junit.Before)4 Problem (cn.edu.zju.acm.onlinejudge.bean.Problem)3 SubmissionPersistence (cn.edu.zju.acm.onlinejudge.persistence.SubmissionPersistence)3 ActionMessages (org.apache.struts.action.ActionMessages)3 AbstractContest (cn.edu.zju.acm.onlinejudge.bean.AbstractContest)2 Reference (cn.edu.zju.acm.onlinejudge.bean.Reference)2 List (java.util.List)2