private async Task SetupTableForUpdatesOrDeletesOnly(SqliteSyncTable table, SqliteCommand cmd, CancellationToken cancellationToken = default) { var commandTextBase = new Func <string, string>((op) => $@"CREATE TRIGGER IF NOT EXISTS [__{table.Name}_ct-{op}__] AFTER {op} ON [{table.Name}] FOR EACH ROW BEGIN INSERT INTO [__CORE_SYNC_CT] (TBL, OP, PK_{table.PrimaryColumnType}) VALUES ('{table.Name}', '{op[0]}', {(op == "DELETE" ? "OLD" : "NEW")}.[{table.PrimaryColumnName}]); END"); cmd.CommandText = commandTextBase("UPDATE"); await cmd.ExecuteNonQueryAsync(cancellationToken); cmd.CommandText = commandTextBase("DELETE"); await cmd.ExecuteNonQueryAsync(cancellationToken); }
private static object GetValueFromRecord(SqliteSyncTable table, string columnName, int columnOrdinal, SqliteDataReader r) { if (r.IsDBNull(columnOrdinal)) { return(null); } if (table.RecordType == null) { return(r.GetValue(columnOrdinal)); } var property = table.RecordType.GetProperty(columnName); if (property != null) { return(GetValueFromRecord(r, columnOrdinal, property.PropertyType)); } //fallback to getvalue return(r.GetValue(columnOrdinal)); }
public SqliteSyncItem(SqliteSyncTable table, ChangeType changeType, Dictionary <string, object> values) : base(table.Name, changeType, values) { }