Esempio n. 1
0
        protected override IEnumerable <Command> OnCreate(IMetadata sourceMetadata, IMetadata targetMetadata, IComparerContext context)
        {
            if (ProcedureType == ProcedureProcedureType.LEGACY)
            {
                throw new NotSupportedException("Legacy type stored procedures are not supported.");
            }

            var command = new PSqlCommand();

            command.Append($"CREATE OR ALTER PROCEDURE {ProcedureName.AsSqlIndentifier()}");
            if (ProcedureInputs > 0)
            {
                var inputs = ProcedureParameters
                             .Where(o => o.ParameterType == ProcedureParameterType.IN)
                             .OrderBy(o => o.ParameterNumber);
                command.Append(" (");
                command.AppendLine();
                command.Append(CreateParametersDefinitions(inputs, sourceMetadata, targetMetadata, context));
                command.Append(")");
            }
            command.AppendLine();
            if (ProcedureOutputs > 0)
            {
                var outputs = ProcedureParameters
                              .Where(o => o.ParameterType == ProcedureParameterType.OUT)
                              .OrderBy(o => o.ParameterNumber);
                command.Append("RETURNS (");
                command.AppendLine();
                command.Append(CreateParametersDefinitions(outputs, sourceMetadata, targetMetadata, context));
                command.Append(")");
                command.AppendLine();
            }
            command.Append("AS");
            command.AppendLine();
            if (context.EmptyBodiesEnabled)
            {
                command.Append("BEGIN");
                command.AppendLine();
                if (ProcedureType == ProcedureProcedureType.SELECTABLE)
                {
                    command.Append($"  SUSPEND{SqlHelper.Terminator}");
                    command.AppendLine();
                }
                command.Append("END");
            }
            else
            {
                command.Append(ProcedureSource);
            }
            yield return(command);
        }
Esempio n. 2
0
        protected override IEnumerable <Command> OnCreate(IMetadata sourceMetadata, IMetadata targetMetadata, IComparerContext context)
        {
            if (ProcedureType == ProcedureProcedureType.Legacy)
            {
                throw new NotSupportedException("Legacy type stored procedures are not supported.");
            }

            var command = SqlHelper.IsValidExternalEngine(this) ? new Command() : new PSqlCommand();

            command.Append($"CREATE OR ALTER PROCEDURE {ProcedureName.AsSqlIndentifier()}");
            if (ProcedureInputs > 0)
            {
                var inputs = ProcedureParameters
                             .Where(o => o.ParameterType == ProcedureParameterType.In)
                             .OrderBy(o => o.ParameterNumber);
                command.Append(" (");
                command.AppendLine();
                command.Append(CreateParametersDefinitions(inputs, sourceMetadata, targetMetadata, context));
                command.Append(")");
            }
            command.AppendLine();
            if (ProcedureOutputs > 0)
            {
                var outputs = ProcedureParameters
                              .Where(o => o.ParameterType == ProcedureParameterType.Out)
                              .OrderBy(o => o.ParameterNumber);
                command.Append("RETURNS (");
                command.AppendLine();
                command.Append(CreateParametersDefinitions(outputs, sourceMetadata, targetMetadata, context));
                command.Append(")");
                command.AppendLine();
            }
            if (SqlHelper.IsValidExternalEngine(this))
            {
                if (context.EmptyBodiesEnabled)
                {
                    yield break;
                }
                command.Append($"EXTERNAL NAME '{SqlHelper.DoubleSingleQuotes(EntryPoint)}'");
                command.AppendLine();
                command.Append($"ENGINE {EngineName.AsSqlIndentifier()}");
            }
            else
            {
                command.Append("AS");
                command.AppendLine();
                if (context.EmptyBodiesEnabled)
                {
                    command.Append("BEGIN");
                    command.AppendLine();
                    if (ProcedureType == ProcedureProcedureType.Selectable)
                    {
                        command.Append($"  SUSPEND{SqlHelper.Terminator}");
                        command.AppendLine();
                    }
                    command.Append("END");
                }
                else
                {
                    command.Append(ProcedureSource);
                }
            }
            yield return(command);
        }
Esempio n. 3
0
 protected override IEnumerable <Command> OnDrop(IMetadata sourceMetadata, IMetadata targetMetadata, IComparerContext context)
 {
     yield return(new Command()
                  .Append($"DROP PROCEDURE {ProcedureName.AsSqlIndentifier()}"));
 }