private async Task SetKeyCol <TColValue, TPrimaryKey>(Nuid id, string table_name, TPrimaryKey primary_key, int col, TColValue col_value) { if (col_value == null) { _Logger.LogError($"{id} SetKeyCol {table_name} {primary_key}_{col} when col_value is null!"); return; } if (NodeType == NodeType.Grain) { Entity entity = EntityManager.Get(id); if (entity == null) { _Logger.LogError($"{id} SetKeyCol {table_name} {primary_key}_{col} when Grain dont found entity!"); return; } Table <TPrimaryKey> table = entity.GetTable(table_name) as Table <TPrimaryKey>; if (table == null) { _Logger.LogError($"{id} SetKeyCol {table_name} {primary_key}_{col} when Grain dont found field!"); return; } NList result; if (!table.TrySetKeyCol(primary_key, col, col_value, out result)) { _Logger.LogError($"{id} SetKeyCol {table_name} {primary_key}_{col} when {col_value} TrySetRowCol failed!"); return; } await CallbackTable(id, table_name, TableEvent.SetCol, result); } else if (NodeType == NodeType.Cache) { NList value = await GetCacheTableKeyValue(id, table_name, primary_key); TColValue old_value = value.Get <TColValue>(col); if (old_value.Equals(col_value)) { _Logger.LogError($"{id} SetKeyCol {table_name} {primary_key}_{col} when new=old SetCacheRow failed!"); } value.Set(col, col_value); if (!await SetCacheTableKeyValue(id, table_name, primary_key, value)) { _Logger.LogError($"{id} SetKeyCol {table_name} {primary_key}_{col} when {value} SetCacheTableKeyValue failed!"); return; } NList result = NList.New(); result.Add(primary_key); result.Add(col); result.Add(old_value); result.Add(col_value); await CallbackTable(id, table_name, TableEvent.SetCol, result); } }
public async Task SetRowCol <T>(Nuid id, string table_name, long row, int col, T value) { if (value == null) { return; } Entity entity = EntityManager.Get(id); if (entity != null) { Table table = entity.GetTable(table_name); if (table == null) { return; } NList result; if (!table.TrySetRowCol(row, col, value, out result)) { return; } NList row_value = table.GetRow(row); BatchCahceList.Add(NList.New().Add((int)CacheOption.SetRow).Add(id).Add(table_name).Add(row).Add(row_value)); await CallbackTable(id, table_name, TableEvent.SetCol, result); } else { if (id.Origin == Identity) { NList row_value = NList.New(); NList old_value = await GetCacheRowValue(id, table_name, row); T old_row_value = old_value.Get <T>(col); row_value.Append(old_value); row_value.Set(col, value); if (await SetCacheRow(id, table_name, row, row_value)) { NList result = NList.New(); result.Add(row); result.Add(col); result.Add(old_row_value); result.Add(value); await CallbackTable(id, table_name, TableEvent.SetCol, result); } } else { INode node = GrainFactory.GetGrain <INode>(id.Origin); await node.SetRowCol(id, table_name, row, col, value); } } }