Method: Extralite::Changeset#invert

Defined in:
ext/extralite/changeset.c

#invertExtralite::Changeset

Returns an inverted changeset. The inverted changeset can be used to undo the changes in the original changeset.

# undo changes
changeset.invert.apply(db)

Returns:



380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
# File 'ext/extralite/changeset.c', line 380

VALUE Changeset_invert(VALUE self) {
  Changeset_t *changeset = self_to_changeset(self);
  verify_changeset(changeset);

  VALUE inverted = rb_funcall(cChangeset, ID_new, 0);
  Changeset_t *inverted_changeset = self_to_changeset(inverted);

  int rc = sqlite3changeset_invert(
    changeset->changeset_len, changeset->changeset_ptr,
    &inverted_changeset->changeset_len, &inverted_changeset->changeset_ptr
  );
  if (rc != SQLITE_OK)
    rb_raise(cError, "Error while inverting changeset: %s", sqlite3_errstr(rc));

  RB_GC_GUARD(inverted);
  return inverted;
}