Skip to content

Commit e5ba388

Browse files
authored
Upgrade pingcap parser (#1759) (#1760)
* (chore): Upgrade tidb_parser to new repository fixes: #1795 Refs: #1197 #1754 * test(MySQL): Add test for default column values Refs: #1197 #1754
1 parent 0ae16d2 commit e5ba388

File tree

6 files changed

+133
-44
lines changed

6 files changed

+133
-44
lines changed

go.mod

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,18 @@ require (
1414
github.com/lib/pq v1.10.6
1515
github.com/mattn/go-sqlite3 v1.14.13
1616
github.com/pganalyze/pg_query_go/v2 v2.1.2
17-
github.com/pingcap/parser v0.0.0-20210914110036-002913dd28ec
1817
github.com/spf13/cobra v1.5.0
1918
github.com/spf13/pflag v1.0.5
2019
google.golang.org/protobuf v1.28.0
2120
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
2221
)
2322

23+
require (
24+
github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 // indirect
25+
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect
26+
golang.org/x/exp v0.0.0-20220428152302-39d4317da171 // indirect
27+
)
28+
2429
require (
2530
github.com/golang/protobuf v1.5.2 // indirect
2631
github.com/inconshreveable/mousetrap v1.0.0 // indirect
@@ -33,6 +38,7 @@ require (
3338
github.com/kr/pretty v0.2.1 // indirect
3439
github.com/pingcap/errors v0.11.5-0.20210425183316-da1aaba5fb63 // indirect
3540
github.com/pingcap/log v0.0.0-20210906054005-afc726e70354 // indirect
41+
github.com/pingcap/tidb/parser v0.0.0-20220725134311-c80026e61f00
3642
github.com/pkg/errors v0.9.1 // indirect
3743
go.uber.org/atomic v1.9.0 // indirect
3844
go.uber.org/multierr v1.7.0 // indirect

go.sum

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,13 @@ github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7
1313
github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
1414
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
1515
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
16-
github.com/cznic/golex v0.0.0-20181122101858-9c343928389c/go.mod h1:+bmmJDNmKlhWNG+gwWCkaBoTy39Fs+bzRxVBzoTQbIc=
16+
github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 h1:iwZdTE0PVqJCos1vaoKsclOGD3ADKpshg3SRtYBbwso=
1717
github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM=
18-
github.com/cznic/parser v0.0.0-20160622100904-31edd927e5b1/go.mod h1:2B43mz36vGZNZEwkWi8ayRSSUXLfjL8OkbzwW4NcPMM=
19-
github.com/cznic/sortutil v0.0.0-20181122101858-f5f958428db8/go.mod h1:q2w6Bg5jeox1B+QkJ6Wp/+Vn0G/bo3f1uY7Fn3vivIQ=
20-
github.com/cznic/strutil v0.0.0-20171016134553-529a34b1c186/go.mod h1:AHHPPPXTw0h6pVabbcbyGRK1DckRn7r/STdZEeIDzZc=
21-
github.com/cznic/y v0.0.0-20170802143616-045f81c6662a/go.mod h1:1rk5VM7oSnA4vjp+hrLQ3HWHa+Y4yPCa3/CsJrcNnvs=
2218
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
2319
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
2420
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
2521
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
2622
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
27-
github.com/go-sql-driver/mysql v1.3.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
2823
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
2924
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
3025
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
@@ -123,21 +118,19 @@ github.com/mattn/go-sqlite3 v1.14.13 h1:1tj15ngiFfcZzii7yd82foL+ks+ouQcj8j/TPq3f
123118
github.com/mattn/go-sqlite3 v1.14.13/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
124119
github.com/pganalyze/pg_query_go/v2 v2.1.2 h1:LiNm3WoBV/cc144X6jlVKD5DPL+fI2wfvCXT7z25B8U=
125120
github.com/pganalyze/pg_query_go/v2 v2.1.2/go.mod h1:XAxmVqz1tEGqizcQ3YSdN90vCOHBWjJi8URL1er5+cA=
126-
github.com/pingcap/check v0.0.0-20190102082844-67f458068fc8 h1:USx2/E1bX46VG32FIw034Au6seQ2fY9NEILmNh/UlQg=
127-
github.com/pingcap/check v0.0.0-20190102082844-67f458068fc8/go.mod h1:B1+S9LNcuMyLH/4HMTViQOJevkGiik3wW2AN9zb2fNQ=
128121
github.com/pingcap/errors v0.11.0/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
129122
github.com/pingcap/errors v0.11.5-0.20210425183316-da1aaba5fb63 h1:+FZIDR/D97YOPik4N4lPDaUcLDF/EQPogxtlHB2ZZRM=
130123
github.com/pingcap/errors v0.11.5-0.20210425183316-da1aaba5fb63/go.mod h1:X2r9ueLEUZgtx2cIogM0v4Zj5uvvzhuuiu7Pn8HzMPg=
131-
github.com/pingcap/log v0.0.0-20210625125904-98ed8e2eb1c7/go.mod h1:8AanEdAHATuRurdGxZXBz0At+9avep+ub7U1AGYLIMM=
132124
github.com/pingcap/log v0.0.0-20210906054005-afc726e70354 h1:SvWCbCPh1YeHd9yQLksvJYAgft6wLTY1aNG81tpyscQ=
133125
github.com/pingcap/log v0.0.0-20210906054005-afc726e70354/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4=
134-
github.com/pingcap/parser v0.0.0-20210914110036-002913dd28ec h1:tUcualrzARkmDCM4OGT27cEnjDyAN1MW5AoZqmTCITA=
135-
github.com/pingcap/parser v0.0.0-20210914110036-002913dd28ec/go.mod h1:+xcMiiZzdIktT/Nqdfm81dkECJ2EPuoAYywd57py4Pk=
126+
github.com/pingcap/tidb/parser v0.0.0-20220725134311-c80026e61f00 h1:aDC/yAGx/jPEyrX+UPKV3GWg+4A4yG8ifuP6jBEhDi0=
127+
github.com/pingcap/tidb/parser v0.0.0-20220725134311-c80026e61f00/go.mod h1:wjvp+T3/T9XYt0nKqGX3Kc1AKuyUcfno6LTc6b2A6ew=
136128
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
137129
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
138130
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
139131
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
140132
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
133+
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk=
141134
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
142135
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
143136
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
@@ -185,7 +178,6 @@ go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9E
185178
go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
186179
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
187180
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
188-
go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
189181
go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
190182
go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI=
191183
go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI=
@@ -203,6 +195,8 @@ golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5y
203195
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
204196
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ=
205197
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
198+
golang.org/x/exp v0.0.0-20220428152302-39d4317da171 h1:TfdoLivD44QwvssI9Sv1xwa5DcL5XQr4au4sZ2F2NV4=
199+
golang.org/x/exp v0.0.0-20220428152302-39d4317da171/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE=
206200
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
207201
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
208202
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
package dolphin
2+
3+
import (
4+
"errors"
5+
"strconv"
6+
"strings"
7+
"testing"
8+
9+
"github.com/kyleconroy/sqlc/internal/sql/sqlerr"
10+
11+
"github.com/google/go-cmp/cmp"
12+
)
13+
14+
func TestUpdateErrors(t *testing.T) {
15+
p := NewParser()
16+
for i, tc := range []struct {
17+
stmt string
18+
err *sqlerr.Error
19+
}{
20+
{
21+
`
22+
CREATE TABLE foo (bar int);
23+
CREATE TABLE foo (bar int);
24+
`,
25+
sqlerr.RelationExists("foo"),
26+
},
27+
} {
28+
test := tc
29+
t.Run(strconv.Itoa(i), func(t *testing.T) {
30+
stmts, err := p.Parse(strings.NewReader(test.stmt))
31+
if err != nil {
32+
t.Log(test.stmt)
33+
t.Fatal(err)
34+
}
35+
36+
c := NewCatalog()
37+
err = c.Build(stmts)
38+
if err == nil {
39+
t.Log(test.stmt)
40+
t.Fatal("err was nil")
41+
}
42+
43+
var actual *sqlerr.Error
44+
if !errors.As(err, &actual) {
45+
t.Fatalf("err is not *sqlerr.Error: %#v", err)
46+
}
47+
48+
if diff := cmp.Diff(test.err.Error(), actual.Error()); diff != "" {
49+
t.Log(test.stmt)
50+
t.Errorf("error mismatch: \n%s", diff)
51+
}
52+
})
53+
}
54+
}
55+
56+
func TestSuccessfulUpdate(t *testing.T) {
57+
p := NewParser()
58+
for i, tc := range []struct {
59+
stmt string
60+
}{
61+
{
62+
`
63+
CREATE TABLE authors (
64+
id INT PRIMARY KEY,
65+
name text NOT NULL,
66+
bio text NOT NULL DEFAULT (bio_func())
67+
);
68+
`,
69+
},
70+
{
71+
`
72+
CREATE TABLE IF NOT EXISTS organizations
73+
(
74+
id VARCHAR(36) DEFAULT (UUID()) NOT NULL PRIMARY KEY
75+
);
76+
`,
77+
},
78+
} {
79+
test := tc
80+
t.Run(strconv.Itoa(i), func(t *testing.T) {
81+
stmts, err := p.Parse(strings.NewReader(test.stmt))
82+
if err != nil {
83+
t.Log(test.stmt)
84+
t.Fatal(err)
85+
}
86+
87+
c := NewCatalog()
88+
err = c.Build(stmts)
89+
if err != nil {
90+
t.Log(test.stmt)
91+
t.Log(err)
92+
t.Fatal("err should have been nil")
93+
}
94+
})
95+
}
96+
}

internal/engine/dolphin/convert.go

Lines changed: 21 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ import (
55
"log"
66
"strings"
77

8-
pcast "github.com/pingcap/parser/ast"
9-
"github.com/pingcap/parser/opcode"
10-
driver "github.com/pingcap/parser/test_driver"
11-
"github.com/pingcap/parser/types"
8+
pcast "github.com/pingcap/tidb/parser/ast"
9+
"github.com/pingcap/tidb/parser/opcode"
10+
driver "github.com/pingcap/tidb/parser/test_driver"
11+
"github.com/pingcap/tidb/parser/types"
1212

1313
"github.com/kyleconroy/sqlc/internal/debug"
1414
"github.com/kyleconroy/sqlc/internal/sql/ast"
@@ -45,11 +45,11 @@ func (c *cc) convertAlterTableStmt(n *pcast.AlterTableStmt) ast.Node {
4545
name := def.Name.String()
4646
columnDef := ast.ColumnDef{
4747
Colname: def.Name.String(),
48-
TypeName: &ast.TypeName{Name: types.TypeStr(def.Tp.Tp)},
48+
TypeName: &ast.TypeName{Name: types.TypeStr(def.Tp.GetType())},
4949
IsNotNull: isNotNull(def),
5050
}
51-
if def.Tp.Flen >= 0 {
52-
length := def.Tp.Flen
51+
if def.Tp.GetFlen() >= 0 {
52+
length := def.Tp.GetFlen()
5353
columnDef.Length = &length
5454
}
5555
alt.Cmds.Items = append(alt.Cmds.Items, &ast.AlterTableCmd{
@@ -78,11 +78,11 @@ func (c *cc) convertAlterTableStmt(n *pcast.AlterTableStmt) ast.Node {
7878
name := def.Name.String()
7979
columnDef := ast.ColumnDef{
8080
Colname: def.Name.String(),
81-
TypeName: &ast.TypeName{Name: types.TypeStr(def.Tp.Tp)},
81+
TypeName: &ast.TypeName{Name: types.TypeStr(def.Tp.GetType())},
8282
IsNotNull: isNotNull(def),
8383
}
84-
if def.Tp.Flen >= 0 {
85-
length := def.Tp.Flen
84+
if def.Tp.GetFlen() >= 0 {
85+
length := def.Tp.GetFlen()
8686
columnDef.Length = &length
8787
}
8888
alt.Cmds.Items = append(alt.Cmds.Items, &ast.AlterTableCmd{
@@ -97,11 +97,11 @@ func (c *cc) convertAlterTableStmt(n *pcast.AlterTableStmt) ast.Node {
9797
name := def.Name.String()
9898
columnDef := ast.ColumnDef{
9999
Colname: def.Name.String(),
100-
TypeName: &ast.TypeName{Name: types.TypeStr(def.Tp.Tp)},
100+
TypeName: &ast.TypeName{Name: types.TypeStr(def.Tp.GetType())},
101101
IsNotNull: isNotNull(def),
102102
}
103-
if def.Tp.Flen >= 0 {
104-
length := def.Tp.Flen
103+
if def.Tp.GetFlen() >= 0 {
104+
length := def.Tp.GetFlen()
105105
columnDef.Length = &length
106106
}
107107
alt.Cmds.Items = append(alt.Cmds.Items, &ast.AlterTableCmd{
@@ -247,11 +247,11 @@ func (c *cc) convertCreateTableStmt(n *pcast.CreateTableStmt) ast.Node {
247247
}
248248
for _, def := range n.Cols {
249249
var vals *ast.List
250-
if len(def.Tp.Elems) > 0 {
250+
if len(def.Tp.GetElems()) > 0 {
251251
vals = &ast.List{}
252-
for i := range def.Tp.Elems {
252+
for i := range def.Tp.GetElems() {
253253
vals.Items = append(vals.Items, &ast.String{
254-
Str: def.Tp.Elems[i],
254+
Str: def.Tp.GetElems()[i],
255255
})
256256
}
257257
}
@@ -266,13 +266,13 @@ func (c *cc) convertCreateTableStmt(n *pcast.CreateTableStmt) ast.Node {
266266
}
267267
columnDef := ast.ColumnDef{
268268
Colname: def.Name.String(),
269-
TypeName: &ast.TypeName{Name: types.TypeStr(def.Tp.Tp)},
269+
TypeName: &ast.TypeName{Name: types.TypeStr(def.Tp.GetType())},
270270
IsNotNull: isNotNull(def),
271271
Comment: comment,
272272
Vals: vals,
273273
}
274-
if def.Tp.Flen >= 0 {
275-
length := def.Tp.Flen
274+
if def.Tp.GetFlen() >= 0 {
275+
length := def.Tp.GetFlen()
276276
columnDef.Length = &length
277277
}
278278
create.Cols = append(create.Cols, &columnDef)
@@ -763,7 +763,7 @@ func (c *cc) convertCreateBindingStmt(n *pcast.CreateBindingStmt) ast.Node {
763763

764764
func (c *cc) convertCreateDatabaseStmt(n *pcast.CreateDatabaseStmt) ast.Node {
765765
return &ast.CreateSchemaStmt{
766-
Name: &n.Name,
766+
Name: &n.Name.O,
767767
IfNotExists: n.IfNotExists,
768768
}
769769
}
@@ -819,7 +819,7 @@ func (c *cc) convertDropDatabaseStmt(n *pcast.DropDatabaseStmt) ast.Node {
819819
return &ast.DropSchemaStmt{
820820
MissingOk: !n.IfExists,
821821
Schemas: []*ast.String{
822-
NewIdentifier(n.Name),
822+
NewIdentifier(n.Name.O),
823823
},
824824
}
825825
}
@@ -1076,10 +1076,6 @@ func (c *cc) convertPatternRegexpExpr(n *pcast.PatternRegexpExpr) ast.Node {
10761076
return todo(n)
10771077
}
10781078

1079-
func (c *cc) convertPlacementSpec(n *pcast.PlacementSpec) ast.Node {
1080-
return todo(n)
1081-
}
1082-
10831079
func (c *cc) convertPositionExpr(n *pcast.PositionExpr) ast.Node {
10841080
return todo(n)
10851081
}
@@ -1626,9 +1622,6 @@ func (c *cc) convert(node pcast.Node) ast.Node {
16261622
case *pcast.PatternRegexpExpr:
16271623
return c.convertPatternRegexpExpr(n)
16281624

1629-
case *pcast.PlacementSpec:
1630-
return c.convertPlacementSpec(n)
1631-
16321625
case *pcast.PositionExpr:
16331626
return c.convertPositionExpr(n)
16341627

internal/engine/dolphin/parse.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import (
77
"strconv"
88
"strings"
99

10-
"github.com/pingcap/parser"
11-
_ "github.com/pingcap/parser/test_driver"
10+
"github.com/pingcap/tidb/parser"
11+
_ "github.com/pingcap/tidb/parser/test_driver"
1212

1313
"github.com/kyleconroy/sqlc/internal/metadata"
1414
"github.com/kyleconroy/sqlc/internal/sql/ast"

internal/engine/dolphin/utils.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package dolphin
22

33
import (
4-
pcast "github.com/pingcap/parser/ast"
4+
pcast "github.com/pingcap/tidb/parser/ast"
55

66
"github.com/kyleconroy/sqlc/internal/sql/ast"
77
)

0 commit comments

Comments
 (0)