diff options
Diffstat (limited to 'src/database')
| -rw-r--r-- | src/database/database.rs | 9 | ||||
| -rw-r--r-- | src/database/sql/fetch_display_submissions.sql | 5 | ||||
| -rw-r--r-- | src/database/sql/initialize.sql | 14 | ||||
| -rw-r--r-- | src/database/sql/insert_submission.sql | 2 | ||||
| -rw-r--r-- | src/database/submission.rs | 7 |
5 files changed, 24 insertions, 13 deletions
diff --git a/src/database/database.rs b/src/database/database.rs index 95c8bf6..ee9b6b9 100644 --- a/src/database/database.rs +++ b/src/database/database.rs @@ -173,6 +173,7 @@ impl Database { language: &str, details: &str, code: &str, + code_length: i64, ) -> Result<Submission, DatabaseError> { static QUERY: &str = include_str!("sql/insert_submission.sql"); let conn = self.pool @@ -182,14 +183,15 @@ impl Database { .map_err(|e| DatabaseError::Query(e.to_string()))?; Ok(statement - .query_one((user_id, problem_id, language, details, code), |row| { + .query_one((user_id, problem_id, language, details, code, code_length), |row| { Ok(Submission::new( row.get("id")?, user_id, problem_id, language.to_owned(), details.to_owned(), - code.to_owned() + code.to_owned(), + code_length, )) }) .map_err(|e| DatabaseError::Query(e.to_string()))? @@ -213,6 +215,7 @@ impl Database { row.get("language")?, row.get("details")?, row.get("code")?, + row.get("code_length")?, )) }) .map_err(|e| DatabaseError::Query(e.to_string()))? @@ -237,6 +240,7 @@ impl Database { language: row.get("language")?, details: row.get("details")?, code: row.get("code")?, + code_length: row.get("code_length")?, }) }) .map_err(|e| DatabaseError::Query(e.to_string()))? @@ -261,6 +265,7 @@ impl Database { language: row.get("language")?, details: row.get("details")?, code: row.get("code")?, + code_length: row.get("code_length")?, }) }) .optional() diff --git a/src/database/sql/fetch_display_submissions.sql b/src/database/sql/fetch_display_submissions.sql index 5e836b3..aaceaca 100644 --- a/src/database/sql/fetch_display_submissions.sql +++ b/src/database/sql/fetch_display_submissions.sql @@ -3,8 +3,9 @@ submission.id AS id, user.username AS username, submission.language AS language, submission.details AS details, -submission.code AS code +submission.code AS code, +submission.code_length as code_length FROM submission JOIN user ON user.id = submission.user_id WHERE submission.problem_id = ?1 -ORDER BY length(submission.code); +ORDER BY submission.code_length; diff --git a/src/database/sql/initialize.sql b/src/database/sql/initialize.sql index 8c0f2ef..3569fd5 100644 --- a/src/database/sql/initialize.sql +++ b/src/database/sql/initialize.sql @@ -13,13 +13,13 @@ CREATE TABLE IF NOT EXISTS user ( ); CREATE TABLE IF NOT EXISTS submission ( - id INTEGER PRIMARY KEY, - user_id INTEGER NOT NULL, - problem_id INTEGER NOT NULL, - language TEXT NOT NULL, - details TEXT NOT NULL, - code TEXT NOT NULL - + id INTEGER PRIMARY KEY, + user_id INTEGER NOT NULL, + problem_id INTEGER NOT NULL, + language TEXT NOT NULL, + details TEXT NOT NULL, + code TEXT NOT NULL, + code_length INTEGER NOT NULL ); INSERT INTO problem (title, description) VALUES ( diff --git a/src/database/sql/insert_submission.sql b/src/database/sql/insert_submission.sql index 96df322..3f70bca 100644 --- a/src/database/sql/insert_submission.sql +++ b/src/database/sql/insert_submission.sql @@ -1 +1 @@ -INSERT INTO submission (user_id, problem_id, language, details, code) VALUES (?1, ?2, ?3, ?4, ?5) RETURNING id; +INSERT INTO submission (user_id, problem_id, language, details, code, code_length) VALUES (?1, ?2, ?3, ?4, ?5, ?6) RETURNING id; diff --git a/src/database/submission.rs b/src/database/submission.rs index b117e17..0d6a131 100644 --- a/src/database/submission.rs +++ b/src/database/submission.rs @@ -8,6 +8,7 @@ pub struct Submission { language: String, details: String, code: String, + code_length: i64, } impl Submission { @@ -18,8 +19,9 @@ impl Submission { language: String, details: String, code: String, + code_length: i64, ) -> Self { - Self { id, user_id, problem_id, language, details, code } + Self { id, user_id, problem_id, language, details, code, code_length } } pub fn id(&self) -> i64 { self.id } @@ -28,6 +30,7 @@ impl Submission { pub fn language(&self) -> &str { &self.language } pub fn details(&self) -> &str { &self.details } pub fn code(&self) -> &str { &self.code } + pub fn code_length(&self) -> i64 { self.code_length } } #[derive(Serialize)] @@ -37,4 +40,6 @@ pub struct DisplaySubmission { pub(crate) language: String, pub(crate) details: String, pub(crate) code: String, + pub(crate) code_length: i64, } + |
