Advertisement
Darkink

SelectFN

Jan 29th, 2024
1,315
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.24 KB | None | 0 0
  1. // TODO: return responses in json format
  2.  
  3. use std::sync::Arc;
  4.  
  5. use tokio::{io::AsyncWriteExt, net::tcp::OwnedWriteHalf, sync::Mutex};
  6.  
  7. use crate::{queries::select_query, state, structs};
  8.  
  9. pub async fn select(
  10.     write: Arc<Mutex<OwnedWriteHalf>>,
  11.     command: structs::CommandData,
  12.     user: Arc<Mutex<state::ClientState>>,
  13.     keyspace: Option<String>,
  14.     table: Option<String>,
  15. ) {
  16.     let mut write = write.lock().await;
  17.     let mut user = user.lock().await;
  18.  
  19.     if !user.connected {
  20.         let response = "Not connected to scylla";
  21.  
  22.         write.write_all(response.as_bytes()).await.unwrap();
  23.  
  24.         write.shutdown().await.unwrap();
  25.  
  26.         return;
  27.     }
  28.  
  29.     match command {
  30.         structs::CommandData::Select(select_data) => {
  31.             let query = select_query(
  32.                 keyspace.to_owned().unwrap(),
  33.                 table.to_owned().unwrap(),
  34.                 select_data,
  35.             );
  36.  
  37.             println!("query: {:?}", query);
  38.  
  39.             let session = user.session.as_ref().unwrap().lock().await;
  40.  
  41.             let rows = session.query(query.query, query.values).await.unwrap();
  42.  
  43.         }
  44.  
  45.         _ => {
  46.             println!("Unknown command data: {:?}", command);
  47.         }
  48.     }
  49. }
  50.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement