Esempio n. 1
0
        private SourceCode GetConstructors(SemanticModel semanticModel, HashSet <string> typeReferences, IEnumerable <ConstructorDeclarationSyntax> constructorDeclarations)
        {
            var generatedConstructors = new SourceCode {
                MainPart = ""
            };

            foreach (var constructorDeclaration in constructorDeclarations)
            {
                string identifier = constructorDeclaration.Identifier.ValueText;
                var    parameters = new List <Var>();
                foreach (var parameter in constructorDeclaration.ParameterList.Parameters)
                {
                    var typeReference = TypeReferenceGenerator.GenerateTypeReference(parameter.Type, semanticModel);
                    parameters.Add(new Var
                    {
                        Name = parameter.Identifier.ValueText,
                        Type = typeReference
                    });
                }
                var constructorAccessModifier = GetAccessModifier(constructorDeclaration.Modifiers.ToList());
                var statements = new List <string>();
                foreach (var statement in constructorDeclaration.Body.Statements)
                {
                    string generatedStatement = StatementGenerator.Generate(statement, semanticModel);
                    statements.Add(generatedStatement);
                }
                var generatedConstructor = ConstructorGenerator.Generate(identifier, constructorAccessModifier, parameters,
                                                                         statements, semanticModel);
                generatedConstructors.MainPart += "\n" + generatedConstructor.MainPart;
            }
            return(generatedConstructors);
        }
Esempio n. 2
0
    public void CreateOrReplaceTable()
    {
        //Arrange
        var creationMetadata = GetEntityCreationMetadata(topicName: "my_movie");

        //Act
        string statement = StatementGenerator.CreateOrReplaceTable <CreateEntityTests.MyMovie>(creationMetadata);

        //Assert
        statement.Should().Be($"CREATE OR REPLACE TABLE{GetExpectedClauses(isTable: true)}");
    }
Esempio n. 3
0
    public void CreateStream()
    {
        //Arrange
        var creationMetadata = GetEntityCreationMetadata(topicName: "my_movie");

        //Act
        string statement = StatementGenerator.CreateStream <CreateEntityTests.MyMovie>(creationMetadata);

        //Assert
        statement.Should().Be($"CREATE STREAM{GetExpectedClauses(isTable: false)}");
    }
Esempio n. 4
0
    /// <summary>
    /// Create a new table or replace an existing one with the specified columns and properties.
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="creationMetadata">Table properties, specify details about your table by using the WITH clause.</param>
    /// <param name="cancellationToken">Optional cancellation token to cancel the operation</param>
    /// <returns>Http response object.</returns>
    public Task <HttpResponseMessage> CreateOrReplaceTableAsync <T>(EntityCreationMetadata creationMetadata, CancellationToken cancellationToken = default)
    {
        if (creationMetadata == null)
        {
            throw new ArgumentNullException(nameof(creationMetadata));
        }

        var ksql = StatementGenerator.CreateOrReplaceTable <T>(creationMetadata);

        return(ExecuteAsync <T>(ksql, cancellationToken));
    }
Esempio n. 5
0
    public void CreateTable_IfNotExists()
    {
        //Arrange
        var creationMetadata = GetEntityCreationMetadata(topicName: "my_movie");

        //Act
        string statement = StatementGenerator.CreateTable <CreateEntityTests.MyMovie>(creationMetadata, ifNotExists: true);

        //Assert
        statement.Should().Be($"CREATE TABLE IF NOT EXISTS{GetExpectedClauses(isTable: true)}");
    }
Esempio n. 6
0
    /// <summary>
    /// Create a new stream with the specified columns and properties.
    /// </summary>
    /// <typeparam name="T">The type that represents the stream.</typeparam>
    /// <param name="creationMetadata">Stream properties, specify details about your stream by using the WITH clause.</param>
    /// <param name="ifNotExists">If the IF NOT EXISTS clause is present, the statement won't fail if a stream with the same name already exists.</param>
    /// <param name="cancellationToken">Optional cancellation token to cancel the operation</param>
    /// <returns>Http response object.</returns>
    public Task <HttpResponseMessage> CreateStreamAsync <T>(EntityCreationMetadata creationMetadata, bool ifNotExists = false, CancellationToken cancellationToken = default)
    {
        if (creationMetadata == null)
        {
            throw new ArgumentNullException(nameof(creationMetadata));
        }

        var ksql = StatementGenerator.CreateStream <T>(creationMetadata, ifNotExists);

        return(ExecuteAsync <T>(ksql, cancellationToken));
    }
