github.com/wawandco/oxpecker@v1.5.7-0.20210910201653-5958d4afdd89/tools/soda/fizz/change_column.go (about)

     1  package fizz
     2  
     3  import (
     4  	"fmt"
     5  	"regexp"
     6  	"strings"
     7  )
     8  
     9  var ccReg = regexp.MustCompile(`change_(\w+)_(\w+)`)
    10  
    11  type changeColumn struct {
    12  	column     string
    13  	newColType string
    14  	table      string
    15  	isNull     bool
    16  }
    17  
    18  func (cc changeColumn) match(name string) bool {
    19  	return ccReg.MatchString(name)
    20  }
    21  
    22  func (cc *changeColumn) GenerateFizz(name string, args []string) (string, string, error) {
    23  	if len(args) == 0 {
    24  		return "", "", ErrNoColumnFound
    25  	}
    26  
    27  	matches := ccReg.FindAllStringSubmatch(name, -1)[0][1:]
    28  	cc.table = matches[0]
    29  	cc.column = matches[1]
    30  	cc.newColType = columnType(args[0])
    31  	cc.isNull = strings.Contains(args[0], "nulls")
    32  
    33  	return cc.fizz(), cc.unFizz(), nil
    34  }
    35  
    36  func (cc changeColumn) fizz() string {
    37  	return fmt.Sprintf(`change_column("%s", "%s", "%s", {%s})`, cc.table, cc.column, cc.newColType, cc.parseNull())
    38  }
    39  
    40  func (cc changeColumn) unFizz() string {
    41  	return fmt.Sprintf(`change_column("%s", "%s", "string", {})`, cc.table, cc.column)
    42  }
    43  
    44  func (cc changeColumn) parseNull() string {
    45  	if !cc.isNull {
    46  		return ""
    47  	}
    48  
    49  	return "null: true"
    50  }