Ejemplo n.º 1
0
        protected virtual MigrationStatement Generate(CreateProcedureOperation op)
        {
            MigrationStatement stmt = new MigrationStatement();

            stmt.Sql = GenerateProcedureCmd(op);
            return(stmt);
        }
Ejemplo n.º 2
0
        protected internal void CreateProcedure <TParameters>(string name, string bodySql,
                                                              Func <ParameterBuilder, TParameters> parametersAction, string schema = "dbo", object anonymousArguments = null)
        {
            RuntimeFailureMethods.Requires(!string.IsNullOrWhiteSpace(name), null, "!string.IsNullOrWhiteSpace(name)");
            RuntimeFailureMethods.Requires(parametersAction != null, null, "parametersAction != null");
            name = string.Format("{0}.{1}", schema, name);
            var createOperation = new CreateProcedureOperation(name, bodySql, anonymousArguments);

            AddOperation(createOperation);
            var parameters = parametersAction(new ParameterBuilder());

            parameters.GetType().GetProperties().Each(delegate(PropertyInfo p, int i)
            {
                var parameterModel = p.GetValue(parameters, null) as ParameterModel;
                if (parameterModel != null)
                {
                    if (string.IsNullOrWhiteSpace(parameterModel.Name))
                    {
                        parameterModel.Name = p.Name;
                    }
                    createOperation.Parameters.Add(parameterModel);
                }
            }
                                                      );
        }
Ejemplo n.º 3
0
        public void CreateStoredProcedure <TParameters>(
            string name,
            Func <ParameterBuilder, TParameters> parametersAction,
            string body,
            object anonymousArguments = null)
        {
            Check.NotEmpty(name, "name");
            Check.NotNull(parametersAction, "parametersAction");
            Check.NotEmpty(body, "body");

            var createProcedureOperation = new CreateProcedureOperation(name, body, anonymousArguments);

            AddOperation(createProcedureOperation);

            var parameters = parametersAction(new ParameterBuilder());

            parameters.GetType().GetProperties()
            .Each(
                (p, i) =>
            {
                var parameterModel = p.GetValue(parameters, null) as ParameterModel;

                if (parameterModel != null)
                {
                    if (string.IsNullOrWhiteSpace(parameterModel.Name))
                    {
                        parameterModel.Name = p.Name;
                    }

                    createProcedureOperation.Parameters.Add(parameterModel);
                }
            });
        }
