Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use serde::{Deserialize, Serialize};
- use std::collections::HashMap;
- #[derive(Debug, Deserialize, Serialize)]
- pub struct SelectData {
- #[serde(rename = "where")]
- pub where_clause: HashMap<String, Value>,
- pub columns: Vec<String>,
- pub limit: u32,
- }
- #[derive(Debug, Deserialize, Serialize)]
- #[serde(untagged)]
- pub enum Value {
- Str(String),
- Bool(bool),
- Num(f64),
- Array(Vec<Value>),
- }
- #[derive(Debug)]
- pub struct Query {
- pub query: String,
- pub values: Vec<Value>,
- }
- pub fn select_query(keyspace: String, table: String, data: SelectData) -> Query {
- let mut query = String::from("SELECT ");
- let mut values = Vec::new();
- let mut columns = Vec::new();
- for column in data.columns {
- columns.push(column);
- }
- query.push_str(&columns.join(", "));
- query.push_str(" FROM ");
- query.push_str(keyspace.as_str());
- query.push_str(".");
- query.push_str(table.as_str());
- query.push_str(" WHERE ");
- let mut where_clause = Vec::new();
- for (key, value) in data.where_clause {
- where_clause.push(format!("{} = ?", key));
- values.push(value);
- }
- query.push_str(&where_clause.join(" AND "));
- query.push_str(" LIMIT ");
- query.push_str(&data.limit.to_string());
- Query {
- query,
- values,
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement