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); }
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); }
protected override IEnumerable <Command> OnDrop(IMetadata sourceMetadata, IMetadata targetMetadata, IComparerContext context) { yield return(new Command() .Append($"DROP PROCEDURE {ProcedureName.AsSqlIndentifier()}")); }