Browse Source

code format + 0 deletino

pull/25/head
Alexey Velikiy 3 years ago
parent
commit
85e11c8ae7
  1. 28
      server/src/services/data_service.rs

28
server/src/services/data_service.rs

@ -1,4 +1,4 @@
use rusqlite::{Connection, ToSql, params}; use rusqlite::{params, Connection, ToSql};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -46,7 +46,7 @@ impl DataService {
let id: SegmentId = repeat_with(fastrand::alphanumeric) let id: SegmentId = repeat_with(fastrand::alphanumeric)
.take(ID_LENGTH) .take(ID_LENGTH)
.collect(); .collect();
// merging // merging
// TODO extract intersected ids // TODO extract intersected ids
// TODO: merge with other segments // TODO: merge with other segments
@ -65,7 +65,11 @@ impl DataService {
"INSERT INTO segment (id, start, end) VALUES (?1, ?2, ?3)", "INSERT INTO segment (id, start, end) VALUES (?1, ?2, ?3)",
params![id, min, max], params![id, min, max],
)?; )?;
Ok(Segment { id: Some(id), from: min, to: max }) Ok(Segment {
id: Some(id),
from: min,
to: max,
})
} }
pub fn get_segments_inside(&self, from: u64, to: u64) -> anyhow::Result<Vec<Segment>> { pub fn get_segments_inside(&self, from: u64, to: u64) -> anyhow::Result<Vec<Segment>> {
@ -88,11 +92,13 @@ impl DataService {
pub fn get_segments_intersected(&self, from: u64, to: u64) -> anyhow::Result<Vec<Segment>> { pub fn get_segments_intersected(&self, from: u64, to: u64) -> anyhow::Result<Vec<Segment>> {
let conn = self.connection.lock().unwrap(); let conn = self.connection.lock().unwrap();
let mut stmt = conn.prepare("SELECT id, start, end FROM segment let mut stmt = conn.prepare(
"SELECT id, start, end FROM segment
WHERE (start <= ?1 and ?1 <= end) OR WHERE (start <= ?1 and ?1 <= end) OR
(start <= ?2 AND ?2 <= end) OR (start <= ?2 AND ?2 <= end) OR
(?1 <= start AND start <= ?2) OR (?1 <= start AND start <= ?2) OR
(?1 <= end AND end <= ?2) ")?; (?1 <= end AND end <= ?2) ",
)?;
let res = stmt let res = stmt
.query_map(params![from, to], |row| { .query_map(params![from, to], |row| {
@ -107,14 +113,20 @@ impl DataService {
Ok(res) Ok(res)
} }
pub fn delete_segments(&self, ids: &Vec<SegmentId>) -> anyhow::Result<usize> { pub fn delete_segments(&self, ids: &Vec<SegmentId>) -> anyhow::Result<usize> {
if ids.len() == 0 {
return Ok(0);
}
// TODO: here could be sql injection if you substitute id with string :) // TODO: here could be sql injection if you substitute id with string :)
let conn = self.connection.lock().unwrap(); let conn = self.connection.lock().unwrap();
let ids_comma = ids.iter().map(|id| "\"".to_string() + id + "\"").collect::<Vec<String>>().join(","); let ids_comma = ids
.iter()
.map(|id| "\"".to_string() + id + "\"")
.collect::<Vec<String>>()
.join(",");
let query_str = format!("DELETE FROM segment WHERE id in ({})", ids_comma); let query_str = format!("DELETE FROM segment WHERE id in ({})", ids_comma);
let mut stmt = conn.prepare(&query_str)?; let mut stmt = conn.prepare(&query_str)?;
let res = stmt.execute([])?; let res = stmt.execute([])?;
Ok(res) Ok(res)
} }
} }

Loading…
Cancel
Save