Exemple #1
0
    protected override IEnumerable <Command> OnDrop(IMetadata sourceMetadata, IMetadata targetMetadata, IComparerContext context)
    {
        var command = new Command();

        if (IsLegacy)
        {
            command.Append($"DROP EXTERNAL FUNCTION {FunctionName.AsSqlIndentifier()}");
        }
        else
        {
            command.Append($"DROP FUNCTION");
            if (PackageName != null)
            {
                command.Append($" {PackageName.AsSqlIndentifier()}.{FunctionName.AsSqlIndentifier()}");
            }
            else
            {
                command.Append($" {FunctionName.AsSqlIndentifier()}");
            }
        }
        yield return(command);
    }
Exemple #2
0
    protected override IEnumerable <Command> OnAlter(IMetadata sourceMetadata, IMetadata targetMetadata, IComparerContext context)
    {
        if (IsLegacy)
        {
            var otherFunction = FindOtherChecked(targetMetadata.MetadataFunctions.FunctionsByName, FunctionNameKey, "function");

            if (EquatableHelper.PropertiesEqual(this, otherFunction, EquatableProperties, new[] { nameof(ModuleName), nameof(EntryPoint) }))
            {
                yield return(new Command().Append($"ALTER EXTERNAL FUNCTION {FunctionName.AsSqlIndentifier()} ENTRY_POINT '{SqlHelper.DoubleSingleQuotes(EntryPoint)}' MODULE_NAME '{SqlHelper.DoubleSingleQuotes(ModuleName)}'"));
            }
            else
            {
                throw new NotSupportedOnFirebirdException($"Altering function is not supported ({FunctionName}).");
            }
        }
        else
        {
            foreach (var item in OnCreate(sourceMetadata, targetMetadata, context))
            {
                yield return(item);
            }
        }
    }
Exemple #3
0
 protected override IEnumerable <Command> OnCreate(IMetadata sourceMetadata, IMetadata targetMetadata, IComparerContext context)
 {
     if (IsLegacy)
     {
         var command = new Command();
         command.Append($"DECLARE EXTERNAL FUNCTION {FunctionName.AsSqlIndentifier()}");
         var inputs =
             FunctionArguments
             .Where(x => x.ArgumentPosition != ReturnArgument)
             .OrderBy(x => x.ArgumentPosition)
             .Select(CreateLegacyArgumentDefinition);
         command.Append($" {string.Join(", ", inputs)}");
         command.AppendLine();
         var @return = FunctionArguments.First(x => x.ArgumentPosition == ReturnArgument);
         command.Append($"RETURNS{(ReturnArgument != 0 ? " PARAMETER" : string.Empty)} {CreateLegacyArgumentDefinition(@return)}");
         command.AppendLine();
         command.Append($"ENTRY_POINT '{SqlHelper.DoubleSingleQuotes(EntryPoint)}' MODULE_NAME '{SqlHelper.DoubleSingleQuotes(ModuleName)}'");
         yield return(command);
     }
     else
     {
         var command = SqlHelper.IsValidExternalEngine(this) ? new Command() : new PSqlCommand();
         command.Append("CREATE OR ALTER FUNCTION");
         if (PackageName != null)
         {
             command.Append($" {PackageName.AsSqlIndentifier()}.{FunctionName.AsSqlIndentifier()}");
         }
         else
         {
             command.Append($" {FunctionName.AsSqlIndentifier()}");
         }
         var inputs =
             FunctionArguments
             .Where(x => x.ArgumentPosition != ReturnArgument)
             .OrderBy(x => x.ArgumentPosition)
             .Select(x => CreateNewArgumentDefinition(x, sourceMetadata, targetMetadata, context));
         var @return = FunctionArguments.First(x => x.ArgumentPosition == ReturnArgument);
         var output  = CreateNewArgumentDefinition(@return, sourceMetadata, targetMetadata, context);
         command.Append($" ({string.Join(", ", inputs)}) RETURNS {output}");
         if (DeterministicFlag == DeterministicFlagType.Deterministic)
         {
             command.Append(" DETERMINISTIC");
         }
         command.AppendLine();
         if (SqlHelper.IsValidExternalEngine(this))
         {
             command.Append($"EXTERNAL NAME '{SqlHelper.DoubleSingleQuotes(EntryPoint)}'");
             command.AppendLine();
             command.Append($"ENGINE {EngineName.AsSqlIndentifier()}");
         }
         else
         {
             if (SqlSecurity != null)
             {
                 command.Append($"SQL SECURITY {SqlHelper.SqlSecurityString(SqlSecurity)}");
                 command.AppendLine();
             }
             command.Append("AS");
             command.AppendLine();
             if (context.EmptyBodiesEnabled)
             {
                 command.Append("BEGIN");
                 command.AppendLine();
                 command.Append("END");
             }
             else
             {
                 command.Append(FunctionSource);
             }
         }
         yield return(command);
     }
 }