The following pseudocode illustrates how upload events and upload scripts are invoked.
These events take place at the upload location in the complete event model. See Overview of MobiLink events.
------------------------------------------------------ upload ------------------------------------------------------ begin_upload // Connection event for each table being synchronized { begin_upload // Table event } handle_UploadData 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 } For each table being synchronized { if( begin_upload table script is called ) { end_upload // Table event } } if( begin_upload connection script was called ) { end_upload // Connection event for each table being synchronized { upload_statistics // Table event. } upload_statistics // Connection event. COMMIT |
------------------------------------------------------ <upload_inserted_row> ------------------------------------------------------ // NOTES: // - Only table scripts for the current table are involved. 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. } |
------------------------------------------------------ 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. 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 } |
------------------------------------------------------ upload_deleted_row ------------------------------------------------------ // NOTES: // - Only table scripts for the current table are involved. 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. } |
Send feedback about this page via email or DocCommentXchange | Copyright © 2008, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.0 |