示例#1
0
        public Main.Sequence Map(IDatabaseSequence sequence)
        {
            if (sequence == null)
            {
                throw new ArgumentNullException(nameof(sequence));
            }

            return(new Main.Sequence(
                       sequence.Name,
                       sequence.Start,
                       sequence.Increment,
                       sequence.MinValue,
                       sequence.MaxValue,
                       sequence.Cache,
                       sequence.Cycle
                       ));
        }
示例#2
0
        /// <summary>
        /// Analyses a database sequence. Reports messages when a sequence has a reserved keyword name.
        /// </summary>
        /// <param name="sequence">A database sequence.</param>
        /// <returns>A set of linting messages used for reporting. An empty set indicates no issues discovered.</returns>
        /// <exception cref="ArgumentNullException"><paramref name="sequence"/> is <c>null</c>.</exception>
        protected IEnumerable <IRuleMessage> AnalyseSequence(IDatabaseSequence sequence)
        {
            if (sequence == null)
            {
                throw new ArgumentNullException(nameof(sequence));
            }

            var result = new List <IRuleMessage>();

            var sequenceNameIsKeyword = Dialect.IsReservedKeyword(sequence.Name.LocalName);

            if (sequenceNameIsKeyword)
            {
                var message = BuildSequenceMessage(sequence.Name);
                result.Add(message);
            }

            return(result);
        }
示例#3
0
        /// <summary>
        /// Analyses a database sequence. Reports messages when a sequence has whitespace in its name.
        /// </summary>
        /// <param name="sequence">A database sequence.</param>
        /// <returns>A set of linting messages used for reporting. An empty set indicates no issues discovered.</returns>
        /// <exception cref="ArgumentNullException"><paramref name="sequence"/> is <c>null</c>.</exception>
        protected IEnumerable <IRuleMessage> AnalyseSequence(IDatabaseSequence sequence)
        {
            if (sequence == null)
            {
                throw new ArgumentNullException(nameof(sequence));
            }

            var result = new List <IRuleMessage>();

            var sequenceNameHasWs = HasWhiteSpace(sequence.Name.LocalName);

            if (sequenceNameHasWs)
            {
                var message = BuildSequenceMessage(sequence.Name);
                result.Add(message);
            }

            return(result);
        }
示例#4
0
        private static InvocationExpressionSyntax BuildSequenceConfiguration(IDatabaseSequence sequence)
        {
            if (sequence == null)
            {
                throw new ArgumentNullException(nameof(sequence));
            }

            var hasSequenceArgs = new List <ArgumentSyntax>
            {
                Argument(
                    LiteralExpression(
                        SyntaxKind.StringLiteralExpression,
                        Literal(sequence.Name.LocalName)))
            };

            if (!sequence.Name.Schema.IsNullOrWhiteSpace())
            {
                var schemaArg = Argument(
                    LiteralExpression(
                        SyntaxKind.StringLiteralExpression,
                        Literal(sequence.Name.Schema)))
                                .WithNameColon(
                    NameColon(
                        IdentifierName("schema")));
                hasSequenceArgs.Add(schemaArg);
            }

            var hasSequence = InvocationExpression(
                MemberAccessExpression(
                    SyntaxKind.SimpleMemberAccessExpression,
                    IdentifierName(ModelBuilderParameterName),
                    GenericName(
                        Identifier(nameof(RelationalModelBuilderExtensions.HasSequence)))
                    .WithTypeArgumentList(
                        TypeArgumentList(
                            SingletonSeparatedList <TypeSyntax>(
                                PredefinedType(Token(SyntaxKind.DecimalKeyword)))))))
                              .WithArgumentList(
                ArgumentList(SeparatedList(hasSequenceArgs)));

            var startsAtArgs = ArgumentList(
                SingletonSeparatedList(
                    Argument(
                        LiteralExpression(
                            SyntaxKind.NumericLiteralExpression,
                            Literal(sequence.Start)))));

            var startsAt = InvocationExpression(
                MemberAccessExpression(
                    SyntaxKind.SimpleMemberAccessExpression,
                    hasSequence,
                    IdentifierName(nameof(SequenceBuilder.StartsAt))))
                           .WithArgumentList(startsAtArgs);

            var incrementsByArgs = ArgumentList(
                SingletonSeparatedList(
                    Argument(
                        LiteralExpression(
                            SyntaxKind.NumericLiteralExpression,
                            Literal(sequence.Increment)))));

            return(InvocationExpression(
                       MemberAccessExpression(
                           SyntaxKind.SimpleMemberAccessExpression,
                           startsAt,
                           IdentifierName(nameof(SequenceBuilder.IncrementsBy))))
                   .WithArgumentList(incrementsByArgs));
        }