This commit is contained in:
Yuriy Dupyn 2024-01-28 22:25:38 +01:00
parent 2ba158a0d4
commit 0cac6a0094
3 changed files with 16 additions and 13 deletions

View file

@ -61,7 +61,7 @@ async fn main() -> anyhow::Result<()> {
println!("Ready for query: {:?}", data); println!("Ready for query: {:?}", data);
line.clear(); line.clear();
let res = std::io::stdin().read_line(&mut line); let res = std::io::stdin().read_line(&mut line);
if let Ok(_) = res { if res.is_ok() {
if line.eq("exit") { if line.eq("exit") {
break; break;
} }

View file

@ -110,8 +110,10 @@ async fn create_token(tokens: &TokenStore) -> anyhow::Result<(i32, i32, ResetCan
let mut tokens = tokens.lock().await; let mut tokens = tokens.lock().await;
loop { loop {
let pid_key = random_pid_key(); let pid_key = random_pid_key();
if !tokens.contains_key(&pid_key) {
tokens.insert(pid_key, token.clone()); use std::collections::hash_map;
if let hash_map::Entry::Vacant(token_entry) = tokens.entry(pid_key) {
token_entry.insert(token.clone());
let (pid, key) = pid_key; let (pid, key) = pid_key;
return Ok((pid, key, token)); return Ok((pid, key, token));
@ -187,7 +189,7 @@ async fn handle_query<W>(writer: &mut W, state: &SharedDbState, query: String, t
true true
} }
Response::Selected(schema, columns, mut rows) => { Response::Selected(schema, columns, mut rows) => {
writer.write_table_header(&schema, &columns).await?; writer.write_table_header(schema, &columns).await?;
match rows.next() { match rows.next() {
Some(row) => { Some(row) => {
writer.write_table_row(&row).await?; writer.write_table_row(&row).await?;
@ -223,7 +225,7 @@ async fn handle_query<W>(writer: &mut W, state: &SharedDbState, query: String, t
if need_write { if need_write {
let state = state.read().await; let state = state.read().await;
state_to_file(&state, &config.get_file_path()).await?; state_to_file(&state, config.get_file_path()).await?;
} }
Ok(()) Ok(())

View file

@ -2,6 +2,7 @@ use async_trait::async_trait;
use rand::Rng; use rand::Rng;
use rand_pcg::Pcg64; use rand_pcg::Pcg64;
use rand_seeder::Seeder; use rand_seeder::Seeder;
use std::fmt;
use minisql::operation::ColumnSelection; use minisql::operation::ColumnSelection;
use minisql::restricted_row::RestrictedRow; use minisql::restricted_row::RestrictedRow;
use minisql::schema::{Column, TableSchema}; use minisql::schema::{Column, TableSchema};
@ -20,14 +21,14 @@ pub enum CompleteStatus {
CreateIndex, CreateIndex,
} }
impl CompleteStatus { impl fmt::Display for CompleteStatus {
fn to_string(&self) -> String { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self { match self {
CompleteStatus::Insert { oid, rows } => format!("INSERT {} {}", oid, rows), CompleteStatus::Insert { oid, rows } => write!(f, "INSERT {} {}", oid, rows),
CompleteStatus::Delete(rows) => format!("DELETE {}", rows), CompleteStatus::Delete(rows) => write!(f, "DELETE {}", rows),
CompleteStatus::Select(rows) => format!("SELECT {}", rows), CompleteStatus::Select(rows) => write!(f, "SELECT {}", rows),
CompleteStatus::CreateTable => "CREATE TABLE".to_string(), CompleteStatus::CreateTable => write!(f, "CREATE TABLE"),
CompleteStatus::CreateIndex => "CREATE INDEX".to_string(), CompleteStatus::CreateIndex => write!(f, "CREATE INDEX"),
} }
} }
} }
@ -118,4 +119,4 @@ fn column_to_description(schema: &TableSchema, column: Column) -> anyhow::Result
fn table_name_to_oid(table_name: &str) -> i32 { fn table_name_to_oid(table_name: &str) -> i32 {
let mut rng: Pcg64 = Seeder::from(table_name).make_rng(); let mut rng: Pcg64 = Seeder::from(table_name).make_rng();
rng.gen::<i32>() rng.gen::<i32>()
} }