示例#1
0
        private IEnumerable <CommandBase> ToCommands()
        {
            yield return(new CreateTableCommand(
                             TableName,
                             Columns.Select(c => new TableColumn(c.ColumnName, c.PrimitiveType)),
                             Folder,
                             DocString));

            var columnsWithDocString = Columns
                                       .Where(c => c.DocString != null && !c.DocString.Equals(QuotedText.Empty))
                                       .Select(c => new AlterMergeTableColumnDocStringsCommand.ColumnDocString(
                                                   c.ColumnName,
                                                   c.DocString !));

            if (columnsWithDocString.Any())
            {
                yield return(new AlterMergeTableColumnDocStringsCommand(
                                 TableName,
                                 columnsWithDocString));
            }

            foreach (var mapping in Mappings)
            {
                yield return(mapping.ToCreateMappingCommand(TableName));
            }

            if (AutoDeletePolicy != null)
            {
                yield return(AutoDeletePolicy);
            }
            if (CachingPolicy != null)
            {
                yield return(CachingPolicy);
            }
            if (IngestionBatchingPolicy != null)
            {
                yield return(IngestionBatchingPolicy);
            }
            if (MergePolicy != null)
            {
                yield return(MergePolicy);
            }
            if (RetentionPolicy != null)
            {
                yield return(RetentionPolicy);
            }
            if (ShardingPolicy != null)
            {
                yield return(ShardingPolicy);
            }
            if (UpdatePolicy != null)
            {
                yield return(UpdatePolicy);
            }
        }
示例#2
0
        private IEnumerable <CommandBase> ComputeDelta(TableModel targetModel)
        {
            var includeFolder      = !object.Equals(targetModel.Folder, Folder);
            var includeDocString   = !object.Equals(targetModel.DocString, DocString);
            var currentColumns     = Columns.ToImmutableDictionary(c => c.ColumnName);
            var targetColumns      = targetModel.Columns.ToImmutableDictionary(c => c.ColumnName);
            var currentColumnNames = Columns.Select(c => c.ColumnName).ToImmutableHashSet();
            var targetColumnNames  =
                targetModel.Columns.Select(c => c.ColumnName).ToImmutableHashSet();
            var dropColumnNames       = currentColumnNames.Except(targetColumnNames);
            var createColumnNames     = targetColumnNames.Except(currentColumnNames);
            var keepingColumnNames    = currentColumnNames.Intersect(targetColumnNames);
            var updateTypeColumnNames = keepingColumnNames
                                        .Where(n => currentColumns[n].PrimitiveType != targetColumns[n].PrimitiveType);
            var updateDocStringColumnNames = keepingColumnNames
                                             .Where(n => !object.Equals(
                                                        currentColumns[n].DocString,
                                                        targetColumns[n].DocString));
            var mappingCommands = MappingModel.ComputeDelta(
                TableName,
                Mappings,
                targetModel.Mappings);
            var autoDeletePolicyCommands = AlterAutoDeletePolicyCommand.ComputeDelta(
                AutoDeletePolicy,
                targetModel.AutoDeletePolicy);
            var cachingPolicyCommands =
                AlterCachingPolicyCommand.ComputeDelta(CachingPolicy, targetModel.CachingPolicy);
            var ingestionBatchingPolicyCommands = AlterIngestionBatchingPolicyCommand.ComputeDelta(
                IngestionBatchingPolicy,
                targetModel.IngestionBatchingPolicy);
            var mergePolicyCommands = AlterMergePolicyCommand.ComputeDelta(
                MergePolicy,
                targetModel.MergePolicy);
            var retentionPolicyCommands = AlterRetentionPolicyCommand.ComputeDelta(
                RetentionPolicy,
                targetModel.RetentionPolicy);
            var shardingPolicyCommands = AlterShardingPolicyCommand.ComputeDelta(
                ShardingPolicy,
                targetModel.ShardingPolicy);
            var updatePolicyCommands =
                AlterUpdatePolicyCommand.ComputeDelta(UpdatePolicy, targetModel.UpdatePolicy);

            if (dropColumnNames.Any())
            {
                yield return(new DropTableColumnsCommand(
                                 TableName,
                                 dropColumnNames.ToImmutableArray()));
            }
            if (createColumnNames.Any() || includeFolder || includeDocString)
            {
                yield return(new CreateTableCommand(
                                 TableName,
                                 targetModel.Columns.Select(
                                     c => new TableColumn(c.ColumnName, c.PrimitiveType)),
                                 includeFolder ? (targetModel.Folder ?? QuotedText.Empty) : null,
                                 includeDocString
                    ? (targetModel.DocString ?? QuotedText.Empty)
                    : null));
            }
            if (updateDocStringColumnNames.Any())
            {
                yield return(new AlterMergeTableColumnDocStringsCommand(
                                 TableName,
                                 updateDocStringColumnNames.Select(
                                     n => new AlterMergeTableColumnDocStringsCommand.ColumnDocString(
                                         n,
                                         targetColumns[n].DocString != null
                            ? targetColumns[n].DocString !
                            : QuotedText.Empty))));
            }
            foreach (var columnName in updateTypeColumnNames)
            {
                yield return(new AlterColumnTypeCommand(
                                 TableName,
                                 columnName,
                                 targetColumns[columnName].PrimitiveType));
            }
            foreach (var command in mappingCommands
                     .Concat(autoDeletePolicyCommands)
                     .Concat(cachingPolicyCommands)
                     .Concat(ingestionBatchingPolicyCommands)
                     .Concat(mergePolicyCommands)
                     .Concat(retentionPolicyCommands)
                     .Concat(shardingPolicyCommands)
                     .Concat(updatePolicyCommands))
            {
                yield return(command);
            }
        }