Advertisement
Darkink

Query+Structs

Jan 29th, 2024 (edited)
1,181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.38 KB | None | 0 0
  1. use serde::{Deserialize, Serialize};
  2. use std::collections::HashMap;
  3.  
  4. #[derive(Debug, Deserialize, Serialize)]
  5. pub struct SelectData {
  6.     #[serde(rename = "where")]
  7.     pub where_clause: HashMap<String, Value>,
  8.     pub columns: Vec<String>,
  9.     pub limit: u32,
  10. }
  11.  
  12. #[derive(Debug, Deserialize, Serialize)]
  13. #[serde(untagged)]
  14. pub enum Value {
  15.     Str(String),
  16.     Bool(bool),
  17.     Num(f64),
  18.     Array(Vec<Value>),
  19. }
  20.  
  21. #[derive(Debug)]
  22. pub struct Query {
  23.     pub query: String,
  24.     pub values: Vec<Value>,
  25. }
  26.  
  27. pub fn select_query(keyspace: String, table: String, data: SelectData) -> Query {
  28.     let mut query = String::from("SELECT ");
  29.  
  30.     let mut values = Vec::new();
  31.  
  32.     let mut columns = Vec::new();
  33.  
  34.     for column in data.columns {
  35.         columns.push(column);
  36.     }
  37.  
  38.     query.push_str(&columns.join(", "));
  39.  
  40.     query.push_str(" FROM ");
  41.  
  42.     query.push_str(keyspace.as_str());
  43.  
  44.     query.push_str(".");
  45.  
  46.     query.push_str(table.as_str());
  47.  
  48.     query.push_str(" WHERE ");
  49.  
  50.     let mut where_clause = Vec::new();
  51.  
  52.     for (key, value) in data.where_clause {
  53.         where_clause.push(format!("{} = ?", key));
  54.  
  55.         values.push(value);
  56.     }
  57.  
  58.     query.push_str(&where_clause.join(" AND "));
  59.  
  60.     query.push_str(" LIMIT ");
  61.  
  62.     query.push_str(&data.limit.to_string());
  63.  
  64.     Query {
  65.         query,
  66.         values,
  67.     }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement