コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        // 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;
        }
コード例 #4
0
        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());
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        // 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);
        }
コード例 #9
0
        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);
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        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);
        }
コード例 #12
0
        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());
        }