@@ -14,15 +14,18 @@ import (
1414var (
1515 sanitizeQuotesRegexp = regexp .MustCompile ("('[^']*')" )
1616 renameColumnRegexp = regexp .MustCompile (`(?i)\bchange\s+(column\s+|)([\S]+)\s+([\S]+)\s+` )
17+ dropColumnRegexp = regexp .MustCompile (`(?i)\bdrop\s+(column\s+|)([\S]+)$` )
1718)
1819
1920type Parser struct {
2021 columnRenameMap map [string ]string
22+ droppedColumns map [string ]bool
2123}
2224
2325func NewParser () * Parser {
2426 return & Parser {
2527 columnRenameMap : make (map [string ]string ),
28+ droppedColumns : make (map [string ]bool ),
2629 }
2730}
2831
@@ -59,10 +62,9 @@ func (this *Parser) sanitizeQuotesFromAlterStatement(alterStatement string) (str
5962 return strippedStatement
6063}
6164
62- func (this * Parser ) ParseAlterStatement (alterStatement string ) (err error ) {
63- alterTokens , _ := this .tokenizeAlterStatement (alterStatement )
64- for _ , alterToken := range alterTokens {
65- alterToken = this .sanitizeQuotesFromAlterStatement (alterToken )
65+ func (this * Parser ) parseAlterToken (alterToken string ) (err error ) {
66+ {
67+ // rename
6668 allStringSubmatch := renameColumnRegexp .FindAllStringSubmatch (alterToken , - 1 )
6769 for _ , submatch := range allStringSubmatch {
6870 if unquoted , err := strconv .Unquote (submatch [2 ]); err == nil {
@@ -71,10 +73,28 @@ func (this *Parser) ParseAlterStatement(alterStatement string) (err error) {
7173 if unquoted , err := strconv .Unquote (submatch [3 ]); err == nil {
7274 submatch [3 ] = unquoted
7375 }
74-
7576 this .columnRenameMap [submatch [2 ]] = submatch [3 ]
7677 }
7778 }
79+ {
80+ // drop
81+ allStringSubmatch := dropColumnRegexp .FindAllStringSubmatch (alterToken , - 1 )
82+ for _ , submatch := range allStringSubmatch {
83+ if unquoted , err := strconv .Unquote (submatch [2 ]); err == nil {
84+ submatch [2 ] = unquoted
85+ }
86+ this .droppedColumns [submatch [2 ]] = true
87+ }
88+ }
89+ return nil
90+ }
91+
92+ func (this * Parser ) ParseAlterStatement (alterStatement string ) (err error ) {
93+ alterTokens , _ := this .tokenizeAlterStatement (alterStatement )
94+ for _ , alterToken := range alterTokens {
95+ alterToken = this .sanitizeQuotesFromAlterStatement (alterToken )
96+ this .parseAlterToken (alterToken )
97+ }
7898 return nil
7999}
80100
@@ -91,3 +111,7 @@ func (this *Parser) GetNonTrivialRenames() map[string]string {
91111func (this * Parser ) HasNonTrivialRenames () bool {
92112 return len (this .GetNonTrivialRenames ()) > 0
93113}
114+
115+ func (this * Parser ) DroppedColumnsMap () map [string ]bool {
116+ return this .droppedColumns
117+ }
0 commit comments