summaryrefslogtreecommitdiff
path: root/src/database
diff options
context:
space:
mode:
Diffstat (limited to 'src/database')
-rw-r--r--src/database/database.rs9
-rw-r--r--src/database/sql/fetch_display_submissions.sql5
-rw-r--r--src/database/sql/initialize.sql14
-rw-r--r--src/database/sql/insert_submission.sql2
-rw-r--r--src/database/submission.rs7
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,
}
+