private ZipFileResultEntry[] SerializePerTable(SerializationSet serializationSet, DataRequest request)
        {
            var filteredMetaDataList = new List <SerializationSet>();

            foreach (var table in serializationSet.Tables)
            {
                var filteredMetaData = serializationSet.Filter(table.Name);
                filteredMetaData = ReplaceOptionProcessor.Process(filteredMetaData, request);

                if (filteredMetaData.Tables.Any())
                {
                    filteredMetaDataList.Add(filteredMetaData);
                }
            }

            var entries = new List <ZipFileResultEntry>();

            foreach (var dataSet in filteredMetaDataList)
            {
                var filename = $"{dataSet.Tables[0].Name}.{request.Ext}";
                var serializationSetStream = new MemoryStream();
                var serializer             = this.GetDataSerializer(request.OutputType);
                serializer.Serialize(serializationSetStream, dataSet);

                entries.Add(new ZipFileResultEntry(filename, serializationSetStream));
            }

            return(entries.ToArray());
        }
        private SerializationSet GetSerializationSet(string databaseName, DataRequest request)
        {
            var runtimeService = this.cremaHost.GetService(typeof(IRuntimeService)) as IRuntimeService;

            if (runtimeService == null)
            {
                throw new NullReferenceException(nameof(runtimeService));
            }

            var result = runtimeService.GetDataGenerationData(databaseName, request.Tags, request.FilterExpression, request.IsDevMode, request.Revision);

            result.Validate();

            var filteredMetaData = ReplaceOptionProcessor.Process(result.Value, request);

            return(filteredMetaData);
        }