mirror of
https://github.com/aljazceru/turso.git
synced 2025-12-18 09:04:19 +01:00
63 lines
1.6 KiB
Rust
63 lines
1.6 KiB
Rust
use std::fmt::Display;
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
use crate::model::table::SimValue;
|
|
|
|
use super::select::Select;
|
|
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
|
|
pub enum Insert {
|
|
Values {
|
|
table: String,
|
|
values: Vec<Vec<SimValue>>,
|
|
},
|
|
Select {
|
|
table: String,
|
|
select: Box<Select>,
|
|
},
|
|
}
|
|
|
|
impl Insert {
|
|
pub fn table(&self) -> &str {
|
|
match self {
|
|
Insert::Values { table, .. } | Insert::Select { table, .. } => table,
|
|
}
|
|
}
|
|
|
|
pub fn rows(&self) -> &[Vec<SimValue>] {
|
|
match self {
|
|
Insert::Values { values, .. } => values,
|
|
Insert::Select { .. } => unreachable!(),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Display for Insert {
|
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
match self {
|
|
Insert::Values { table, values } => {
|
|
write!(f, "INSERT INTO {table} VALUES ")?;
|
|
for (i, row) in values.iter().enumerate() {
|
|
if i != 0 {
|
|
write!(f, ", ")?;
|
|
}
|
|
write!(f, "(")?;
|
|
for (j, value) in row.iter().enumerate() {
|
|
if j != 0 {
|
|
write!(f, ", ")?;
|
|
}
|
|
write!(f, "{value}")?;
|
|
}
|
|
write!(f, ")")?;
|
|
}
|
|
Ok(())
|
|
}
|
|
Insert::Select { table, select } => {
|
|
write!(f, "INSERT INTO {table} ")?;
|
|
write!(f, "{select}")
|
|
}
|
|
}
|
|
}
|
|
}
|