Ejemplo n.º 4
0
        public void Generate_can_output_create_procedure_operations()
        {
            var createProcedureOperation
                = new CreateProcedureOperation("Foo", "SELECT ShinyHead\r\nFROM Pilkingtons");

            createProcedureOperation.Parameters.Add(
                new ParameterModel(PrimitiveTypeKind.String)
            {
                Name           = "P'",
                DefaultValue   = "Bar",
                IsOutParameter = true
            });

            var codeGenerator = new CSharpMigrationCodeGenerator();

            var generatedMigration
                = codeGenerator.Generate(
                      "Migration",
                      new MigrationOperation[]
            {
                createProcedureOperation
            },
                      "Source",
                      "Target",
                      "Foo",
                      "Bar");

            Assert.Equal(
                @"namespace Foo
{
    using System;
    using System.Data.Entity.Migrations;
    
    public partial class Bar : DbMigration
    {
        public override void Up()
        {
            CreateStoredProcedure(
                ""Foo"",
                p => new
                    {
                        P = p.String(name: ""P'"", defaultValue: ""Bar"", outParameter: true),
                    },
                body:
                    @""SELECT ShinyHead
                      FROM Pilkingtons""
            );
            
        }
        
        public override void Down()
        {
            DropStoredProcedure(""Foo"");
        }
    }
}
",
                generatedMigration.UserCode);
        }
        public void Generate_can_output_create_procedure_operations()
        {
            var createProcedureOperation
                = new CreateProcedureOperation("Foo", "SELECT ShinyHead\r\nFROM Pilkingtons");

            createProcedureOperation.Parameters.Add(
                new ParameterModel(PrimitiveTypeKind.String)
            {
                Name           = "P'",
                DefaultValue   = "Bar",
                IsOutParameter = true
            });

            var codeGenerator = new VisualBasicMigrationCodeGenerator();

            var generatedMigration
                = codeGenerator.Generate(
                      "Migration",
                      new MigrationOperation[]
            {
                createProcedureOperation
            },
                      "Source",
                      "Target",
                      "Foo",
                      "Bar");

            Assert.Equal(
                @"Imports System
Imports System.Data.Entity.Migrations
Imports Microsoft.VisualBasic

Namespace Foo
    Public Partial Class Bar
        Inherits DbMigration
    
        Public Overrides Sub Up()
            CreateStoredProcedure(
                ""Foo"",
                Function(p) New With
                    {
                        .P = p.String(name := ""P'"", defaultValue := ""Bar"", outParameter := True)
                    },
                body :=
                    ""SELECT ShinyHead"" & vbCrLf & _
                    ""FROM Pilkingtons""
            )
            
        End Sub
        
        Public Overrides Sub Down()
            DropStoredProcedure(""Foo"")
        End Sub
    End Class
End Namespace
",
                generatedMigration.UserCode);
        }
Ejemplo n.º 6
0
        private string GenerateProcedureCmd(CreateProcedureOperation po)
        {
            StringBuilder sql = new StringBuilder();

            sql.AppendLine(string.Format("CREATE PROCEDURE `{0}`({1})", po.Name.Replace("dbo.", ""), GenerateParamSentence(po.Parameters)));
            sql.AppendLine("BEGIN ");
            sql.AppendLine(po.BodySql);
            sql.AppendLine(" END");
            return(sql.ToString().Replace("@", ""));
        }
        protected virtual void Generate(CreateProcedureOperation createProcedureOperation)
        {
            Check.NotNull(createProcedureOperation, "createProcedureOperation");

            using (var writer = Writer())
            {
                writer.WriteLine("CREATE PROCEDURE " + Name(createProcedureOperation.Name));
                writer.Indent++;

                createProcedureOperation.Parameters.Each(
                    (p, i) =>
                {
                    Generate(p, writer);

                    if (i < createProcedureOperation.Parameters.Count - 1)
                    {
                        writer.WriteLine(",");
                    }
                });

                writer.WriteLine();
                writer.Indent--;
                writer.WriteLine("AS");
                writer.WriteLine("BEGIN");
                writer.Indent++;

                if (!string.IsNullOrWhiteSpace(createProcedureOperation.BodySql))
                {
                    var indentString
                        = writer.NewLine
                          + new string(' ', (writer.Indent * 4));

                    var indentReplacer = new Regex(@"\r?\n *");

                    writer.WriteLine(indentReplacer.Replace(createProcedureOperation.BodySql, indentString));
                }
                else
                {
                    writer.WriteLine("RETURN");
                }

                writer.Indent--;
                writer.Write("END");

                Statement(writer, batchTerminator: "GO");
            }
        }
 protected virtual IEnumerable <MigrationStatement> Generate(CreateProcedureOperation operation)
 {
     return(Generate(operation, "CREATE"));
 }
Ejemplo n.º 9
0
 private string GenerateSqlStatementConcrete(CreateProcedureOperation migrationOperation)
 {
     throw new NotSupportedException("Procedures are not supported by SQLite");
 }
 /// <summary>
 /// Generates the specified create procedure operation.
 /// </summary>
 /// <param name="createProcedureOperation">The create procedure operation.</param>
 protected virtual void Generate(CreateProcedureOperation createProcedureOperation)
 {
 }
        protected virtual void Generate(CreateProcedureOperation createProcedureOperation, IndentedTextWriter writer)
        {
            Check.NotNull(createProcedureOperation, "createProcedureOperation");
            Check.NotNull(writer, "writer");

            writer.WriteLine("CreateStoredProcedure(");
            writer.Indent++;
            writer.Write(Quote(createProcedureOperation.Name));
            writer.WriteLine(",");

            if (createProcedureOperation.Parameters.Any())
            {
                writer.WriteLine("p => new");
                writer.Indent++;
                writer.WriteLine("{");
                writer.Indent++;

                createProcedureOperation.Parameters.Each(
                    p =>
                {
                    var scrubbedName = ScrubName(p.Name);

                    writer.Write(scrubbedName);
                    writer.Write(" =");
                    Generate(p, writer, !string.Equals(p.Name, scrubbedName, StringComparison.Ordinal));
                    writer.WriteLine(",");
                });

                writer.Indent--;
                writer.WriteLine("},");
                writer.Indent--;
            }

            writer.Write("body:");

            if (!string.IsNullOrWhiteSpace(createProcedureOperation.BodySql))
            {
                writer.WriteLine();
                writer.Indent++;

                var indentString
                    = writer.NewLine
                      + new string(' ', (writer.Indent * 4) + 2);

                writer.Write("@");
                writer.WriteLine(
                    Generate(
                        createProcedureOperation
                        .BodySql
                        .Replace(Environment.NewLine, indentString)));

                writer.Indent--;
            }
            else
            {
                writer.WriteLine(" \"\"");
            }

            writer.Indent--;
            writer.WriteLine(");");
            writer.WriteLine();
        }
Ejemplo n.º 12
0
        private void Generate(CreateProcedureOperation createProcedureOperation)
        {
            ArgumentUtility.CheckNotNull("createProcedureOperation", createProcedureOperation);

            throw new NotImplementedException("CreateProcedureOperation");
        }
 protected override void Generate(CreateProcedureOperation createProcedureOperation, IndentedTextWriter writer)
 {
     base.Generate(createProcedureOperation, writer);
 }
Ejemplo n.º 14
0
 public ProcedureBuilder(CreateProcedureOperation createProcedureOperation, DbMigration migration)
 {
     RuntimeFailureMethods.Requires(createProcedureOperation != null, null, "createProcedureOperation != null");
     this._createProcedureOperation = createProcedureOperation;
     this._migration = migration;
 }
Ejemplo n.º 15
0
 protected override void Generate(CreateProcedureOperation createProcedureOperation)
 {
     Statement("GO");
     base.Generate(createProcedureOperation);
 }