private SchemaExtractionResult GetRealExtractionResult(SchemaExtractionResult baseSchemaExtractionResult) { if (!context.Configuration.ShareStorageSchemaOverNodes) { return(baseSchemaExtractionResult); } // Skip mode is a special case. Real extraction result is generated by // a builder in the SynchronizeSchema() method. if (context.NodeConfiguration.UpgradeMode == DomainUpgradeMode.Skip) { return(baseSchemaExtractionResult); } //for default node if (context.ParentDomain == null) { if (context.Stage == UpgradeStage.Final) { return(baseSchemaExtractionResult.MakeShared()); } return(baseSchemaExtractionResult); } //for additional nodes if (context.Stage == UpgradeStage.Final) { var schemaExtractionResult = new SchemaExtractionResult(); var defaultNode = context.ParentDomain.StorageNodeManager.GetNode(WellKnown.DefaultNodeId); defaultNode.Mapping.GetAllSchemaNodes() .Select(node => node.Schema.Catalog) .Distinct() .ForEach(schemaExtractionResult.Catalogs.Add); return(schemaExtractionResult.MakeShared()); } return(baseSchemaExtractionResult); }
public void UpgradeSchema(SchemaExtractionResult extractedSchema, StorageModel sourceModel, StorageModel targetModel, ActionSequence upgradeActions) { var enforceChangedColumns = context.Hints .OfType <ChangeFieldTypeHint>() .SelectMany(hint => hint.AffectedColumns) .ToList(); var skipConstraints = context.Stage == UpgradeStage.Upgrading; var translator = new SqlActionTranslator( session.Handlers, executor, context.Services.MappingResolver, upgradeActions, extractedSchema, sourceModel, targetModel, enforceChangedColumns, !skipConstraints); var result = translator.Translate(); if (SqlLog.IsLogged(LogLevel.Info)) { LogStatements(result); } foreach (var handler in context.OrderedUpgradeHandlers) { handler.OnBeforeExecuteActions(result); } result.ProcessWith(statementProcessor, ExecuteNonTransactionally); }
// Constructors /// <summary> /// Creates instance of <see cref="IgnoreRuleCollection"/> handler /// </summary> /// <param name="model">Extracted model</param> /// <param name="configuration">Configuration of domain</param> public IgnoreRulesHandler(SchemaExtractionResult model, DomainConfiguration configuration, MappingResolver resolver) { ArgumentValidator.EnsureArgumentNotNull(model, "model"); ArgumentValidator.EnsureArgumentNotNull(configuration, "configuration"); targetModel = model; ignoreRules = configuration.IgnoreRules; mappingResolver = resolver; }
private static async Task <SchemaExtractionResult> ExtractSchemaAsync( UpgradeServiceAccessor services, ISqlExecutor executor, CancellationToken token) { var extractionTasks = services.MappingResolver.GetSchemaTasks(); var extractionResult = await executor.ExtractAsync(extractionTasks, token).ConfigureAwait(false); var schema = new SchemaExtractionResult(extractionResult); return(new IgnoreRulesHandler(schema, services.Configuration, services.MappingResolver).Handle()); }
public void UpgradeSchema(SchemaExtractionResult extractedSchema, StorageModel sourceModel, StorageModel targetModel, ActionSequence upgradeActions) { var result = TranslateActions(extractedSchema, sourceModel, targetModel, upgradeActions); foreach (var handler in context.OrderedUpgradeHandlers) { handler.OnBeforeExecuteActions(result); } result.ProcessWith(statementProcessor, ExecuteNonTransactionally); }
public async Task UpgradeSchemaAsync(SchemaExtractionResult extractedSchema, StorageModel sourceModel, StorageModel targetModel, ActionSequence upgradeActions, CancellationToken token) { var result = TranslateActions(extractedSchema, sourceModel, targetModel, upgradeActions); foreach (var handler in context.OrderedUpgradeHandlers) { await handler.OnBeforeExecuteActionsAsync(result, token).ConfigureAwait(false); } await result.ProcessWithAsync(asyncStatementProcessor, ExecuteNonTransactionallyAsync, token) .ConfigureAwait(false); }
public SchemaExtractionResult GetSqlSchema() { if (context.ExtractedSqlModelCache != null) { return(context.ExtractedSqlModelCache); } var schema = new SchemaExtractionResult(executor.Extract(services.MappingResolver.GetSchemaTasks())); var handledSchema = new IgnoreRulesHandler(schema, services.Configuration, services.MappingResolver).Handle(); context.ExtractedSqlModelCache = handledSchema; return(handledSchema); }
// Constructors public SqlModelConverter(UpgradeServiceAccessor services, SchemaExtractionResult sourceModel, IEnumerable <StoredPartialIndexFilterInfo> partialIndexes) { ArgumentValidator.EnsureArgumentNotNull(services, "handlers"); ArgumentValidator.EnsureArgumentNotNull(sourceModel, "sourceModel"); ArgumentValidator.EnsureArgumentNotNull(partialIndexes, "partialIndexes"); this.sourceModel = sourceModel; resolver = services.MappingResolver; providerInfo = services.ProviderInfo; driver = services.StorageDriver; partialIndexMap = new PartialIndexInfoMap(resolver, partialIndexes); }
public async Task <SchemaExtractionResult> GetSqlSchemaAsync(CancellationToken token) { if (context.ExtractedSqlModelCache != null) { return(context.ExtractedSqlModelCache); } var sqlExtractionTasks = services.MappingResolver.GetSchemaTasks(); var sqlExtractionResult = await executor.ExtractAsync(sqlExtractionTasks, token).ConfigureAwait(false); var schema = new SchemaExtractionResult(sqlExtractionResult); var handledSchema = new IgnoreRulesHandler(schema, services.Configuration, services.MappingResolver).Handle(); context.ExtractedSqlModelCache = handledSchema; return(handledSchema); }
private StorageNode BuildStorageNode(Domain domain, SchemaExtractionResult extractedSchema) { var schemaExtractionResult = GetRealExtractionResult(extractedSchema); context.ExtractedSqlModelCache = schemaExtractionResult; var modelMapping = ModelMappingBuilder.Build( domain.Handlers, schemaExtractionResult, context.Services.MappingResolver, context.NodeConfiguration, context.UpgradeMode.IsLegacy()); var result = new StorageNode(domain, context.NodeConfiguration, modelMapping, new TypeIdRegistry()); // Register default storage node immediately, // non-default nodes are registered in NodeManager after everything completes successfully. if (result.Id == WellKnown.DefaultNodeId) { _ = domain.Handlers.StorageNodeRegistry.Add(result); } context.StorageNode = result; return(result); }
private UpgradeActionSequence TranslateActions(SchemaExtractionResult extractedSchema, StorageModel sourceModel, StorageModel targetModel, ActionSequence upgradeActions) { var enforceChangedColumns = context.Hints .OfType <ChangeFieldTypeHint>() .SelectMany(hint => hint.AffectedColumns) .ToList(); var skipConstraints = context.Stage == UpgradeStage.Upgrading; var translator = new SqlActionTranslator( session.Handlers, executor, context.Services.MappingResolver, upgradeActions, extractedSchema, sourceModel, targetModel, enforceChangedColumns, !skipConstraints); var result = translator.Translate(); if (SqlLog.IsLogged(LogLevel.Info)) { LogStatements(result); } return(result); }
private static SchemaExtractionResult ExtractSchema(UpgradeServiceAccessor services, ISqlExecutor executor) { var schema = new SchemaExtractionResult(executor.Extract(services.MappingResolver.GetSchemaTasks())); return(new IgnoreRulesHandler(schema, services.Configuration, services.MappingResolver).Handle()); }