MobiLink Synchronization Reference
Synchronization Events
Overview of MobiLink events
The following pseudo-code illustrates how upload events and upload scripts are invoked.
These events take place at the upload location in the complete event model. For more information, see Overview of MobiLink events.
------------------------------------------------------
upload
------------------------------------------------------
begin_upload
for each table being synchronized {
begin_upload_rows
for each uploaded INSERT or UPDATE for this table {
if( INSERT ) {
<upload_inserted_row>
}
if( UPDATE ) {
<upload_updated_row>
}
}
end_upload_rows
}
for each table being synchronized IN REVERSE ORDER {
begin_upload_deletes
for each uploaded DELETE for this table {
<upload_deleted_row>
}
end_upload_deletes
}
end_upload
upload_statistics
COMMIT
------------------------------------------------------
<upload_inserted_row>
------------------------------------------------------
// NOTES:
// - Only table scripts for the current table are involved.
// - Cursor-based upload scripts, like upload_cursor,
// are deprecated, and so are not shown.
UploadUsingStatements <- (
upload_insert script is defined
or upload_update script is defined
or upload_delete script is defined
or upload_fetch script is defined
or upload_new_row_insert script is defined
or upload_old_row_insert script is defined )if( UploadUsingStatements ) {
ConflictsAreExpected <- (
upload_new_row_insert script is defined
or upload_old_row_insert script is defined
or resolve_conflict script is defined )
if( upload_insert script is defined ) {
upload_insert
} else if( ConflictsAreExpected
and upload_update script is not defined
and upload_insert script is not defined
and upload_delete script is not defined ) {
// Forced conflict.
upload_new_row_insert
resolve_conflict
} else {
// ignore the insert
}
} else {
// ignore the insert
}
------------------------------------------------------ upload_updated_row ------------------------------------------------------ // NOTES: // - Only table scripts for the current table are involved. // - Both the old (original) and new rows are uploaded for // each update. // - Cursor-based upload scripts, like upload_cursor, // are deprecated, and so are not shown.
UploadUsingStatements <- (
upload_insert script is defined
or upload_update script is defined
or upload_delete script is defined
or upload_fetch script is defined
or upload_new_row_insert script is defined
or upload_old_row_insert script is defined )
if( UploadUsingStatements ) {
ConflictsAreExpected <- (
upload_new_row_insert script is defined
or upload_old_row_insert script is defined
or resolve_conflict script is defined )
Conflicted <- FALSE
if( upload_update script is defined ) {
if( ConflictsAreExpected
and upload_fetch script is defined ) {
FETCH using upload_fetch INTO current_row
if( current_row <> old row ) {
Conflicted <- TRUE
}
}
if( not Conflicted ) {
upload_update
}
} else if( upload_update script is not defined
and upload_insert script is not defined
and upload_delete script is not defined ) {
// Forced conflict.
Conflicted <- TRUE
}
if( ConflictsAreExpected and Conflicted ) {
upload_old_row_insert
upload_new_row_insert
resolve_conflict
}
} else {
// ignore the update
}
------------------------------------------------------
upload_deleted_row
------------------------------------------------------
// NOTES:
// - Only table scripts for the current table are involved.
// - Cursor-based upload scripts, like upload_cursor,
// are deprecated, and so are not shown.
UploadUsingStatements <- (
upload_insert script is defined
or upload_update script is defined
or upload_delete script is defined
or upload_fetch script is defined
or upload_new_row_insert script is defined
or upload_old_row_insert script is defined )if( UploadUsingStatements ) {
ConflictsAreExpected <- (
upload_new_row_insert script is defined
or upload_old_row_insert script is defined
or resolve_conflict script is defined )
if( upload_delete is defined ) {
upload_delete
} else if( ConflictsAreExpected
and upload_update script is not defined
and upload_insert script is not defined
and upload_delete script is not defined ) {
// Forced conflict.
upload_old_row_insert
resolve_conflict
} else {
// ignore this delete
}
} else {
// ignore this delete
}