Skip to content

Commit dbdc5ba

Browse files
committed
Quick cleanup
1 parent 53094f5 commit dbdc5ba

11 files changed

Lines changed: 44 additions & 45 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ devenv.local.nix
99
.pre-commit-config.yaml
1010

1111
coverage.*
12+
*.test
1213
bin/
1314
codegen/test/
1415

Readme.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,9 @@ user.Save(db)
104104

105105
## Status
106106

107-
This repository is currently a WIP, features are still not complete and may likely change
107+
This repository is currently a WIP, features are still not complete and may likely change.
108+
109+
Also the current SQL Parser being based on CockroachDB, some postgres specific syntax may be not supported.
108110

109111
**Roadmap**:
110112
* [x] Handle custom user queries
@@ -113,5 +115,15 @@ This repository is currently a WIP, features are still not complete and may like
113115
* [ ] Support more types and custom types (cf ulid, ...)
114116
* [ ] Support more driver and database Mysql/MariaDB/Sqlite3
115117
* [x] For postgres support both `pq + sqlc` or `pgx`
118+
* [ ] For Mysql/MariaDB `go-sql-driver`
119+
* [ ] For Sqlite ``
120+
* [ ] Support easier logging and profiling
121+
* [ ] Support for Listen/Notify on pgx
122+
* [ ] Support DB Introspection to automatically extract schema from running database
123+
* [ ] Write Documentation
124+
* [ ] Pick a static doc generator website
125+
* [ ] Setup
116126
* [ ] Write benchmark to compare performance with existing Golang ORM
117127
* [x] Wrote basic comparison (insert, bulk insert, select)
128+
* [ ] Add more use cases (select with lot of data, upsert, complex query with joins)
129+
* [ ] Generate diagrams out of benchmark data
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,10 @@ func parseMigrationFolder(folderName string) string {
172172
return strings.Join(sql, "\n")
173173
}
174174

175-
var parseGooseMetaUp = regexp.MustCompile(`-- \+goose Up`)
176-
var parseGooseMetaDown = regexp.MustCompile(`-- \+goose Down`)
175+
var (
176+
parseGooseMetaUp = regexp.MustCompile(`-- \+goose Up`)
177+
parseGooseMetaDown = regexp.MustCompile(`-- \+goose Down`)
178+
)
177179

