Browse Source

Fix DB unsigneed integers overflowing

new_protocol
ThePerkinrex 5 years ago
parent
commit
298d9e29e0
No known key found for this signature in database GPG Key ID: 1F45A7C4BFB41607
  1. 12
      server/src/db.rs

12
server/src/db.rs

@ -119,7 +119,7 @@ impl Db {
match self.conn.query_row( match self.conn.query_row(
"SELECT LobbyID from UsersInLobbies WHERE UserID = ?", "SELECT LobbyID from UsersInLobbies WHERE UserID = ?",
params![user.as_bytes().to_vec()], params![user.as_bytes().to_vec()],
|r| r.get(0), |r| r.get::<_ ,i32>(0).map(|x| x as u32),
) { ) {
Ok(v) => Ok(Some(v)), Ok(v) => Ok(Some(v)),
Err(e) => match e { Err(e) => match e {
@ -134,7 +134,7 @@ impl Db {
let mut prepared = self let mut prepared = self
.conn .conn
.prepare("SELECT ID FROM Lobbies WHERE Public = TRUE").unwrap(); .prepare("SELECT ID FROM Lobbies WHERE Public = TRUE").unwrap();
prepared.query(params![]).and_then(|r| r.map(|r| r.get(0)).collect()).unwrap() prepared.query(params![]).and_then(|r| r.map(|r| r.get::<_, i32>(0).map(|x| x as u32)).collect()).unwrap()
} }
fn delete_vote(&mut self, user: Uuid) { fn delete_vote(&mut self, user: Uuid) {
@ -148,7 +148,7 @@ impl Db {
self.delete_vote(user); self.delete_vote(user);
self.conn.execute( self.conn.execute(
"INSERT INTO Votes(UserID, GameID) VALUES(?, ?)", "INSERT INTO Votes(UserID, GameID) VALUES(?, ?)",
params![user.as_bytes().to_vec(), game], params![user.as_bytes().to_vec(), game as i32],
).unwrap(); ).unwrap();
} }
@ -162,19 +162,19 @@ impl Db {
pub fn get_votes(&mut self, lobby: u32) -> Vec<(String, u32, bool)> { pub fn get_votes(&mut self, lobby: u32) -> Vec<(String, u32, bool)> {
let mut prepared = self.conn.prepare_cached("SELECT Users.Name, Votes.GameID, Votes.Ready FROM Votes JOIN Users ON Users.UUID = Votes.UserID WHERE Votes.UserID IN (SELECT UserID FROM UsersInLobbies WHERE LobbyID = ?)").unwrap(); let mut prepared = self.conn.prepare_cached("SELECT Users.Name, Votes.GameID, Votes.Ready FROM Votes JOIN Users ON Users.UUID = Votes.UserID WHERE Votes.UserID IN (SELECT UserID FROM UsersInLobbies WHERE LobbyID = ?)").unwrap();
prepared.query(params![lobby]).and_then(|r| r.map(|r| r.try_into()).collect()).unwrap() prepared.query(params![lobby as i32]).and_then(|r| r.map(|r| r.try_into().map(|(s, n, b): (String, i32, bool)| (s, n as u32, b))).collect()).unwrap()
} }
pub fn is_poll_finished(&mut self, lobby: u32) -> bool { pub fn is_poll_finished(&mut self, lobby: u32) -> bool {
self.conn.query_row( self.conn.query_row(
"SELECT (SELECT COUNT(*) FROM UsersInLobbies where LobbyID = ?) = (SELECT COUNT(*) FROM Votes WHERE UserID IN (SELECT UserID FROM UsersInLobbies WHERE LobbyID = ?) AND Ready = TRUE)", "SELECT (SELECT COUNT(*) FROM UsersInLobbies where LobbyID = ?) = (SELECT COUNT(*) FROM Votes WHERE UserID IN (SELECT UserID FROM UsersInLobbies WHERE LobbyID = ?) AND Ready = TRUE)",
params![lobby, lobby], params![lobby as i32, lobby as i32],
|r| r.get(0) |r| r.get(0)
).unwrap() ).unwrap()
} }
pub fn delete_votes(&mut self, lobby: u32) { pub fn delete_votes(&mut self, lobby: u32) {
self.conn self.conn
.execute("DELETE FROM Votes WHERE UserId IN (SELECT UserID FROM UsersInLobbies WHERE LobbyID = ?)", params![lobby]).unwrap(); .execute("DELETE FROM Votes WHERE UserId IN (SELECT UserID FROM UsersInLobbies WHERE LobbyID = ?)", params![lobby as i32]).unwrap();
} }
} }

Loading…
Cancel
Save