### column名とvalueを指定してupdate
fn update_value_by_column_condition( &mut self, where_column: &str, where_value: &Value, set_column: &str, new_value: Value, ) -> Result<usize, String> { let where_index = self.columns.columns.iter().position(|c| c.name == where_column) .ok_or_else(|| format!("Column '{}' not found", where_column))?; let set_index = self.columns.columns.iter().position(|c| c.name == set_column) .ok_or_else(|| format!("Column '{}' not found", set_column))?; let expected_type = &self.columns.columns[set_index].constraint; if !type_matches(&new_value, expected_type) { return Err(format!( "Type mismatch: column '{}' expects {:?}, got {:?}", set_column, expected_type, new_value )); } let mut updated = 0; for row in self.rows.iter_mut() { if let Some(v) = row.get(where_index) { if v == where_value { row[set_index] = new_value.clone(); updated += 1; } } } Ok(updated) }
let result = table.insert_row(vec![ Value::Integer(2), Value::Text("Bob".to_string()), Value::Integer(25), ]); println!("{:?}", table); let _ = table.update_value_by_column_condition( "id", &Value::Integer(2), "name", Value::Text("Carol".to_string()), ); let matching_rows = table.find_rows_by_column_value("id", &Value::Integer(2)); for row in matching_rows { println!("Matched row: {:?}", row); }
Matched row: [Integer(2), Text(“Carol”), Integer(25)]
### delete
fn delete_rows_by_column_value( &mut self, column_name: &str, target: &Value, ) -> Result<usize, String> { let col_index = self .columns .columns .iter() .position(|col| col.name == column_name) .ok_or_else(|| format!("Column '{}' not found", column_name))?; let original_len = self.rows.len(); self.rows.retain(|row| row.get(col_index) != Some(target)); Ok(original_len - self.rows.len()) }
let matching_rows = table.find_rows_by_column_value("id", &Value::Integer(2)); for row in matching_rows { println!("Matched row: {:?}", row); } let _ = table.delete_rows_by_column_value("id", &Value::Integer(2)); println!("{:?}", table);
Matched row: [Integer(2), Text(“Carol”), Integer(25)]
Table { name: “users”, columns: Columns { columns: [Column { name: “id”, constraint: Integer }, Column { name: “name”, constraint: Text }, Column { name: “age”, constraint: Integer }] }, rows: [[Integer(1), Text(“Alice”), Integer(30)]] }
これで、一通りcreate, insert, select, update, deleteまではできた。
ここから改善していく。