From c3bebe5b2b3a24e0616d20448c2f18e913800246 Mon Sep 17 00:00:00 2001 From: Olivier El Mekki Date: Sat, 31 Dec 2016 10:07:00 +0100 Subject: [PATCH] FIX functions default parameters `DROP FUNCTION` does not allow to provide default values in signature, making a direct mirroring of `CREATE FUNCTION` signature fails. Parsed signature to be sure to remove default before dropping function. --- function.go | 29 +++++++++++++++++++++++++++++ main.go | 2 +- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/function.go b/function.go index ebc79cd..ae08730 100644 --- a/function.go +++ b/function.go @@ -4,6 +4,7 @@ import ( "io/ioutil" "fmt" "regexp" + "strings" ) /* @@ -84,6 +85,9 @@ func ( function *Function ) Parse() ( err error ) { if err != nil { return err } } + err = function.removeDefaultFromSignature() + if err != nil { return } + return } @@ -125,3 +129,28 @@ func ( function *Function ) previousSignature() ( signature string, exists bool, return } + + +/* + * `DROP FUNCTION` raises error if the signature contains `DEFAULT` values for + * parameters, so we must remove them. + */ +func ( function *Function ) removeDefaultFromSignature() ( err error ) { + anyDefault, err := regexp.MatchString( "(?i)DEFAULT", function.Signature ) + if err != nil { return } + + if anyDefault { + arguments := strings.Split( function.Signature, "," ) + newArgs := make( []string, 0 ) + + for _, arg := range arguments { + arg = strings.Replace( arg, " DEFAULT ", " default ", -1 ) + newArg := strings.Split( arg, " default " )[0] + newArgs = append( newArgs, newArg ) + } + + function.Signature = strings.Join( newArgs, "," ) + } + + return +} diff --git a/main.go b/main.go index 7554c2e..0bb5f5c 100644 --- a/main.go +++ b/main.go @@ -45,7 +45,7 @@ func CheckSanity() { */ func Usage() { usage := ` -PgRebase-1.1.0 +PgRebase-1.1.1+ USAGE: DATABASE_URL=url pgrebase [-w]