Skip to content

Commit 2e6aaaf

Browse files
authored
cmd/atlas/internal/sqlparse: move parsers out (#3279)
1 parent 0f5d486 commit 2e6aaaf

File tree

11 files changed

+42
-1727
lines changed

11 files changed

+42
-1727
lines changed

cmd/atlas/internal/migratelint/lint_test.go

Lines changed: 0 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ package migratelint_test
66

77
import (
88
"context"
9-
"errors"
109
"os"
1110
"os/exec"
1211
"path/filepath"
@@ -16,8 +15,6 @@ import (
1615

1716
"ariga.io/atlas/cmd/atlas/internal/migratelint"
1817
"ariga.io/atlas/sql/migrate"
19-
"ariga.io/atlas/sql/schema"
20-
"ariga.io/atlas/sql/sqlclient"
2118
_ "ariga.io/atlas/sql/sqlite"
2219

2320
_ "github.com/mattn/go-sqlite3"
@@ -133,134 +130,3 @@ func TestLatestChanges(t *testing.T) {
133130
require.Equal(t, files[:1], base)
134131
require.Equal(t, files[1:], feat)
135132
}
136-
137-
func TestDevLoader_LoadChanges(t *testing.T) {
138-
ctx := context.Background()
139-
c, err := sqlclient.Open(ctx, "sqlite://ci?mode=memory&_fk=1")
140-
require.NoError(t, err)
141-
defer c.Close()
142-
l := &migratelint.DevLoader{Dev: c}
143-
diff, err := l.LoadChanges(ctx, nil, nil)
144-
require.NoError(t, err)
145-
require.Empty(t, diff.Files)
146-
147-
diff, err = l.LoadChanges(ctx, []migrate.File{
148-
migrate.NewLocalFile("0_base.sql", []byte("---\n\nCREATE INVALID users (id INT);\n")),
149-
}, nil)
150-
require.Error(t, err)
151-
require.Nil(t, diff)
152-
var fr *migratelint.FileError
153-
require.True(t, errors.As(err, &fr))
154-
require.Equal(t, `executing statement: near "INVALID": syntax error`, fr.Err.Error())
155-
require.Equal(t, 5, fr.Pos)
156-
157-
base := []migrate.File{
158-
migrate.NewLocalFile("0_base.sql", []byte("CREATE TABLE users (id INT);")),
159-
}
160-
files := []migrate.File{
161-
migrate.NewLocalFile("1.sql", []byte("CREATE TABLE t1 (id INT);\nINSERT INTO t1 (id) VALUES (1);")),
162-
migrate.NewLocalFile("2.sql", []byte("CREATE TABLE t2 (id INT);\nDROP TABLE users;")),
163-
migrate.NewLocalFile("3.sql", []byte("CREATE TABLE t3 (id INT);\nDROP TABLE t3;")),
164-
migrate.NewLocalFile("4.sql", []byte("ALTER TABLE t2 RENAME id TO oid;")),
165-
}
166-
diff, err = l.LoadChanges(ctx, base, files)
167-
require.NoError(t, err)
168-
require.Len(t, diff.Files, 4)
169-
170-
// File 1.
171-
require.Equal(t, files[0], diff.Files[0].File)
172-
require.Len(t, diff.Files[0].Changes, 2)
173-
require.Zero(t, diff.Files[0].Changes[0].Stmt.Pos)
174-
require.Equal(t, "CREATE TABLE t1 (id INT);", diff.Files[0].Changes[0].Stmt.Text)
175-
require.IsType(t, (*schema.AddTable)(nil), diff.Files[0].Changes[0].Changes[0])
176-
require.Equal(t, "INSERT INTO t1 (id) VALUES (1);", diff.Files[0].Changes[1].Stmt.Text)
177-
require.Empty(t, diff.Files[0].Changes[1].Changes)
178-
179-
// File 2.
180-
require.Equal(t, files[1], diff.Files[1].File)
181-
require.Len(t, diff.Files[1].Changes, 2)
182-
require.Zero(t, diff.Files[1].Changes[0].Stmt.Pos)
183-
require.Equal(t, "CREATE TABLE t2 (id INT);", diff.Files[1].Changes[0].Stmt.Text)
184-
require.IsType(t, (*schema.AddTable)(nil), diff.Files[1].Changes[0].Changes[0])
185-
require.Zero(t, diff.Files[1].Changes[0].Stmt.Pos)
186-
require.Equal(t, "DROP TABLE users;", diff.Files[1].Changes[1].Stmt.Text)
187-
require.IsType(t, (*schema.DropTable)(nil), diff.Files[1].Changes[1].Changes[0])
188-
189-
// File 3.
190-
require.Equal(t, files[2], diff.Files[2].File)
191-
require.IsType(t, (*schema.AddTable)(nil), diff.Files[2].Changes[0].Changes[0])
192-
require.IsType(t, (*schema.DropTable)(nil), diff.Files[2].Changes[1].Changes[0])
193-
require.Empty(t, diff.Files[2].Sum)
194-
195-
// File 3.
196-
require.Equal(t, files[3], diff.Files[3].File)
197-
require.IsType(t, (*schema.ModifyTable)(nil), diff.Files[3].Changes[0].Changes[0])
198-
require.IsType(t, (*schema.RenameColumn)(nil), diff.Files[3].Changes[0].Changes[0].(*schema.ModifyTable).Changes[0])
199-
200-
// Changes.
201-
changes, err := c.RealmDiff(diff.From, diff.To)
202-
require.NoError(t, err)
203-
require.Len(t, changes, 3)
204-
205-
err = c.ApplyChanges(ctx, []schema.Change{
206-
&schema.AddTable{
207-
T: schema.NewTable("users").AddColumns(schema.NewIntColumn("id", "int")),
208-
},
209-
})
210-
require.NoError(t, err)
211-
_, err = l.LoadChanges(ctx, base, files)
212-
require.ErrorAs(t, err, new(*migrate.NotCleanError))
213-
}
214-
215-
func TestDevLoader_LoadCheckpoints(t *testing.T) {
216-
ctx := context.Background()
217-
c, err := sqlclient.Open(ctx, "sqlite://ci?mode=memory&_fk=1")
218-
require.NoError(t, err)
219-
defer c.Close()
220-
dir := &migrate.MemDir{}
221-
l := &migratelint.DevLoader{Dev: c}
222-
require.NoError(t, dir.WriteFile("1.sql", []byte("CREATE TABLE t1 (id INT);")))
223-
require.NoError(t, dir.WriteFile("2.sql", []byte("CREATE TABLE t2 (id INT);")))
224-
require.NoError(t, dir.WriteCheckpoint("3_checkpoint.sql", "", []byte("CREATE TABLE t1 (id INT);\nCREATE TABLE t2 (id INT);")))
225-
require.NoError(t, dir.WriteFile("4.sql", []byte("CREATE TABLE t3 (id INT);")))
226-
227-
files, err := dir.Files()
228-
require.NoError(t, err)
229-
// Base contains a checkpoint file.
230-
diff, err := l.LoadChanges(ctx, files[:3], files[3:])
231-
require.NoError(t, err)
232-
require.Len(t, diff.Files, 1)
233-
require.Equal(t, "4.sql", diff.Files[0].File.Name())
234-
isAddTable(t, diff.Files[0].Changes[0].Changes[0], "t3")
235-
236-
// Changed files contain a checkpoint file.
237-
diff, err = l.LoadChanges(ctx, files[:2], files[2:])
238-
require.NoError(t, err)
239-
require.Len(t, diff.Files, 2)
240-
require.Equal(t, "3_checkpoint.sql", diff.Files[0].File.Name())
241-
require.Len(t, diff.Files[0].Changes, 2)
242-
isAddTable(t, diff.Files[0].Changes[0].Changes[0], "t1")
243-
isAddTable(t, diff.Files[0].Changes[1].Changes[0], "t2")
244-
require.Equal(t, "4.sql", diff.Files[1].File.Name())
245-
isAddTable(t, diff.Files[1].Changes[0].Changes[0], "t3")
246-
247-
// Both base and changed files contain a checkpoint file.
248-
require.NoError(t, dir.WriteCheckpoint("5_checkpoint.sql", "", []byte("CREATE TABLE t1(id INT);\nCREATE TABLE t2(id INT);\nCREATE TABLE t3(id INT);")))
249-
files, err = dir.Files()
250-
require.NoError(t, err)
251-
diff, err = l.LoadChanges(ctx, files[:3], files[3:])
252-
require.NoError(t, err)
253-
require.Len(t, diff.Files, 2)
254-
require.Equal(t, "4.sql", diff.Files[0].File.Name())
255-
isAddTable(t, diff.Files[0].Changes[0].Changes[0], "t3")
256-
require.Equal(t, "5_checkpoint.sql", diff.Files[1].File.Name())
257-
require.Len(t, diff.Files[1].Changes, 3)
258-
isAddTable(t, diff.Files[1].Changes[0].Changes[0], "t1")
259-
isAddTable(t, diff.Files[1].Changes[1].Changes[0], "t2")
260-
isAddTable(t, diff.Files[1].Changes[2].Changes[0], "t3")
261-
}
262-
263-
func isAddTable(t *testing.T, c schema.Change, name string) {
264-
require.IsType(t, (*schema.AddTable)(nil), c)
265-
require.Equal(t, name, c.(*schema.AddTable).T.Name)
266-
}

cmd/atlas/internal/sqlparse/pgparse/pgparse.go

Lines changed: 0 additions & 215 deletions
This file was deleted.

cmd/atlas/internal/sqlparse/pgparse/pgparse_oss.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,22 @@
77
package pgparse
88

99
import (
10+
"errors"
11+
12+
"ariga.io/atlas/sql/migrate"
1013
"ariga.io/atlas/sql/schema"
11-
pgquery "github.com/pganalyze/pg_query_go/v5"
1214
)
1315

14-
func FixAlterTable(_ string, _ *pgquery.AlterTableStmt, changes schema.Changes) (schema.Changes, error) {
16+
type Parser struct{}
17+
18+
func (*Parser) ColumnFilledBefore([]*migrate.Stmt, *schema.Table, *schema.Column, int) (bool, error) {
19+
return false, errors.New("unimplemented")
20+
}
21+
22+
func (*Parser) CreateViewAfter([]*migrate.Stmt, string, string, int) (bool, error) {
23+
return false, errors.New("unimplemented")
24+
}
25+
26+
func (*Parser) FixChange(_ migrate.Driver, _ string, changes schema.Changes) (schema.Changes, error) {
1527
return changes, nil // Unimplemented.
1628
}

0 commit comments

Comments
 (0)