Esempio n. 7
0
 public void TestInitialize()
 {
     _generator = new StatementGenerator();
     _generator.InjectDependency(_constantGenerator        = new ConstantGeneratorStub());
     _generator.InjectDependency(_identifierGenerator      = new IdentifierGeneratorStub());
     _generator.InjectDependency(_assignmentGenerator      = new AssignmentGeneratorStub());
     _generator.InjectDependency(_blockGenerator           = new BlockGeneratorStub());
     _generator.InjectDependency(_arrayGenerator           = new ArrayGeneratorStub());
     _generator.InjectDependency(_accessorGenerator        = new AccessorGeneratorStub());
     _generator.InjectDependency(_methodCallGenerator      = new MethodCallGeneratorStub());
     _generator.InjectDependency(_returnStatementGenerator = new ReturnStatementGeneratorStub());
     _generator.InjectDependency(_newStatementGenerator    = new NewStatementGeneratorStub());
 }
Esempio n. 8
0
        public void StringProperty()
        {
            var templateText = @"This is a {{ Length }} World from scriban!";
            var template     = Template.Parse(templateText, null, null, null);

            var result = new StatementGenerator(new NullLogger <StatementGenerator>()).Generate <string, object>(new ExpressContext(), template.Page.Body);

            var functor = result.Compile();
            var sb      = new StringBuilder();

            functor(sb, "Hello", null);

            Assert.Equal("This is a 5 World from scriban!", sb.ToString());
        }
Esempio n. 9
0
        /// <summary>
        /// Initializes a new instance of the <see cref="T:Ceql.Statements.UpdateStatement`1"/> class.
        /// </summary>
        /// <param name="expressions">Expressions.</param>
        public UpdateStatement(params Expression <SelectExpression <T, object> >[] expressions)
        {
            _formatter = CeqlConfiguration.Instance.GetConnectorFormatter();

            _fromClause           = new FromClause <T>();
            _primaryKeyProperties = typeof(T).GetPrimaryKeyProperties();
            _fromAlias            = StatementGenerator.GetAliasList(_fromClause);

            foreach (var expression in expressions)
            {
                var selectList = (List <SelectAlias>) new SelectExpressionAnalyzer(_formatter, expression, _fromAlias).Sql();
                _selections.AddRange(selectList);
            }
        }
Esempio n. 10
0
        public void RawTextBlock()
        {
            var statementGenerator = new StatementGenerator(new NullLogger <StatementGenerator>());

            var templateText = @"This is a World from scriban!";
            var template     = Template.Parse(templateText, null, null, null);

            var result = statementGenerator.Generate <string, object>(new ExpressContext(), template.Page.Body);

            var functor = result.Compile();
            var sb      = new StringBuilder();

            functor(sb, "doesn'tm atter", null);

            Assert.Equal("This is a World from scriban!", sb.ToString());
        }
        public override SyntaxNode VisitMethodDeclaration(MethodDeclarationSyntax node)
        {
            SyntaxList <StatementSyntax> blockWithNewStatements = node.Body.Statements;

            for (int i = 0; i < RandomUtils.GenerateLittleInt(); i++)
            {
                blockWithNewStatements = blockWithNewStatements.Insert(0, StatementGenerator.GenerateSingleStatement());
            }

            BlockSyntax newBlock = SyntaxFactory.Block(blockWithNewStatements);

            MethodDeclarationSyntax newMethod2 = node.WithBody(newBlock);

            var newNode = node.ReplaceNode(node, newMethod2);

            return(base.VisitMethodDeclaration(newNode));
        }
Esempio n. 12
0
        /// <summary>
        /// Applies update statement values to be set on fields specified in constructor expressions.
        /// </summary>
        /// <returns>The values.</returns>
        /// <param name="values">Values.</param>
        public IUpdateStatement <T> Values(params object[] values)
        {
            _values = values;

            // create sql statement
            Sql = "UPDATE " + StatementGenerator.TableSql(_fromClause, _fromAlias, _formatter) + " SET ";

            var counter = 0;

            foreach (var alias in _selections)
            {
                var value = _formatter.Format(alias, values[counter]);
                Sql += alias + " = " + value;
            }

            return(this);
        }
