private Task <RowSet> ContinueSaveBatch(Task <RowSet> rsTask, CqlSaveTag tag) { return(rsTask.ContinueWith(t => { var rs = t.Result; foreach (var table in _tables) { if (tag.TableTypes[table.Key] == tag.TableType) { _mutationTrackers[table.Key].BatchCompleted(rs.Info.QueryTrace); } } _additionalCommands = tag.NewAdditionalCommands; return rs; }, TaskContinuationOptions.ExecuteSynchronously)); }
private IAsyncResult BeginSaveChangesBatchV2(TableType tableType, ConsistencyLevel consistencyLevel, AsyncCallback callback, object state) { if (tableType == TableType.All) { throw new ArgumentOutOfRangeException("tableType"); } var tableTypes = new Dictionary <string, TableType>(); foreach (KeyValuePair <string, ITable> table in _tables) { bool isCounter = false; List <MemberInfo> props = table.Value.GetEntityType().GetPropertiesOrFields(); foreach (MemberInfo prop in props) { Type tpy = prop.GetTypeFromPropertyOrField(); if ( prop.GetCustomAttributes(typeof(CounterAttribute), true).FirstOrDefault() as CounterAttribute != null) { isCounter = true; break; } } tableTypes.Add(table.Key, isCounter ? TableType.Counter : TableType.Standard); } var newAdditionalCommands = new List <CqlCommand>(); if (((tableType & TableType.Counter) == TableType.Counter)) { bool enableTracing = false; var counterBatchScript = new BatchStatement(); foreach (KeyValuePair <string, ITable> table in _tables) { if (tableTypes[table.Key] == TableType.Counter) { enableTracing |= _mutationTrackers[table.Key].AppendChangesToBatch(counterBatchScript, table.Key); } } foreach (CqlCommand additional in _additionalCommands) { if (tableTypes[additional.GetTable().GetQuotedTableName()] == TableType.Counter) { counterBatchScript.Add(additional); enableTracing |= additional.IsTracing; } else if (tableType == TableType.Counter) { newAdditionalCommands.Add(additional); } } if (!counterBatchScript.IsEmpty) { var rsTask = _managedSession.ExecuteAsync(counterBatchScript .SetBatchType(BatchType.Counter) .SetConsistencyLevel(consistencyLevel) .EnableTracing(enableTracing)); var tag = new CqlSaveTag { TableTypes = tableTypes, TableType = TableType.Counter, NewAdditionalCommands = newAdditionalCommands }; return(ToApm(ContinueSaveBatch(rsTask, tag), callback, state)); } } if (((tableType & TableType.Standard) == TableType.Standard)) { bool enableTracing = false; var batchScript = new BatchStatement(); foreach (KeyValuePair <string, ITable> table in _tables) { if (tableTypes[table.Key] == TableType.Standard) { enableTracing |= _mutationTrackers[table.Key].AppendChangesToBatch(batchScript, table.Key); } } foreach (CqlCommand additional in _additionalCommands) { if (tableTypes[additional.GetTable().GetQuotedTableName()] == TableType.Standard) { enableTracing |= additional.IsTracing; batchScript.Add(additional); } else if (tableType == TableType.Standard) { newAdditionalCommands.Add(additional); } } if (!batchScript.IsEmpty) { var rsTask = _managedSession.ExecuteAsync(batchScript .SetBatchType(BatchType.Logged) .SetConsistencyLevel(consistencyLevel) .EnableTracing(enableTracing)); var tag = new CqlSaveTag { TableTypes = tableTypes, TableType = TableType.Standard, NewAdditionalCommands = newAdditionalCommands }; return(ToApm(ContinueSaveBatch(rsTask, tag), callback, state)); } } return(null); }