Beispiel #1
0
        private static async Task ExtractMetadataAsync(
            UpgradeServiceAccessor services, SqlExecutor executor, SqlWorkerResult result, SqlWorkerTask task,
            CancellationToken token)
        {
            var set               = new MetadataSet();
            var mapping           = new MetadataMapping(services.StorageDriver, services.NameBuilder);
            var metadataExtractor = new MetadataExtractor(mapping, executor);

            foreach (var metadataTask in services.MappingResolver.GetMetadataTasks()
                     .Where(metadataTask => !ShouldSkipMetadataExtraction(mapping, result, metadataTask)))
            {
                try {
                    if (task.HasFlag(SqlWorkerTask.ExtractMetadataAssemblies))
                    {
                        await metadataExtractor.ExtractAssembliesAsync(set, metadataTask, token).ConfigureAwait(false);
                    }

                    if (task.HasFlag(SqlWorkerTask.ExtractMetadataTypes))
                    {
                        await metadataExtractor.ExtractTypesAsync(set, metadataTask, token).ConfigureAwait(false);
                    }

                    if (task.HasFlag(SqlWorkerTask.ExtractMetadataExtension))
                    {
                        await metadataExtractor.ExtractExtensionsAsync(set, metadataTask, token).ConfigureAwait(false);
                    }
                }
                catch (Exception exception) {
                    UpgradeLog.Warning(
                        Strings.LogFailedToExtractMetadataFromXYZ, metadataTask.Catalog, metadataTask.Schema, exception);
                }
            }
            result.Metadata = set;
        }
        private void UpdateMetadata(Session session)
        {
            var groups                  = BuildMetadata(session.Domain, session.StorageNode.TypeIdRegistry);
            var driver                  = session.Handlers.StorageDriver;
            var mapping                 = new MetadataMapping(driver, session.Handlers.NameBuilder);
            var executor                = session.Services.Demand <IProviderExecutor>();
            var resolver                = UpgradeContext.Services.MappingResolver;
            var metadataSchema          = UpgradeContext.Configuration.DefaultSchema;
            var sqlModel                = UpgradeContext.ExtractedSqlModelCache;
            var namesShouldBeActualized = UpgradeContext.Configuration.ShareStorageSchemaOverNodes && UpgradeContext.Services.ProviderInfo.Supports(ProviderFeatures.Multischema);
            var nodeConfiguration       = UpgradeContext.NodeConfiguration;

            foreach (var group in groups)
            {
                var metadataDatabase = group.Key;
                var metadata         = group.Value;
                var schema           = resolver.ResolveSchema(sqlModel, metadataDatabase, metadataSchema);
                var task             = (!namesShouldBeActualized)
          ? new SqlExtractionTask(schema.Catalog.GetNameInternal(), schema.GetNameInternal())
          : new SqlExtractionTask(nodeConfiguration.GetActualNameFor(schema.Catalog), nodeConfiguration.GetActualNameFor(schema));
                var writer = new MetadataWriter(driver, mapping, task, executor);
                writer.Write(metadata);
            }

            var flatMetadata = new MetadataSet();

            foreach (var metadata in groups.Values)
            {
                flatMetadata.UnionWith(metadata);
            }
            UpgradeContext.Metadata = flatMetadata;
        }
Beispiel #3
0
        // Constructors

        public MetadataExtractor(MetadataMapping mapping, ISqlExecutor executor)
        {
            ArgumentValidator.EnsureArgumentNotNull(mapping, "mapping");
            ArgumentValidator.EnsureArgumentNotNull(executor, "executor");

            this.mapping  = mapping;
            this.executor = executor;
        }
Beispiel #4
0
        private static bool ShouldSkipMetadataExtraction(MetadataMapping mapping, SqlWorkerResult result, SqlExtractionTask task)
        {
            if (result.Schema == null)
            {
                return(false);
            }

            var tables = GetSchemaTables(result, task);

            return(tables[mapping.Assembly] == null && tables[mapping.Type] == null && tables[mapping.Extension] == null);
        }
        // Constructors

        public MetadataWriter(StorageDriver driver, MetadataMapping mapping, SqlExtractionTask task, IProviderExecutor executor)
        {
            ArgumentValidator.EnsureArgumentNotNull(driver, "driver");
            ArgumentValidator.EnsureArgumentNotNull(mapping, "mapping");
            ArgumentValidator.EnsureArgumentNotNull(task, "task");
            ArgumentValidator.EnsureArgumentNotNull(executor, "executor");

            this.driver   = driver;
            this.mapping  = mapping;
            this.task     = task;
            this.executor = executor;
        }