Esempio n. 13
0
        public void CanGenerateBankStatement_ShouldReturnTrue()
        {
            var bankAccount = new BankAccount();

            bankAccount.DepositFunds(5.00);
            bankAccount.DepositFunds(10.00);
            bankAccount.WithdrawFunds(6.00);

            // balance now should be 9.00
            var bankStatement = StatementGenerator.GenerateBankStatement(bankAccount);

            // first transaction should be most recent
            Assert.AreNotEqual(bankStatement, null);
            Assert.AreEqual(bankAccount.Balance, 9.00);
            Assert.AreEqual(bankStatement.First().TransactionType, "Withdrawal");
            Assert.IsTrue(bankStatement.FirstOrDefault().Amount.Equals(6.00));
            Assert.IsTrue(bankStatement.FirstOrDefault().TransactionId.Equals(2));
        }
Esempio n. 14
0
        private SourceCode GetMethods(SemanticModel semanticModel, HashSet <string> typeReferences, IEnumerable <MethodDeclarationSyntax> methodDeclarations)
        {
            var generatedMethods = new SourceCode {
                MainPart = ""
            };

            foreach (var methodDeclaration in methodDeclarations)
            {
                string identifier          = methodDeclaration.Identifier.ValueText;
                var    returnType          = methodDeclaration.ReturnType;
                var    returnTypeReference = TypeReferenceGenerator.GenerateTypeReference(returnType, semanticModel);
                if (!returnTypeReference.IsPredefined)
                {
                    typeReferences.Add(returnTypeReference.Text);
                }
                var typeParameters = new List <string>();
                if (methodDeclaration.TypeParameterList != null)
                {
                    foreach (var typeParameter in methodDeclaration.TypeParameterList.Parameters)
                    {
                        typeParameters.Add(typeParameter.Identifier.ValueText);
                    }
                }
                var parameters = new List <Var>();
                foreach (var parameter in methodDeclaration.ParameterList.Parameters)
                {
                    var typeReference = TypeReferenceGenerator.GenerateTypeReference(parameter.Type, semanticModel);
                    parameters.Add(new Var
                    {
                        Name = parameter.Identifier.ValueText,
                        Type = typeReference
                    });
                }
                var  accessModifier = GetAccessModifier(methodDeclaration.Modifiers.ToList());
                bool isStatic       = HasStaticModifier(methodDeclaration.Modifiers.ToList());
                Optional <List <string> > body;
                if (methodDeclaration.Body == null)
                {
                    body = new Optional <List <string> >();
                }
                else
                {
                    var statements = new List <string>();
                    foreach (var statement in methodDeclaration.Body.Statements)
                    {
                        string generatedStatement = StatementGenerator.Generate(statement, semanticModel);
                        statements.Add(generatedStatement);
                        new Optional <List <string> >();
                    }
                    body = new Optional <List <string> >(statements);
                }

                bool isVirtual = !body.HasValue || HasVirtualModifier(methodDeclaration.Modifiers.ToList());

                var generatedMethod = MethodGenerator.Generate(identifier,
                                                               returnTypeReference,
                                                               typeParameters,
                                                               accessModifier,
                                                               parameters,
                                                               body,
                                                               isStatic,
                                                               isVirtual,
                                                               semanticModel);
                generatedMethods.MainPart += "\n" + generatedMethod.MainPart;
            }
            return(generatedMethods);
        }
Esempio n. 15
0
 /// <summary>
 /// Where the specified expression.
 /// </summary>
 /// <returns>The where.</returns>
 /// <param name="expression">Expression.</param>
 public IUpdateStatement <T> Where(Expression <BooleanExpression <T> > expression)
 {
     WhereClause = new WhereClause <T>(_fromClause, expression);
     Sql        += " " + StatementGenerator.WhereSql(WhereClause, _fromAlias, _formatter);
     return(this);
 }
 public StatementGeneratorTests()
 {
     statementGenerator = Factory.CreateStatementGenerator();
 }
