MakeTableInBatchWriteRowRequest(string tableName, DataModel.RowChanges rowChanges)
        {
            var builder = PB.TableInBatchWriteRowRequest.CreateBuilder();

            builder.SetTableName(tableName);

            foreach (var op in rowChanges.PutOperations)
            {
                var putBuilder = PB.PutRowInBatchWriteRowRequest.CreateBuilder();
                putBuilder.SetCondition(MakeCondition(op.Item1));
                putBuilder.AddRangePrimaryKey(MakeColumns(op.Item2));
                putBuilder.AddRangeAttributeColumns(MakeColumns(op.Item3));
                builder.AddPutRows(putBuilder.Build());
            }

            foreach (var op in rowChanges.UpdateOperations)
            {
                var updateBuilder = PB.UpdateRowInBatchWriteRowRequest.CreateBuilder();
                updateBuilder.SetCondition(MakeCondition(op.Item1));
                updateBuilder.AddRangePrimaryKey(MakeColumns(op.Item2));
                updateBuilder.AddRangeAttributeColumns(MakeUpdateOfAttribute(op.Item3));
                builder.AddUpdateRows(updateBuilder.Build());
            }

            foreach (var op in rowChanges.DeleteOperations)
            {
                var deleteBuilder = PB.DeleteRowInBatchWriteRowRequest.CreateBuilder();
                deleteBuilder.SetCondition(MakeCondition(op.Item1));
                deleteBuilder.AddRangePrimaryKey(MakeColumns(op.Item2));
                builder.AddDeleteRows(deleteBuilder.Build());
            }

            return(builder.Build());
        }
        private PB.TableInBatchWriteRowRequest EncodeTableInBatchWriteRowRequest(string tableName, DataModel.RowChanges rowChanges)
        {
            var tableBuilder = PB.TableInBatchWriteRowRequest.CreateBuilder();

            tableBuilder.SetTableName(tableName);

            if (rowChanges == null || rowChanges.IsEmpty())
            {
                return(tableBuilder.Build());
            }

            foreach (var rowChange in rowChanges.RowPutChanges)
            {
                tableBuilder.AddRows(EncodeWriteRowRequest(rowChange));
            }

            foreach (var rowChange in rowChanges.RowUpdateChanges)
            {
                tableBuilder.AddRows(EncodeWriteRowRequest(rowChange));
            }

            foreach (var rowChange in rowChanges.RowDeleteChanges)
            {
                tableBuilder.AddRows(EncodeWriteRowRequest(rowChange));
            }

            return(tableBuilder.Build());
        }