178180
func parseMigrationFile(content string) string {
179181
up := parseGooseMetaUp.FindStringIndex(content)

internal/parser.go

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,10 @@ func ParseSchema(sql string) (*core.SQLSchema, error) {
6666

6767
w := &walk.AstWalker{
6868
Fn: func(ctx interface{}, node interface{}) (stop bool) {
69-
// log.Printf("node type %T", node)
7069
switch stmt := node.(type) {
7170
case *tree.CreateTable:
7271
parseTable(schema, stmt)
7372
case *tree.CreateIndex:
74-
// fmt.Println("index name: ", stmt.Name)
7573
refTable := schema.Tables[stmt.Table.TableName.Normalize()]
7674
if stmt.Unique {
7775
refTable.Constraints = append(refTable.Constraints, &core.SQLTableConstraint{
@@ -177,35 +175,26 @@ func findTableDeps(schema *core.SQLSchema, table *tree.SelectClause, macro []cor
177175
case *tree.Subquery:
178176
case *tree.ParenSelect:
179177
walk(ctx, s.Select)
180-
// fmt.Printf("FindSelect %T %s\n", s, s)
181178
case *tree.Select:
182179
walk(ctx, s.Select)
183180
case *tree.TableName:
184181
ctx.tables = append(ctx.tables, s.TableName.Normalize())
185-
// fmt.Printf("FindTableName %T %s\n", s, s)
186182
case *tree.AliasedTableExpr:
187183
subCtx := &FindTableDepsCtx{}
188184
walk(subCtx, s.Expr)
189-
// fmt.Printf("FindAliasedTableExpr %T %s (%s|%s|%s)\n", s, s, s.Expr, s.As, subCtx.tables)
190185
ctx.tables = append(ctx.tables, subCtx.tables...)
191186
ctx.Tables = append(ctx.Tables, core.TableDeps{
192187
Names: subCtx.tables,
193188
As: s.As.Alias.Normalize(),
194189
})
195190
case *tree.JoinTableExpr:
196-
// fmt.Printf("FindJoinTableExpr %T %s (%s|%s|%s|%s)\n", s, s, s.JoinType, s.Left, s.Right, s.Cond)
197-
// fmt.Printf("> Left %T %s\n", s.Left, s.Left)
198-
// fmt.Printf("> Right %T %s\n", s.Right, s.Right)
199191
walk(ctx, s.Left)
200192
walk(ctx, s.Right)
201193
query.From = s.String()
202194
case *tree.Where:
203-
// fmt.Println("Where", s)
204195
if s != nil && s.Expr != nil {
205196
query.Where = s.Expr.String()
206197
}
207-
case *tree.GroupBy:
208-
// fmt.Println("GROUP BY", s)
209198
default:
210199
fmt.Printf("not supported : %T %s\n", s, s)
211200
}
@@ -456,9 +445,7 @@ func parseTable(schema *core.SQLSchema, stmt *tree.CreateTable) {
456445
}
457446

458447
func parseAlterTable(schema *core.SQLSchema, stmt *tree.AlterTable) {
459-
// fmt.Println("alter table")
460448
for _, cmd := range stmt.Cmds {
461-
// fmt.Println("cmd type: ", cmd)
462449
switch cmd := cmd.(type) {
463450
case *tree.AlterTableDropColumn:
464451
refTable := schema.Tables[stmt.Table.ToTableName().TableName.Normalize()]
@@ -520,7 +507,6 @@ func parseAlterTable(schema *core.SQLSchema, stmt *tree.AlterTable) {
520507
TableColumns: NameListToStrings(fk.ToCols),
521508
})
522509
}
523-
524510
}
525511
}
526512
}

internal/parser_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ func TestParseTableCreate(t *testing.T) {
1515
`)
1616
assert.NoError(t, err)
1717

18-
//table
18+
// table
1919
assert.Equal(t, 1, len(schema.Tables))
2020
assert.Equal(t, "orders", schema.Tables["orders"].Name)
2121

internal/postgres/filters.go

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,26 @@ import (
55
"strings"
66
)
77

8+
const (
9+
FilterNumericField = "FilterNumericField"
10+
FilterStringField = "FilterStringField"
11+
FilterArrayField = "FilterArrayField"
12+
FilterGenericField = "FilterGenericField"
13+
)
14+
815
func GetNormalizedTypeFilter(col *PostgresColumn) string {
9-
// fmt.Println(col.Type, col.TypeSql)
1016
if strings.HasPrefix(col.Type, "[]") {
11-
return "FilterArrayField"
17+
return FilterArrayField
1218
} else if strings.Contains(strings.ToLower(col.Type), "string") {
13-
return "FilterStringField"
19+
return FilterStringField
1420
} else if strings.Contains(strings.ToLower(col.Type), "int") {
15-
return "FilterNumericField"
21+
return FilterNumericField
1622
} else if strings.Contains(strings.ToLower(col.Type), "float") {
17-
return "FilterNumericField"
23+
return FilterNumericField
1824
} else if strings.Contains(strings.ToLower(col.Type), "time") {
19-
return "FilterNumericField"
25+
return FilterNumericField
2026
}
21-
return "FilterGenericField"
27+
return FilterGenericField
2228
}
2329

2430
func (table *PostgresTable) GetFieldFilters() []SelectFieldFilter {

internal/postgres/postgres.go

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,6 @@ func Generate(schema *core.SQLSchema, contents io.Writer, pkg string, driver str
4848
return err
4949
}
5050

51-
// relationsTmpl, err := template.ParseFS(templates, "templates/relations.tmpl")
52-
// if err != nil {
53-
// return err
54-
// }
55-
5651
customQueriesTmpl, err := template.ParseFS(templates, "templates/custom.tmpl")
5752
if err != nil {
5853
return err
@@ -343,11 +338,11 @@ func (table *PostgresTable) HasUpdateExtraUpdated() bool {
343338
}
344339

345340
func (table *PostgresTable) GetTableName() string {
346-
return fmt.Sprintf("%sTable", strcase.ToLowerCamel(plural.Singular(table.Name)))
341+
return strcase.ToLowerCamel(plural.Singular(table.Name)) + "Table"
347342
}
348343

349344
func (table *PostgresTable) GetCreateSqlName() string {
350-
return fmt.Sprintf("%sCreateSql", strcase.ToLowerCamel(plural.Singular(table.Name)))
345+
return strcase.ToLowerCamel(plural.Singular(table.Name)) + "CreateSql"
351346
}
352347

353348
func (table *PostgresTable) GetCreateSqlContent() string {
@@ -383,7 +378,7 @@ func (table *PostgresTable) GetCreateSqlContent() string {
383378
}
384379

385380
func (table *PostgresTable) GetCreateManySqlName() string {
386-
return fmt.Sprintf("%sCreateManySql", strcase.ToLowerCamel(plural.Singular(table.Name)))
381+
return strcase.ToLowerCamel(plural.Singular(table.Name)) + "CreateManySql"
387382
}
388383

389384
func (table *PostgresTable) GetCreateManySqlContent() string {
@@ -470,7 +465,7 @@ func (table *PostgresTable) GetUpsertSqlContent() string {
470465
}
471466

472467
func (table *PostgresTable) GetUpsertManySqlName() string {
473-
return fmt.Sprintf("%sUpsertManySql", strcase.ToLowerCamel(plural.Singular(table.Name)))
468+
return strcase.ToLowerCamel(plural.Singular(table.Name)) + "UpsertManySql"
474469
}
475470

476471
func (table *PostgresTable) GetUpsertManySqlContent() string {

justfile

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
build:
2-
go build -ldflags="-s -w" -o bin/mangosql ./cmd/mangosql
3-
4-
bench:
5-
go test -bench=. -benchtime=1s -benchmem ./tests/bench
2+
CGO_ENABLED=0 go build -ldflags="-s -w" -o bin/mangosql ./cmd/mangosql
63

74
format:
85
golangci-lint run --fix ./...
@@ -12,7 +9,7 @@ lint:
129

1310
generate:
1411
# tests
15-
go run ./cmd/mangosql/ --output ./tests/postgres/pgx/client.go --package main ./tests/postgres/pgx/schema.sql
12+
go run ./cmd/mangosql/ --output ./tests/postgres/pgx_driver/client.go --package main ./tests/postgres/pgx_driver/schema.sql
1613
go run ./cmd/mangosql/ --output ./tests/postgres/overview/client.go --package overview ./tests/postgres/overview/schema.sql
1714
go run ./cmd/mangosql/ --output ./tests/postgres/auto-increment/client.go --package autoincrement ./tests/postgres/auto-increment/schema.sql
1815
go run ./cmd/mangosql/ --output ./tests/postgres/composite/client.go --package composite ./tests/postgres/composite/schema.sql
@@ -26,8 +23,11 @@ generate:
2623
go run ./cmd/mangosql/ --output ./tests/bench/pq/client.go --package pq --driver pq ./tests/bench/schema.sql
2724
go run ./cmd/mangosql/ --output ./tests/bench/pgx/client.go --package pgx ./tests/bench/schema.sql
2825

26+
bench:
27+
CGO_ENABLED=0 go test -c -bench=. -benchtime=1s -benchmem ./tests/bench
28+
2929
test: generate
30-
go test --cover --coverprofile=coverage.txt ./...
30+
go test -race --cover --coverprofile=coverage.txt ./...
3131
go tool cover -html=coverage.txt -o coverage.html
3232
gocover-cobertura < coverage.txt > coverage.xml
3333

tests/bench/insert_test.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@ func newBenchmarkDBPQ(t *testing.B) (*driver_pq.DBClient, func()) {
3333
func newBenchmarkDBPGX(t *testing.B) (*driver_pgx.DBClient, func()) {
3434
t.Helper()
3535
config := helpers.NewDBBenchConfig(t)
36-
// db, err := sqlx.Connect("pgx", config.URL())
37-
3836
db, err := pgx.Connect(context.Background(), config.URL())
3937
if err != nil {
4038
panic(err)
@@ -75,7 +73,7 @@ type User struct {
7573
}
7674

7775
func benchmarkInsertOne(t *testing.B) {
78-
db, close := newBenchmarkDBPQ(t)
76+
dbPq, close := newBenchmarkDBPQ(t)
7977
defer close()
8078
dbPgx, closePgx := newBenchmarkDBPGX(t)
8179
defer closePgx()
@@ -84,7 +82,7 @@ func benchmarkInsertOne(t *testing.B) {
8482

8583
t.Run("Insert One - Mango PQ", func(t *testing.B) {
8684
for i := 0; i < t.N; i++ {
87-
_, err := db.User.Insert(driver_pq.UserCreate{Name: "John Doe", Email: "john@email.com"})
85+
_, err := dbPq.User.Insert(driver_pq.UserCreate{Name: "John Doe", Email: "john@email.com"})
8886
assert.NoError(t, err)
8987
}
9088
})
@@ -215,7 +213,6 @@ func benchmarkSelect(t *testing.B) {
215213
}
216214
}
217215
})
218-
219216
}
220217

221218
func Benchmark(t *testing.B) {

0 commit comments

Comments
 (0)