Esempio n. 17
0
        private SourceCode GetProperties(SemanticModel semanticModel, HashSet <string> typeReferences,
                                         IEnumerable <PropertyDeclarationSyntax> propertyDeclarations, bool isFromInterface)
        {
            var generatedProperties = new SourceCode {
                MainPart = ""
            };

            foreach (var propertyDeclaration in propertyDeclarations)
            {
                string identifier    = propertyDeclaration.Identifier.ValueText;
                var    propertyType  = propertyDeclaration.Type;
                var    typeReference = TypeReferenceGenerator.GenerateTypeReference(propertyType, semanticModel);
                if (!typeReference.IsPredefined)
                {
                    typeReferences.Add(typeReference.Text);
                }

                bool isStatic  = HasStaticModifier(propertyDeclaration.Modifiers.ToList());
                bool isVirtual = isFromInterface || HasVirtualModifier(propertyDeclaration.Modifiers.ToList());

                var propertyAccessModifier = GetAccessModifier(propertyDeclaration.Modifiers.ToList());
                var accessors   = propertyDeclaration.AccessorList.Accessors;
                var getAccessor = accessors.FirstOrDefault(syntax => syntax.Keyword.Text == "get");
                var setAccessor = accessors.FirstOrDefault(syntax => syntax.Keyword.Text == "set");

                if (propertyDeclaration.AccessorList.Accessors.Any(syntax => syntax.Body != null))
                {
                    var complexPropertyDescription = new ComplexPropertyDescription
                    {
                        PropertyName      = identifier,
                        PropertyType      = typeReference,
                        GetAccessModifier = new Optional <AccessModifier>(),
                        SetAccessModifier = new Optional <AccessModifier>(),
                        IsStatic          = isStatic,
                        IsVirtual         = isVirtual
                    };
                    if (getAccessor != null)
                    {
                        var getAccessModifier = GetAccessModifier(getAccessor.Modifiers);
                        var getModifier       = MaxRestrictionAccessModifier(propertyAccessModifier, getAccessModifier);
                        complexPropertyDescription.GetAccessModifier = getModifier;
                        if (getAccessor.Body != null)
                        {
                            var statements = new List <string>();
                            foreach (var statement in getAccessor.Body.Statements)
                            {
                                string generatedStatement = StatementGenerator.Generate(statement, semanticModel);
                                statements.Add(generatedStatement);
                            }
                            complexPropertyDescription.GetStatements = statements;
                        }
                    }
                    if (setAccessor != null)
                    {
                        var setAccessModifier = GetAccessModifier(setAccessor.Modifiers);
                        var setModifier       = MaxRestrictionAccessModifier(propertyAccessModifier, setAccessModifier);
                        complexPropertyDescription.SetAccessModifier = setModifier;
                        if (setAccessor.Body != null)
                        {
                            var statements = new List <string>();
                            foreach (var statement in setAccessor.Body.Statements)
                            {
                                string generatedStatement = StatementGenerator.Generate(statement, semanticModel);
                                statements.Add(generatedStatement);
                            }
                            complexPropertyDescription.SetStatements = statements;
                        }
                    }

                    SourceCode generatedProperty = PropertyGenerator.GenerateComplexProperty(complexPropertyDescription, semanticModel);
                    generatedProperties.MainPart += "\n" + generatedProperty.MainPart;
                }
                else
                {
                    var simplePropertyDescription = new SimplePropertyDescription
                    {
                        PropertyName      = identifier,
                        PropertyType      = typeReference,
                        GetAccessModifier = new Optional <AccessModifier>(),
                        SetAccessModifier = new Optional <AccessModifier>(),
                        IsStatic          = isStatic,
                        IsVirtual         = isVirtual,
                        IsFromInterface   = isFromInterface
                    };
                    if (getAccessor != null)
                    {
                        var getAccessModifier = GetAccessModifier(getAccessor.Modifiers);
                        var getModifier       = MaxRestrictionAccessModifier(propertyAccessModifier, getAccessModifier);
                        simplePropertyDescription.GetAccessModifier = getModifier;
                    }
                    if (setAccessor != null)
                    {
                        var setAccessModifier = GetAccessModifier(setAccessor.Modifiers);
                        var setModifier       = MaxRestrictionAccessModifier(propertyAccessModifier, setAccessModifier);
                        simplePropertyDescription.SetAccessModifier = setModifier;
                    }

                    SourceCode generatedProperty = PropertyGenerator
                                                   .GenerateSimpleProperty(simplePropertyDescription, semanticModel, isFromInterface);
                    generatedProperties.MainPart += "\n" + generatedProperty.MainPart;
                }
            }
            return(generatedProperties);
        }