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));
        }
Exemplo n.º 3
0
 public SqliteSyncItem(SqliteSyncTable table, ChangeType changeType, Dictionary <string, object> values) :
     base(table.Name, changeType, values)
 {
 }