-
-
Notifications
You must be signed in to change notification settings - Fork 2
Savepoint API
Savepoint is the object representation of a database's savepoint. This object is obtained either via database.savepoint() or via a CREATE, ALTER, or DROP operation.
See content
savepoint.name()savepoint.id()savepoint.masterSavepoint()savepoint.cascades()savepoint.schema()savepoint.databaseTag()savepoint.versionTag()savepoint.versionTags()savepoint.versionUp()savepoint.versionDown()savepoint.versionMax()savepoint.versionState()savepoint.commitDate()savepoint.commitDesc()savepoint.commitRef()savepoint.commitPid()savepoint.rollbackDate()savepoint.rollbackDesc()savepoint.rollbackRef()savepoint.rollbackPid()savepoint.restoreEffect()savepoint.restorePreview()savepoint.isNextRestorePoint()savepoint.rollback()savepoint.recommit()savepoint.restore()savepoint.jsonfy()savepoint.querify()
The UUID associated with the savepoint.
savepoint.id: (UUID, readonly)
savepoint.id: (UUID, readonly)⚽️ Usage:
const savepoint = await client.database('test_db').savepoint();
console.log(savepoint.id); // f740d66a-df5f-4a34-a281-8ef3ba6fe754
The subject database's generic identifier that transcends name changes.
savepoint.databaseTag(): (string, readonly)
savepoint.databaseTag(): (string, readonly)⚽️ Usage:
Consider a database's generic identifier before and after a name change:
// Before name change
const savepoint = await client.database('test_db').savepoint();
console.log(savepoint.databaseTag()); // db:18m6z// Name change
await client.alterDatabase('test_db', schema => schema.name('test_db_new'));// Now even after name change
const savepoint = await client.database('test_db_new').savepoint();
console.log(savepoint.databaseTag()); // db:18m6z
The savepoint's version tag.
savepoint.versionTag(): (number, readonly)
savepoint.versionTag(): (number, readonly)⚽️ Usage:
// Version 1
const savepoint = await client.createDatabase({
name: 'test_db',
tables: [{
name: 'test_tbl1',
columns: [],
}]
});
console.log(savepoint.versionTag()); // 1// Version 2
const savepoint = await client.database('test_db').createTable({
name: 'test_tbl2',
columns: [],
});
console.log(savepoint.versionTag()); // 2// Version 2 currently
const savepoint = await client.database('test_db').savepoint();
console.log(savepoint.versionTag()); // 2
The database's peak version regardless of its current rollback level.
savepoint.versionMax(): (number, readonly)
savepoint.versionMax(): (number, readonly)⚽️ Usage:
const savepoint = await client.database('test_db').savepoint();
console.log(savepoint.versionTag()); // 2
console.log(savepoint.versionMax()); // 2await savepoint.rollback();const savepoint = await client.database('test_db').savepoint();
console.log(savepoint.versionTag()); // 1
console.log(savepoint.versionMax()); // 2
The commitDesc() for the changes associated with the savepoint.
savepoint.commitDesc(): (string, readonly)
savepoint.commitDesc(): (string, readonly)⚽️ Usage:
const savepoint = await client.database('test_db').createTable({
name: 'test_tbl2',
columns: [],
}, { commitDesc(): 'Create test_tbl2' });
console.log(savepoint.commitDesc()); // Create test_tbl2const savepoint = await client.database('test_db').savepoint();
console.log(savepoint.commitDesc()); // Create test_tbl2
The savepoint's creation date.
savepoint.commitDate(): (Date, readonly)
savepoint.commitDate(): (Date, readonly)⚽️ Usage:
const savepoint = await client.database('test_db').savepoint();
console.log(savepoint.commitDate()); // 2024-07-20T15:31:06.096Z
The savepoint's rollback date.
savepoint.rollbackDate(): (Date, readonly)
savepoint.rollbackDate(): (Date, readonly)⚽️ Usage:
const savepoint = await client.database('test_db').createTable({
name: 'test_tbl2',
columns: [],
}, { commitDesc(): 'Create test_tbl2' });
console.log(savepoint.rollbackDate()); // nullawait savepoint.rollback();
console.log(savepoint.rollbackDate()); // 2024-07-20T15:31:06.096Z// Find the same savepoint with a forward lookup
const savepoint = await client.database('test_db').savepoint({ direction: 'forward' });
console.log(savepoint.rollbackDate()); // 2024-07-20T15:31:06.096Z
A single-word summary of the effect that rolling back to this savepoint will have on subject DB.
savepoint.restorePreview(): (string, readonly)
savepoint.restorePreview(): (string, readonly)⚽️ Usage:
Will rolling back to given savepoint mean dropping or re-creating the subject database?:
For a create operation...
const savepoint = await client.createDatabase('test_db', { descripton: 'Create db' });Rolling back will mean dropping the DB:
console.log(savepoint.descripton); // Create db
console.log(savepoint.restorePreview()); // DROP// Drop DB
console.log(savepoint.restorePreview()); // DROP
await savepoint.rollback();Having rolled back, rolling forward will mean a re-creation of the DB:
// Find the same savepoint with a forward lookup
const savepoint = await client.database('test_db').savepoint({ direction: 'forward' });
// Now rolling back will mean re-creating the DB
console.log(savepoint.descripton); // Create db
console.log(savepoint.restorePreview()); // CREATEBut note that table-level create/drop operations always only have an ALTER effect on parent DB:
// Create table - which translates to a DB "alter" operation
const savepoint = await client.database('test_db').createTable({
name: 'test_tbl2',
columns: [],
}, { commitDesc(): 'Create test_tbl2' });
// Rolling back will mean dropping the table - which will still translate to a DB "alter" operation
console.log(savepoint.descripton); // Create test_tbl2
console.log(savepoint.restorePreview()); // ALTER// Drop DB
await savepoint.rollback();
console.log(savepoint.restorePreview()); // ALTER// Find the same savepoint with a forward lookup
const savepoint = await client.database('test_db').savepoint({ direction: 'forward' });
// Now rolling back will mean re-creating the table - which will still translate to a DB "alter" operation
console.log(savepoint.descripton); // Create test_tbl2
console.log(savepoint.restorePreview()); // ALTER
A query preview of the rollback.
savepoint.rollbackQuery: ({ toString(): string }, readonly)
savepoint.rollbackQuery: ({ toString(): string }, readonly)⚽️ Usage:
You get a query instance that is toString()able:
For a create operation...
const savepoint = await client.createDatabase('test_db', { descripton: 'Create db' });Rolling back will mean dropping the DB:
console.log(savepoint.rollbackQuery.toString()); // DROP SCHEMA test_db CASCADE
Check if the savepoint is the next actual point in time for the database.
savepoint.isNextRestorePoint(): Promise<boolean>
savepoint.isNextRestorePoint(): Promise<boolean>⚙️ Spec:
- Return value: boolean.
⚽️ Usage:
For a new operation, that would be true:
const dbCreationSavepoint = await client.createDatabase('test_db');
console.log(await dbCreationSavepoint.isNextRestorePoint()); // trueBut after having performed more operations, that wouldn't be:
const tblCreationSavepoint = await client.database('test_db').createTable({
name: 'test_tbl',
columns: [{
name: 'id',
type: 'int'
}]
});
console.log(await tblCreationSavepoint.isNextRestorePoint()); // true
console.log(await dbCreationSavepoint.isNextRestorePoint()); // falseRollback table creation and test dbCreationSavepoint's position again:
await tblCreationSavepoint.rollback();
console.log(await tblCreationSavepoint.isNextRestorePoint()); // false
console.log(await dbCreationSavepoint.isNextRestorePoint()); // true
Rollback all changes associated with given savepoint.
savepoint.rollback(): Promise<boolean>
savepoint.rollback(): Promise<boolean>⚙️ Spec:
- Return value: boolean.
⚽️ Usage:
Create database and rollback:
// Create DB
const savepoint = await client.createDatabase('test_db', { descripton: 'Create db' });
// Roll back - which means drop the DB
await savepoint.rollback();Undo the rollback; i.e. roll forward:
// Find the same savepoint with a forward lookup
const savepoint = await client.database('test_db').savepoint({ direction: 'forward' });
// Roll back - which means re-create the DB
await savepoint.rollback();
Get a plain object representation of the savepoint.
savepoint.jsonfy(): object
savepoint.jsonfy(): object⚙️ Spec:
- Return value: an object of the form
{ id: string, name: string, databaseTag(): string, versionTag(): number, versionMax(): number, cursor: string, commitDesc(): string, commitDate(): Date, rollbackDate(): Date | null }.
⚽️ Usage:
const savepoint = await client.createDatabase('test_db', { descripton: 'Create db' });
console.log(savepoint.jsonfy());
Get the subject DB's schema snapshot at this point in time.
savepoint.schema(): object
savepoint.schema(): object⚙️ Spec:
- Return value: an object corresponding to
DatabaseSchemaSpec(in schema.json).
⚽️ Usage:
const savepoint = await client.database('test_db').createTable({
name: 'test_tbl',
columns: [{
name: 'id',
type: 'int'
}]
});
console.log(savepoint.schema());const savepoint = await client.database('test_db').savepoint();
await savepoint.schema();
Get the subject database's name.
savepoint.name(postRollback?: boolean): string
savepoint.name(postRollback?: boolean): string⚙️ Spec:
-
postRollback(boolean, optional): in case a name change was captured in the savepoint, whether to return the database's post-rollback name. Otherwise the database's active, pre-rollback name is returned. - Return value: the database name.
⚽️ Usage:
// Name change
const savepoint = await client.alterDatabase('test_db', schema => schema.name('test_db_new'));
// The database's active, pre-rollback name
console.log(savepoint.name()); // test_db_new
// The database's post-rollback name
console.log(savepoint.name(true)); // test_db