Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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