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 static PairedNodeCollection <Schema, Table> GetSchemaTables(SqlWorkerResult result, SqlExtractionTask task) { var catalog = GetCatalog(result, task.Catalog); var schema = GetSchema(catalog, task.Schema); return(schema.Tables); }
private static Catalog GetCatalog(SqlWorkerResult result, string catalogName) { if (catalogName.IsNullOrEmpty()) { return(result.Schema.Catalogs.Single(c => c.Name == catalogName)); } return(result.Schema.Catalogs[catalogName]); }
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); }
private static SqlWorkerResult Run(UpgradeServiceAccessor services, SqlWorkerTask task) { var result = new SqlWorkerResult(); var executor = new SqlExecutor(services.StorageDriver, services.Connection); if ((task & SqlWorkerTask.DropSchema) > 0) { DropSchema(services, executor); } if ((task & SqlWorkerTask.ExtractSchema) > 0) { result.Schema = ExtractSchema(services, executor); } if ((task & (SqlWorkerTask.ExtractMetadataTypes | SqlWorkerTask.ExtractMetadataAssemblies | SqlWorkerTask.ExtractMetadataExtension)) > 0) { ExtractMetadata(services, executor, result, task); } return(result); }
private static async Task <SqlWorkerResult> RunAsync( UpgradeServiceAccessor services, SqlWorkerTask task, CancellationToken token) { var result = new SqlWorkerResult(); var executor = new SqlExecutor(services.StorageDriver, services.Connection); if ((task & SqlWorkerTask.DropSchema) > 0) { await DropSchemaAsync(services, executor, token).ConfigureAwait(false); } if ((task & SqlWorkerTask.ExtractSchema) > 0) { result.Schema = await ExtractSchemaAsync(services, executor, token).ConfigureAwait(false); } if ((task & (SqlWorkerTask.ExtractMetadataTypes | SqlWorkerTask.ExtractMetadataAssemblies | SqlWorkerTask.ExtractMetadataExtension)) > 0) { await ExtractMetadataAsync(services, executor, result, task, token).ConfigureAwait(false); } return(result); }
private static Catalog GetCatalog(SqlWorkerResult result, string catalogName) => catalogName.IsNullOrEmpty() ? result.Schema.Catalogs.Single(c => c.Name == catalogName) : result.Schema.Catalogs[catalogName];