Skip to content

Commit

Permalink
Upgrade pingcap parser (#1759) (#1760)
Browse files Browse the repository at this point in the history
* (chore): Upgrade tidb_parser to new repository

fixes: #1795
Refs: #1197 #1754

* test(MySQL): Add test for default column values

Refs: #1197 #1754
  • Loading branch information
akutschera authored Jul 27, 2022
1 parent 0ae16d2 commit e5ba388
Show file tree
Hide file tree
Showing 6 changed files with 133 additions and 44 deletions.
8 changes: 7 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,18 @@ require (
github.com/lib/pq v1.10.6
github.com/mattn/go-sqlite3 v1.14.13
github.com/pganalyze/pg_query_go/v2 v2.1.2
github.com/pingcap/parser v0.0.0-20210914110036-002913dd28ec
github.com/spf13/cobra v1.5.0
github.com/spf13/pflag v1.0.5
google.golang.org/protobuf v1.28.0
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
)

require (
github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 // indirect
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect
golang.org/x/exp v0.0.0-20220428152302-39d4317da171 // indirect
)

require (
github.com/golang/protobuf v1.5.2 // indirect
github.com/inconshreveable/mousetrap v1.0.0 // indirect
Expand All @@ -33,6 +38,7 @@ require (
github.com/kr/pretty v0.2.1 // indirect
github.com/pingcap/errors v0.11.5-0.20210425183316-da1aaba5fb63 // indirect
github.com/pingcap/log v0.0.0-20210906054005-afc726e70354 // indirect
github.com/pingcap/tidb/parser v0.0.0-20220725134311-c80026e61f00
github.com/pkg/errors v0.9.1 // indirect
go.uber.org/atomic v1.9.0 // indirect
go.uber.org/multierr v1.7.0 // indirect
Expand Down
18 changes: 6 additions & 12 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,13 @@ github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7
github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
github.com/cznic/golex v0.0.0-20181122101858-9c343928389c/go.mod h1:+bmmJDNmKlhWNG+gwWCkaBoTy39Fs+bzRxVBzoTQbIc=
github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 h1:iwZdTE0PVqJCos1vaoKsclOGD3ADKpshg3SRtYBbwso=
github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM=
github.com/cznic/parser v0.0.0-20160622100904-31edd927e5b1/go.mod h1:2B43mz36vGZNZEwkWi8ayRSSUXLfjL8OkbzwW4NcPMM=
github.com/cznic/sortutil v0.0.0-20181122101858-f5f958428db8/go.mod h1:q2w6Bg5jeox1B+QkJ6Wp/+Vn0G/bo3f1uY7Fn3vivIQ=
github.com/cznic/strutil v0.0.0-20171016134553-529a34b1c186/go.mod h1:AHHPPPXTw0h6pVabbcbyGRK1DckRn7r/STdZEeIDzZc=
github.com/cznic/y v0.0.0-20170802143616-045f81c6662a/go.mod h1:1rk5VM7oSnA4vjp+hrLQ3HWHa+Y4yPCa3/CsJrcNnvs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
github.com/go-sql-driver/mysql v1.3.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
Expand Down Expand Up @@ -123,21 +118,19 @@ github.com/mattn/go-sqlite3 v1.14.13 h1:1tj15ngiFfcZzii7yd82foL+ks+ouQcj8j/TPq3f
github.com/mattn/go-sqlite3 v1.14.13/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/pganalyze/pg_query_go/v2 v2.1.2 h1:LiNm3WoBV/cc144X6jlVKD5DPL+fI2wfvCXT7z25B8U=
github.com/pganalyze/pg_query_go/v2 v2.1.2/go.mod h1:XAxmVqz1tEGqizcQ3YSdN90vCOHBWjJi8URL1er5+cA=
github.com/pingcap/check v0.0.0-20190102082844-67f458068fc8 h1:USx2/E1bX46VG32FIw034Au6seQ2fY9NEILmNh/UlQg=
github.com/pingcap/check v0.0.0-20190102082844-67f458068fc8/go.mod h1:B1+S9LNcuMyLH/4HMTViQOJevkGiik3wW2AN9zb2fNQ=
github.com/pingcap/errors v0.11.0/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
github.com/pingcap/errors v0.11.5-0.20210425183316-da1aaba5fb63 h1:+FZIDR/D97YOPik4N4lPDaUcLDF/EQPogxtlHB2ZZRM=
github.com/pingcap/errors v0.11.5-0.20210425183316-da1aaba5fb63/go.mod h1:X2r9ueLEUZgtx2cIogM0v4Zj5uvvzhuuiu7Pn8HzMPg=
github.com/pingcap/log v0.0.0-20210625125904-98ed8e2eb1c7/go.mod h1:8AanEdAHATuRurdGxZXBz0At+9avep+ub7U1AGYLIMM=
github.com/pingcap/log v0.0.0-20210906054005-afc726e70354 h1:SvWCbCPh1YeHd9yQLksvJYAgft6wLTY1aNG81tpyscQ=
github.com/pingcap/log v0.0.0-20210906054005-afc726e70354/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4=
github.com/pingcap/parser v0.0.0-20210914110036-002913dd28ec h1:tUcualrzARkmDCM4OGT27cEnjDyAN1MW5AoZqmTCITA=
github.com/pingcap/parser v0.0.0-20210914110036-002913dd28ec/go.mod h1:+xcMiiZzdIktT/Nqdfm81dkECJ2EPuoAYywd57py4Pk=
github.com/pingcap/tidb/parser v0.0.0-20220725134311-c80026e61f00 h1:aDC/yAGx/jPEyrX+UPKV3GWg+4A4yG8ifuP6jBEhDi0=
github.com/pingcap/tidb/parser v0.0.0-20220725134311-c80026e61f00/go.mod h1:wjvp+T3/T9XYt0nKqGX3Kc1AKuyUcfno6LTc6b2A6ew=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk=
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
Expand Down Expand Up @@ -185,7 +178,6 @@ go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9E
go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI=
go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI=
Expand All @@ -203,6 +195,8 @@ golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5y
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ=
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/exp v0.0.0-20220428152302-39d4317da171 h1:TfdoLivD44QwvssI9Sv1xwa5DcL5XQr4au4sZ2F2NV4=
golang.org/x/exp v0.0.0-20220428152302-39d4317da171/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
Expand Down
96 changes: 96 additions & 0 deletions internal/engine/dolphin/catalog_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
package dolphin

import (
"errors"
"strconv"
"strings"
"testing"

"github.com/kyleconroy/sqlc/internal/sql/sqlerr"

"github.com/google/go-cmp/cmp"
)

func TestUpdateErrors(t *testing.T) {
p := NewParser()
for i, tc := range []struct {
stmt string
err *sqlerr.Error
}{
{
`
CREATE TABLE foo (bar int);
CREATE TABLE foo (bar int);
`,
sqlerr.RelationExists("foo"),
},
} {
test := tc
t.Run(strconv.Itoa(i), func(t *testing.T) {
stmts, err := p.Parse(strings.NewReader(test.stmt))
if err != nil {
t.Log(test.stmt)
t.Fatal(err)
}

c := NewCatalog()
err = c.Build(stmts)
if err == nil {
t.Log(test.stmt)
t.Fatal("err was nil")
}

var actual *sqlerr.Error
if !errors.As(err, &actual) {
t.Fatalf("err is not *sqlerr.Error: %#v", err)
}

if diff := cmp.Diff(test.err.Error(), actual.Error()); diff != "" {
t.Log(test.stmt)
t.Errorf("error mismatch: \n%s", diff)
}
})
}
}

func TestSuccessfulUpdate(t *testing.T) {
p := NewParser()
for i, tc := range []struct {
stmt string
}{
{
`
CREATE TABLE authors (
id INT PRIMARY KEY,
name text NOT NULL,
bio text NOT NULL DEFAULT (bio_func())
);
`,
},
{
`
CREATE TABLE IF NOT EXISTS organizations
(
id VARCHAR(36) DEFAULT (UUID()) NOT NULL PRIMARY KEY
);
`,
},
} {
test := tc
t.Run(strconv.Itoa(i), func(t *testing.T) {
stmts, err := p.Parse(strings.NewReader(test.stmt))
if err != nil {
t.Log(test.stmt)
t.Fatal(err)
}

c := NewCatalog()
err = c.Build(stmts)
if err != nil {
t.Log(test.stmt)
t.Log(err)
t.Fatal("err should have been nil")
}
})
}
}
49 changes: 21 additions & 28 deletions internal/engine/dolphin/convert.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ import (
"log"
"strings"

pcast "github.com/pingcap/parser/ast"
"github.com/pingcap/parser/opcode"
driver "github.com/pingcap/parser/test_driver"
"github.com/pingcap/parser/types"
pcast "github.com/pingcap/tidb/parser/ast"
"github.com/pingcap/tidb/parser/opcode"
driver "github.com/pingcap/tidb/parser/test_driver"
"github.com/pingcap/tidb/parser/types"

"github.com/kyleconroy/sqlc/internal/debug"
"github.com/kyleconroy/sqlc/internal/sql/ast"
Expand Down Expand Up @@ -45,11 +45,11 @@ func (c *cc) convertAlterTableStmt(n *pcast.AlterTableStmt) ast.Node {
name := def.Name.String()
columnDef := ast.ColumnDef{
Colname: def.Name.String(),
TypeName: &ast.TypeName{Name: types.TypeStr(def.Tp.Tp)},
TypeName: &ast.TypeName{Name: types.TypeStr(def.Tp.GetType())},
IsNotNull: isNotNull(def),
}
if def.Tp.Flen >= 0 {
length := def.Tp.Flen
if def.Tp.GetFlen() >= 0 {
length := def.Tp.GetFlen()
columnDef.Length = &length
}
alt.Cmds.Items = append(alt.Cmds.Items, &ast.AlterTableCmd{
Expand Down Expand Up @@ -78,11 +78,11 @@ func (c *cc) convertAlterTableStmt(n *pcast.AlterTableStmt) ast.Node {
name := def.Name.String()
columnDef := ast.ColumnDef{
Colname: def.Name.String(),
TypeName: &ast.TypeName{Name: types.TypeStr(def.Tp.Tp)},
TypeName: &ast.TypeName{Name: types.TypeStr(def.Tp.GetType())},
IsNotNull: isNotNull(def),
}
if def.Tp.Flen >= 0 {
length := def.Tp.Flen
if def.Tp.GetFlen() >= 0 {
length := def.Tp.GetFlen()
columnDef.Length = &length
}
alt.Cmds.Items = append(alt.Cmds.Items, &ast.AlterTableCmd{
Expand All @@ -97,11 +97,11 @@ func (c *cc) convertAlterTableStmt(n *pcast.AlterTableStmt) ast.Node {
name := def.Name.String()
columnDef := ast.ColumnDef{
Colname: def.Name.String(),
TypeName: &ast.TypeName{Name: types.TypeStr(def.Tp.Tp)},
TypeName: &ast.TypeName{Name: types.TypeStr(def.Tp.GetType())},
IsNotNull: isNotNull(def),
}
if def.Tp.Flen >= 0 {
length := def.Tp.Flen
if def.Tp.GetFlen() >= 0 {
length := def.Tp.GetFlen()
columnDef.Length = &length
}
alt.Cmds.Items = append(alt.Cmds.Items, &ast.AlterTableCmd{
Expand Down Expand Up @@ -247,11 +247,11 @@ func (c *cc) convertCreateTableStmt(n *pcast.CreateTableStmt) ast.Node {
}
for _, def := range n.Cols {
var vals *ast.List
if len(def.Tp.Elems) > 0 {
if len(def.Tp.GetElems()) > 0 {
vals = &ast.List{}
for i := range def.Tp.Elems {
for i := range def.Tp.GetElems() {
vals.Items = append(vals.Items, &ast.String{
Str: def.Tp.Elems[i],
Str: def.Tp.GetElems()[i],
})
}
}
Expand All @@ -266,13 +266,13 @@ func (c *cc) convertCreateTableStmt(n *pcast.CreateTableStmt) ast.Node {
}
columnDef := ast.ColumnDef{
Colname: def.Name.String(),
TypeName: &ast.TypeName{Name: types.TypeStr(def.Tp.Tp)},
TypeName: &ast.TypeName{Name: types.TypeStr(def.Tp.GetType())},
IsNotNull: isNotNull(def),
Comment: comment,
Vals: vals,
}
if def.Tp.Flen >= 0 {
length := def.Tp.Flen
if def.Tp.GetFlen() >= 0 {
length := def.Tp.GetFlen()
columnDef.Length = &length
}
create.Cols = append(create.Cols, &columnDef)
Expand Down Expand Up @@ -763,7 +763,7 @@ func (c *cc) convertCreateBindingStmt(n *pcast.CreateBindingStmt) ast.Node {

func (c *cc) convertCreateDatabaseStmt(n *pcast.CreateDatabaseStmt) ast.Node {
return &ast.CreateSchemaStmt{
Name: &n.Name,
Name: &n.Name.O,
IfNotExists: n.IfNotExists,
}
}
Expand Down Expand Up @@ -819,7 +819,7 @@ func (c *cc) convertDropDatabaseStmt(n *pcast.DropDatabaseStmt) ast.Node {
return &ast.DropSchemaStmt{
MissingOk: !n.IfExists,
Schemas: []*ast.String{
NewIdentifier(n.Name),
NewIdentifier(n.Name.O),
},
}
}
Expand Down Expand Up @@ -1076,10 +1076,6 @@ func (c *cc) convertPatternRegexpExpr(n *pcast.PatternRegexpExpr) ast.Node {
return todo(n)
}

func (c *cc) convertPlacementSpec(n *pcast.PlacementSpec) ast.Node {
return todo(n)
}

func (c *cc) convertPositionExpr(n *pcast.PositionExpr) ast.Node {
return todo(n)
}
Expand Down Expand Up @@ -1626,9 +1622,6 @@ func (c *cc) convert(node pcast.Node) ast.Node {
case *pcast.PatternRegexpExpr:
return c.convertPatternRegexpExpr(n)

case *pcast.PlacementSpec:
return c.convertPlacementSpec(n)

case *pcast.PositionExpr:
return c.convertPositionExpr(n)

Expand Down
4 changes: 2 additions & 2 deletions internal/engine/dolphin/parse.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import (
"strconv"
"strings"

"github.com/pingcap/parser"
_ "github.com/pingcap/parser/test_driver"
"github.com/pingcap/tidb/parser"
_ "github.com/pingcap/tidb/parser/test_driver"

"github.com/kyleconroy/sqlc/internal/metadata"
"github.com/kyleconroy/sqlc/internal/sql/ast"
Expand Down
2 changes: 1 addition & 1 deletion internal/engine/dolphin/utils.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package dolphin

import (
pcast "github.com/pingcap/parser/ast"
pcast "github.com/pingcap/tidb/parser/ast"

"github.com/kyleconroy/sqlc/internal/sql/ast"
)
Expand Down

0 comments on commit e5ba388

Please sign in to comment.