Skip to main content

Update

Struct Update 

Source
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>

Source

pub fn values(&self) -> &[(F::Old, Option<Value<S, B>>)]

Returns a reference to the (old, new) value pairs.

Source

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>

Source

pub fn set( self, col_idx: usize, old: impl Into<Value<S, B>>, new: impl Into<Value<S, B>>, ) -> Result<Self, Error>

Sets the value for a specific column by index.

§Arguments
  • col_idx - The index of the column to set.
  • old - The old value for the column.
  • new - The new value for the column.
§Errors
  • ColumnIndexOutOfBounds - If the provided column index is out of bounds for the table schema.
Source

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"
Source

pub fn set_null(self, col_idx: usize) -> Result<Self, Error>
where S: Default, B: Default,

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>

Source

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.
Source

pub fn set_null(self, col_idx: usize) -> Result<Self, Error>
where S: Default, B: Default,

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, F: Format<S, B>, S, B> AsRef<T> for Update<T, F, S, B>

Source§

fn as_ref(&self) -> &T

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<T: Clone, F: Clone + Format<S, B>, S: Clone, B: Clone> Clone for Update<T, F, S, B>
where F::Old: Clone,

Source§

fn clone(&self) -> Update<T, F, S, B>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Debug, F: Debug + Format<S, B>, S: Debug, B: Debug> Debug for Update<T, F, S, B>
where F::Old: Debug,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

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,

Source§

fn from(table: T) -> Self

Converts to this type from the input type.
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>>)>

Source§

fn from(update: Update<T, F, S, B>) -> Self

Converts to this type from the input type.
Source§

impl<T, F: Format<S, B>, S, B> Indirect for Update<T, F, S, B>

Source§

fn indirect(self, indirect: bool) -> Self

Mark this operation as indirect (trigger-induced or cascading).
Source§

impl<T: DynTable + PartialEq, F: Format<S, B>, S: PartialEq + AsRef<str>, B: PartialEq + AsRef<[u8]>> PartialEq for Update<T, F, S, B>
where F::Old: PartialEq,

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more

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>
where T: Send, <F as Format<S, B>>::Old: Send, S: Send, B: Send,

§

impl<T, F, S, B> Sync for Update<T, F, S, B>
where T: Sync, <F as Format<S, B>>::Old: Sync, S: Sync, B: Sync,

§

impl<T, F, S, B> Unpin for Update<T, F, S, B>
where T: Unpin, <F as Format<S, B>>::Old: Unpin, S: Unpin, B: Unpin,

§

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>
where T: UnwindSafe, <F as Format<S, B>>::Old: UnwindSafe, S: UnwindSafe, B: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.