pub struct Update<T, F: Format<S, B>, S, B> { /* private fields */ }Expand description
Builder for an update operation, parameterized by the format type F and value types S, B.
Implementations§
Source§impl<T, F: Format<S, B>, S: Clone, B: Clone> Update<T, F, S, B>
impl<T, F: Format<S, B>, S: Clone, B: Clone> Update<T, F, S, B>
Sourcepub fn values(&self) -> &[(F::Old, Option<Value<S, B>>)]
pub fn values(&self) -> &[(F::Old, Option<Value<S, B>>)]
Returns a reference to the (old, new) value pairs.
Sourcepub fn extract_pk(&self) -> Vec<Value<S, B>>where
T: SchemaWithPK,
pub fn extract_pk(&self) -> Vec<Value<S, B>>where
T: SchemaWithPK,
Extract the primary key values from this update’s values.
Source§impl<T: DynTable, S: Clone + Debug + AsRef<str>, B: Clone + Debug + AsRef<[u8]>> Update<T, ChangesetFormat, S, B>
impl<T: DynTable, S: Clone + Debug + AsRef<str>, B: Clone + Debug + AsRef<[u8]>> Update<T, ChangesetFormat, S, B>
Sourcepub fn set(
self,
col_idx: usize,
old: impl Into<Value<S, B>>,
new: impl Into<Value<S, B>>,
) -> Result<Self, Error>
pub fn set( self, col_idx: usize, old: impl Into<Value<S, B>>, new: impl Into<Value<S, B>>, ) -> Result<Self, Error>
Sourcepub fn set_new(
self,
col_idx: usize,
new: impl Into<Value<S, B>>,
) -> Result<Self, Error>
pub fn set_new( self, col_idx: usize, new: impl Into<Value<S, B>>, ) -> Result<Self, Error>
Sets only the new value for a column, leaving old as undefined.
This is useful when the old value is not known (e.g., when parsing SQL UPDATE statements where only the new value is specified).
§Arguments
col_idx- The index of the column to set.new- The new value for the column.
§Errors
ColumnIndexOutOfBounds- If the column index is out of bounds.
§Example
use sqlite_diff_rs::{Update, ChangesetFormat, TableSchema};
// CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)
let schema: TableSchema<String> = TableSchema::new("users".into(), 3, vec![1, 0, 0]);
// UPDATE users SET name = 'Bob' WHERE id = 1
// We know id=1 (PK, unchanged) and name='Bob' (new), but not the old name
let update = Update::<_, ChangesetFormat, String, Vec<u8>>::from(schema)
.set(0, 1i64, 1i64).unwrap() // PK: old=1, new=1 (unchanged)
.set_new(1, "Bob").unwrap(); // name: old=undefined, new="Bob"Sourcepub fn set_null(self, col_idx: usize) -> Result<Self, Error>
pub fn set_null(self, col_idx: usize) -> Result<Self, Error>
Sets a column to NULL for both old and new values.
§Errors
ColumnIndexOutOfBounds- If the column index is out of bounds for the table schema.
§Example
use sqlite_diff_rs::{Update, ChangesetFormat, TableSchema};
// CREATE TABLE items (id INTEGER PRIMARY KEY, description TEXT)
let schema: TableSchema<String> = TableSchema::new("items".into(), 2, vec![1, 0]);
// UPDATE items SET description = NULL WHERE id = 1 AND description = NULL
let update = Update::<_, ChangesetFormat, String, Vec<u8>>::from(schema)
.set(0, 1i64, 1i64).unwrap()
.set_null(1).unwrap();Source§impl<T: DynTable, S: AsRef<str>, B: AsRef<[u8]>> Update<T, PatchsetFormat, S, B>
impl<T: DynTable, S: AsRef<str>, B: AsRef<[u8]>> Update<T, PatchsetFormat, S, B>
Sourcepub fn set(
self,
col_idx: usize,
new: impl Into<Value<S, B>>,
) -> Result<Self, Error>
pub fn set( self, col_idx: usize, new: impl Into<Value<S, B>>, ) -> Result<Self, Error>
Sets the value for a specific column by index.
§Implementation Note
In the patchset format, the old value is not stored for updates,
so we set it to the default value of (). Only the new value is stored.
§Arguments
col_idx- The index of the column to set.new- The new value for the column.
§Errors
ColumnIndexOutOfBounds- If the provided column index is out of bounds for the table schema.
Sourcepub fn set_null(self, col_idx: usize) -> Result<Self, Error>
pub fn set_null(self, col_idx: usize) -> Result<Self, Error>
Sets a column to NULL.
§Errors
ColumnIndexOutOfBounds- If the column index is out of bounds for the table schema.
§Example
use sqlite_diff_rs::{Update, PatchsetFormat, TableSchema};
// CREATE TABLE items (id INTEGER PRIMARY KEY, description TEXT)
let schema: TableSchema<String> = TableSchema::new("items".into(), 2, vec![1, 0]);
// UPDATE items SET description = NULL WHERE id = 1
let update = Update::<_, PatchsetFormat, String, Vec<u8>>::from(schema)
.set(0, 1i64).unwrap()
.set_null(1).unwrap();Trait Implementations§
Source§impl<T: Clone, F: Clone + Format<S, B>, S: Clone, B: Clone> Clone for Update<T, F, S, B>where
F::Old: Clone,
impl<T: Clone, F: Clone + Format<S, B>, S: Clone, B: Clone> Clone for Update<T, F, S, B>where
F::Old: Clone,
Source§impl<T: Debug, F: Debug + Format<S, B>, S: Debug, B: Debug> Debug for Update<T, F, S, B>where
F::Old: Debug,
impl<T: Debug, F: Debug + Format<S, B>, S: Debug, B: Debug> Debug for Update<T, F, S, B>where
F::Old: Debug,
impl<T: DynTable + Eq, F: Format<S, B>, S: Eq + AsRef<str>, B: Eq + AsRef<[u8]>> Eq for Update<T, F, S, B>where
F::Old: Eq,
Source§impl<T: DynTable, F: Format<S, B>, S: Clone + AsRef<str>, B: Clone + AsRef<[u8]>> From<T> for Update<T, F, S, B>where
F::Old: Clone,
impl<T: DynTable, F: Format<S, B>, S: Clone + AsRef<str>, B: Clone + AsRef<[u8]>> From<T> for Update<T, F, S, B>where
F::Old: Clone,
Source§impl<T: DynTable, F: Format<S, B>, S: AsRef<str>, B: AsRef<[u8]>> From<Update<T, F, S, B>> for Vec<(F::Old, Option<Value<S, B>>)>
impl<T: DynTable, F: Format<S, B>, S: AsRef<str>, B: AsRef<[u8]>> From<Update<T, F, S, B>> for Vec<(F::Old, Option<Value<S, B>>)>
Auto Trait Implementations§
impl<T, F, S, B> Freeze for Update<T, F, S, B>where
T: Freeze,
impl<T, F, S, B> RefUnwindSafe for Update<T, F, S, B>where
T: RefUnwindSafe,
<F as Format<S, B>>::Old: RefUnwindSafe,
S: RefUnwindSafe,
B: RefUnwindSafe,
impl<T, F, S, B> Send for Update<T, F, S, B>
impl<T, F, S, B> Sync for Update<T, F, S, B>
impl<T, F, S, B> Unpin for Update<T, F, S, B>
impl<T, F, S, B> UnsafeUnpin for Update<T, F, S, B>where
T: UnsafeUnpin,
impl<T, F, S, B> UnwindSafe for Update<T, F, S, B>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.