Skip to content

Commit 99c07ac

Browse files
authored
Read project schema-dir from edgedb.toml (#282)
1 parent 0d5d481 commit 99c07ac

File tree

10 files changed

+166
-8
lines changed

10 files changed

+166
-8
lines changed

cmd/edgeql-go/main.go

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import (
3838

3939
edgedb "github.com/edgedb/edgedb-go/internal/client"
4040
"github.com/edgedb/edgedb-go/internal/descriptor"
41+
toml "github.com/pelletier/go-toml/v2"
4142
"golang.org/x/text/cases"
4243
"golang.org/x/text/language"
4344
)
@@ -124,16 +125,21 @@ func isEdgeDBTOML(file string) (bool, error) {
124125
return false, err
125126
}
126127

127-
func getProjectRoot() (string, error) {
128+
type project struct {
129+
rootDir string
130+
migrationsDir string
131+
}
132+
133+
func getProject() (*project, error) {
128134
dir, err := filepath.Abs(".")
129135
if err != nil {
130-
return "", err
136+
return nil, err
131137
}
132138

133139
for {
134140
parent := filepath.Dir(dir)
135141
if dir == parent {
136-
return "", fmt.Errorf(
142+
return nil, fmt.Errorf(
137143
"could not find edgedb.toml, " +
138144
"fix this by initializing a project, run: " +
139145
" edgedb project init",
@@ -143,33 +149,53 @@ func getProjectRoot() (string, error) {
143149
file := filepath.Join(dir, "edgedb.toml")
144150
isTOML, err := isEdgeDBTOML(file)
145151
if err != nil {
146-
return "", err
152+
return nil, err
147153
}
148154

149155
if isTOML {
150-
return dir, nil
156+
data, err := os.ReadFile(file)
157+
if err != nil {
158+
return nil, err
159+
}
160+
161+
var x struct {
162+
Project struct {
163+
SchemaDir string `toml:"schema-dir"`
164+
}
165+
}
166+
x.Project.SchemaDir = "dbschema"
167+
err = toml.Unmarshal(data, &x)
168+
if err != nil {
169+
return nil, err
170+
}
171+
172+
return &project{
173+
rootDir: dir,
174+
migrationsDir: filepath.Join(
175+
dir, x.Project.SchemaDir, "migrations"),
176+
}, nil
151177
}
152178
dir = parent
153179
}
154180
}
155181

156182
func queueFilesInBackground() chan string {
157183
queue := make(chan string)
158-
root, err := getProjectRoot()
184+
p, err := getProject()
159185
if err != nil {
160186
log.Fatal(err)
161187
}
162188

163189
go func() {
164190
er := filepath.WalkDir(
165-
root,
191+
p.rootDir,
166192
func(f string, d fs.DirEntry, e error) error {
167193
if e != nil {
168194
return e
169195
}
170196

171197
if d.IsDir() &&
172-
f == filepath.Join(root, "dbschema/migrations") {
198+
f == p.migrationsDir {
173199
return fs.SkipDir
174200
}
175201

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[edgedb]
2+
server-version = "3.3"
3+
4+
[project]
5+
schema-dir = "somewhere/else"
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
module test
2+
3+
go 1.19
4+
5+
require (
6+
github.com/certifi/gocertifi v0.0.0-20210507211836-431795d63e8d // indirect
7+
github.com/edgedb/edgedb-go v0.12.0 // indirect
8+
github.com/xdg/scram v1.0.5 // indirect
9+
github.com/xdg/stringprep v1.0.3 // indirect
10+
golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect
11+
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect
12+
golang.org/x/text v0.3.7 // indirect
13+
)
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
github.com/certifi/gocertifi v0.0.0-20210507211836-431795d63e8d h1:S2NE3iHSwP0XV47EEXL8mWmRdEfGscSJ+7EgePNgt0s=
2+
github.com/certifi/gocertifi v0.0.0-20210507211836-431795d63e8d/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA=
3+
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
4+
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
5+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
6+
github.com/edgedb/edgedb-go v0.12.0 h1:WQBe/+0kCoccnhsWw+O7cppemsVfy55rAk0EsLrmCHk=
7+
github.com/edgedb/edgedb-go v0.12.0/go.mod h1:O+ZRO2juj+e0PaoK1u2iZmLe7jXko9MlODiHXwSxDYA=
8+
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
9+
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
10+
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
11+
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
12+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
13+
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
14+
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
15+
github.com/xdg/scram v1.0.5 h1:TuS0RFmt5Is5qm9Tm2SoD89OPqe4IRiFtyFY4iwWXsw=
16+
github.com/xdg/scram v1.0.5/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I=
17+
github.com/xdg/stringprep v1.0.3 h1:cmL5Enob4W83ti/ZHuZLuKD/xqJfus4fVPwE+/BDm+4=
18+
github.com/xdg/stringprep v1.0.3/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
19+
golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM=
20+
golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
21+
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
22+
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
23+
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
24+
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
25+
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k=
26+
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
27+
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
28+
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
29+
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
30+
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
31+
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
32+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
33+
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
34+
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
35+
gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package main
2+
3+
func main() {}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
select 1;
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// Code generated by github.com/edgedb/edgedb-go/cmd/edgeql-go DO NOT EDIT.
2+
3+
package main
4+
5+
import (
6+
"context"
7+
_ "embed"
8+
9+
"github.com/edgedb/edgedb-go"
10+
)
11+
12+
//go:embed select_scalar.edgeql
13+
var selectScalarCmd string
14+
15+
// selectScalar
16+
// runs the query found in
17+
// select_scalar.edgeql
18+
func selectScalar(
19+
ctx context.Context,
20+
client *edgedb.Client,
21+
) (int64, error) {
22+
var result int64
23+
24+
err := client.QuerySingle(
25+
ctx,
26+
selectScalarCmd,
27+
&result,
28+
)
29+
30+
return result, err
31+
}
32+
33+
// selectScalarJSON
34+
// runs the query found in
35+
// select_scalar.edgeql
36+
// returning the results as json encoded bytes
37+
func selectScalarJSON(
38+
ctx context.Context,
39+
client *edgedb.Client,
40+
) ([]byte, error) {
41+
var result []byte
42+
43+
err := client.QuerySingleJSON(
44+
ctx,
45+
selectScalarCmd,
46+
&result,
47+
)
48+
if err != nil {
49+
return nil, err
50+
}
51+
52+
return result, nil
53+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
CREATE MIGRATION m1fqtauhtvc2w56wh2676x5g26aye22ghx7b7mtnbfekxpmxmnjx2a
2+
ONTO initial
3+
{
4+
CREATE TYPE default::Person {
5+
CREATE MULTI LINK friends -> default::Person {
6+
CREATE PROPERTY strength -> std::float64;
7+
};
8+
CREATE REQUIRED PROPERTY name -> std::str {
9+
CREATE CONSTRAINT std::exclusive;
10+
};
11+
};
12+
};

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ go 1.18
44

55
require (
66
github.com/certifi/gocertifi v0.0.0-20210507211836-431795d63e8d
7+
github.com/pelletier/go-toml/v2 v2.1.0
78
github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3
89
github.com/stretchr/testify v1.8.4
910
github.com/xdg/scram v1.0.5

go.sum

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
github.com/certifi/gocertifi v0.0.0-20210507211836-431795d63e8d h1:S2NE3iHSwP0XV47EEXL8mWmRdEfGscSJ+7EgePNgt0s=
22
github.com/certifi/gocertifi v0.0.0-20210507211836-431795d63e8d/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA=
33
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
4+
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
45
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
56
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
67
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
@@ -9,10 +10,17 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
910
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
1011
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
1112
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
13+
github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4=
14+
github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
1215
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
1316
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
1417
github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3 h1:aQKxg3+2p+IFXXg97McgDGT5zcMrQoi0EICZs8Pgchs=
1518
github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3/go.mod h1:9/etS5gpQq9BJsJMWg1wpLbfuSnkm8dPF6FdW2JXVhA=
19+
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
20+
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
21+
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
22+
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
23+
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
1624
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
1725
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
1826
github.com/xdg/scram v1.0.5 h1:TuS0RFmt5Is5qm9Tm2SoD89OPqe4IRiFtyFY4iwWXsw=
@@ -35,5 +43,6 @@ golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc=
3543
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
3644
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
3745
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
46+
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
3847
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
3948
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

0 commit comments

Comments
 (0)