/// <summary> /// Set common parameters to SelectChanges Sql command /// </summary> internal void SetSelectChangesCommonParameters(SyncContext context, SyncTable syncTable, Guid?excludingScopeId, bool isNew, long?lastTimestamp, DbCommand selectIncrementalChangesCommand) { // Set the parameters DbSyncAdapter.SetParameterValue(selectIncrementalChangesCommand, "sync_min_timestamp", lastTimestamp); DbSyncAdapter.SetParameterValue(selectIncrementalChangesCommand, "sync_scope_id", excludingScopeId.HasValue ? (object)excludingScopeId.Value : DBNull.Value); // Check filters SyncFilter tableFilter = null; // Sqlite does not have any filter, since he can't be server side if (this.Provider.CanBeServerProvider) { tableFilter = syncTable.GetFilter(); } var hasFilters = tableFilter != null; if (!hasFilters) { return; } // context parameters can be null at some point. var contexParameters = context.Parameters ?? new SyncParameters(); foreach (var filterParam in tableFilter.Parameters) { var parameter = contexParameters.FirstOrDefault(p => p.Name.Equals(filterParam.Name, SyncGlobalization.DataSourceStringComparison)); object val = parameter?.Value; DbSyncAdapter.SetParameterValue(selectIncrementalChangesCommand, filterParam.Name, val); } }
/// <summary> /// Set common parameters to SelectChanges Sql command /// </summary> private void SetSelectChangesCommonParameters(SyncContext context, SyncTable syncTable, Guid?excludingScopeId, bool isNew, long lastTimestamp, DbCommand selectIncrementalChangesCommand) { // Generate the isNewScope Flag. var isNewScope = isNew ? 1 : 0; var isReinit = context.SyncType == SyncType.Reinitialize ? 1 : 0; switch (context.SyncWay) { case SyncWay.Upload: // Overwrite if we are in Reinitialize mode (not RenitializeWithUpload) isNewScope = context.SyncType == SyncType.Reinitialize ? 1 : isNewScope; lastTimestamp = context.SyncType == SyncType.Reinitialize ? 0 : lastTimestamp; isReinit = context.SyncType == SyncType.Reinitialize ? 1 : 0; break; case SyncWay.Download: // Ovewrite on bot Reinitialize and ReinitializeWithUpload isNewScope = context.SyncType != SyncType.Normal ? 1 : isNewScope; lastTimestamp = context.SyncType != SyncType.Normal ? 0 : lastTimestamp; isReinit = context.SyncType != SyncType.Normal ? 1 : 0; break; default: break; } // Set the parameters DbTableManagerFactory.SetParameterValue(selectIncrementalChangesCommand, "sync_min_timestamp", lastTimestamp); DbTableManagerFactory.SetParameterValue(selectIncrementalChangesCommand, "sync_scope_id", excludingScopeId.HasValue ? (object)excludingScopeId.Value : DBNull.Value); // Check filters SyncFilter tableFilter = null; // Sqlite does not have any filter, since he can't be server side if (this.CanBeServerProvider) { tableFilter = syncTable.GetFilter(); } var hasFilters = tableFilter != null; if (!hasFilters) { return; } // context parameters can be null at some point. var contexParameters = context.Parameters ?? new SyncParameters(); foreach (var filterParam in tableFilter.Parameters) { var parameter = contexParameters.FirstOrDefault(p => p.Name.Equals(filterParam.Name, SyncGlobalization.DataSourceStringComparison)); object val = parameter?.Value; DbTableManagerFactory.SetParameterValue(selectIncrementalChangesCommand, filterParam.Name, val); } }
/// <summary> /// Adding filters to an existing configuration /// </summary> private void AddFilters(SyncTable schemaTable, DbTableBuilder builder) { var schema = schemaTable.Schema; if (schema.Filters != null && schema.Filters.Count > 0) { // get the all the filters for the table builder.Filter = schemaTable.GetFilter(); } }
/// <summary> /// Adding filters to an existing configuration /// </summary> private void AddFilters(SyncTable schemaTable, DbTableBuilder builder) { var schema = schemaTable.Schema; if (schema.Filters != null && schema.Filters.Count > 0) { // get the all the filters for the table builder.Filter = schemaTable.GetFilter(); this.Orchestrator.logger.LogDebug(SyncEventsId.AddFilter, builder.Filter); } }
/// <summary> /// Get the correct Select changes command /// Can be either /// - SelectInitializedChanges : All changes for first sync /// - SelectChanges : All changes filtered by timestamp /// - SelectInitializedChangesWithFilters : All changes for first sync with filters /// - SelectChangesWithFilters : All changes filtered by timestamp with filters /// </summary> private async Task <DbCommand> GetSelectChangesCommandAsync(SyncContext context, DbSyncAdapter syncAdapter, SyncTable syncTable, bool isNew) { DbCommand selectIncrementalChangesCommand; DbCommandType dbCommandType; SyncFilter tableFilter = null; // Check if we have parameters specified // Sqlite does not have any filter, since he can't be server side if (this.CanBeServerProvider) { tableFilter = syncTable.GetFilter(); } var hasFilters = tableFilter != null; // Determing the correct DbCommandType if (isNew && hasFilters) { dbCommandType = DbCommandType.SelectInitializedChangesWithFilters; } else if (isNew && !hasFilters) { dbCommandType = DbCommandType.SelectInitializedChanges; } else if (!isNew && hasFilters) { dbCommandType = DbCommandType.SelectChangesWithFilters; } else { dbCommandType = DbCommandType.SelectChanges; } // Get correct Select incremental changes command selectIncrementalChangesCommand = syncAdapter.GetCommand(dbCommandType, tableFilter); if (selectIncrementalChangesCommand == null) { throw new MissingCommandException(dbCommandType.ToString()); } // Add common parameters await syncAdapter.SetCommandParametersAsync(dbCommandType, selectIncrementalChangesCommand, tableFilter); return(selectIncrementalChangesCommand); }
/// <summary> /// Get the correct Select changes command /// Can be either /// - SelectInitializedChanges : All changes for first sync /// - SelectChanges : All changes filtered by timestamp /// - SelectInitializedChangesWithFilters : All changes for first sync with filters /// - SelectChangesWithFilters : All changes filtered by timestamp with filters /// </summary> internal async Task <DbCommand> GetSelectChangesCommandAsync(SyncContext context, SyncTable syncTable, SyncSetup setup, bool isNew, DbConnection connection, DbTransaction transaction) { DbCommand command; DbCommandType dbCommandType; SyncFilter tableFilter = null; var syncAdapter = this.GetSyncAdapter(syncTable, setup); // Check if we have parameters specified // Sqlite does not have any filter, since he can't be server side if (this.Provider.CanBeServerProvider) { tableFilter = syncTable.GetFilter(); } var hasFilters = tableFilter != null; // Determing the correct DbCommandType if (isNew && hasFilters) { dbCommandType = DbCommandType.SelectInitializedChangesWithFilters; } else if (isNew && !hasFilters) { dbCommandType = DbCommandType.SelectInitializedChanges; } else if (!isNew && hasFilters) { dbCommandType = DbCommandType.SelectChangesWithFilters; } else { dbCommandType = DbCommandType.SelectChanges; } // Get correct Select incremental changes command command = await syncAdapter.GetCommandAsync(dbCommandType, connection, transaction, tableFilter); return(command); }