コード例 #1
0
ファイル: Context.cs プロジェクト: li--paul/csharp-driver
 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));
 }
コード例 #2
0
ファイル: Context.cs プロジェクト: li--paul/csharp-driver
        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);
        }