diff --git a/internal/endtoend/testdata/inflection/mysql/go/models.go b/internal/endtoend/testdata/inflection/mysql/go/models.go index 2f2834125a..6e0255bb5c 100644 --- a/internal/endtoend/testdata/inflection/mysql/go/models.go +++ b/internal/endtoend/testdata/inflection/mysql/go/models.go @@ -8,6 +8,10 @@ type Campus struct { ID string } +type ProductMetum struct { + ID string +} + type Student struct { ID string } diff --git a/internal/endtoend/testdata/inflection/mysql/go/query.sql.go b/internal/endtoend/testdata/inflection/mysql/go/query.sql.go index da0a3338f5..897f51025b 100644 --- a/internal/endtoend/testdata/inflection/mysql/go/query.sql.go +++ b/internal/endtoend/testdata/inflection/mysql/go/query.sql.go @@ -34,6 +34,33 @@ func (q *Queries) ListCampuses(ctx context.Context) ([]string, error) { return items, nil } +const listMetadata = `-- name: ListMetadata :many +SELECT id FROM product_meta +` + +func (q *Queries) ListMetadata(ctx context.Context) ([]string, error) { + rows, err := q.db.QueryContext(ctx, listMetadata) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var id string + if err := rows.Scan(&id); err != nil { + return nil, err + } + items = append(items, id) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + const listStudents = `-- name: ListStudents :many SELECT id FROM students ` diff --git a/internal/endtoend/testdata/inflection/mysql/query.sql b/internal/endtoend/testdata/inflection/mysql/query.sql index 2b98c07785..23f1cb26d9 100644 --- a/internal/endtoend/testdata/inflection/mysql/query.sql +++ b/internal/endtoend/testdata/inflection/mysql/query.sql @@ -1,8 +1,12 @@ CREATE TABLE campus (id text not null); CREATE TABLE students (id text not null); +CREATE TABLE product_meta (id text not null); /* name: ListCampuses :many */ SELECT * FROM campus; /* name: ListStudents :many */ SELECT * FROM students; + +/* name: ListMetadata :many */ +SELECT * FROM product_meta; diff --git a/internal/endtoend/testdata/inflection/postgresql/pgx/go/models.go b/internal/endtoend/testdata/inflection/postgresql/pgx/go/models.go index 2f2834125a..6e0255bb5c 100644 --- a/internal/endtoend/testdata/inflection/postgresql/pgx/go/models.go +++ b/internal/endtoend/testdata/inflection/postgresql/pgx/go/models.go @@ -8,6 +8,10 @@ type Campus struct { ID string } +type ProductMetum struct { + ID string +} + type Student struct { ID string } diff --git a/internal/endtoend/testdata/inflection/postgresql/pgx/go/query.sql.go b/internal/endtoend/testdata/inflection/postgresql/pgx/go/query.sql.go index d706dd5a28..400075750a 100644 --- a/internal/endtoend/testdata/inflection/postgresql/pgx/go/query.sql.go +++ b/internal/endtoend/testdata/inflection/postgresql/pgx/go/query.sql.go @@ -31,6 +31,30 @@ func (q *Queries) ListCampuses(ctx context.Context) ([]string, error) { return items, nil } +const listMetadata = `-- name: ListMetadata :many +SELECT id FROM product_meta +` + +func (q *Queries) ListMetadata(ctx context.Context) ([]string, error) { + rows, err := q.db.Query(ctx, listMetadata) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var id string + if err := rows.Scan(&id); err != nil { + return nil, err + } + items = append(items, id) + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + const listStudents = `-- name: ListStudents :many SELECT id FROM students ` diff --git a/internal/endtoend/testdata/inflection/postgresql/pgx/query.sql b/internal/endtoend/testdata/inflection/postgresql/pgx/query.sql index d88250fdf6..0971c2d229 100644 --- a/internal/endtoend/testdata/inflection/postgresql/pgx/query.sql +++ b/internal/endtoend/testdata/inflection/postgresql/pgx/query.sql @@ -1,8 +1,12 @@ CREATE TABLE campus (id text not null); CREATE TABLE students (id text not null); +CREATE TABLE product_meta (id text not null); -- name: ListCampuses :many SELECT * FROM campus; -- name: ListStudents :many SELECT * FROM students; + +-- name: ListMetadata :many +SELECT * FROM product_meta; diff --git a/internal/endtoend/testdata/inflection/postgresql/stdlib/go/models.go b/internal/endtoend/testdata/inflection/postgresql/stdlib/go/models.go index 2f2834125a..6e0255bb5c 100644 --- a/internal/endtoend/testdata/inflection/postgresql/stdlib/go/models.go +++ b/internal/endtoend/testdata/inflection/postgresql/stdlib/go/models.go @@ -8,6 +8,10 @@ type Campus struct { ID string } +type ProductMetum struct { + ID string +} + type Student struct { ID string } diff --git a/internal/endtoend/testdata/inflection/postgresql/stdlib/go/query.sql.go b/internal/endtoend/testdata/inflection/postgresql/stdlib/go/query.sql.go index da0a3338f5..897f51025b 100644 --- a/internal/endtoend/testdata/inflection/postgresql/stdlib/go/query.sql.go +++ b/internal/endtoend/testdata/inflection/postgresql/stdlib/go/query.sql.go @@ -34,6 +34,33 @@ func (q *Queries) ListCampuses(ctx context.Context) ([]string, error) { return items, nil } +const listMetadata = `-- name: ListMetadata :many +SELECT id FROM product_meta +` + +func (q *Queries) ListMetadata(ctx context.Context) ([]string, error) { + rows, err := q.db.QueryContext(ctx, listMetadata) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var id string + if err := rows.Scan(&id); err != nil { + return nil, err + } + items = append(items, id) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + const listStudents = `-- name: ListStudents :many SELECT id FROM students ` diff --git a/internal/endtoend/testdata/inflection/postgresql/stdlib/query.sql b/internal/endtoend/testdata/inflection/postgresql/stdlib/query.sql index d88250fdf6..0971c2d229 100644 --- a/internal/endtoend/testdata/inflection/postgresql/stdlib/query.sql +++ b/internal/endtoend/testdata/inflection/postgresql/stdlib/query.sql @@ -1,8 +1,12 @@ CREATE TABLE campus (id text not null); CREATE TABLE students (id text not null); +CREATE TABLE product_meta (id text not null); -- name: ListCampuses :many SELECT * FROM campus; -- name: ListStudents :many SELECT * FROM students; + +-- name: ListMetadata :many +SELECT * FROM product_meta; diff --git a/internal/inflection/singular.go b/internal/inflection/singular.go index cc501764d0..b2adf90103 100644 --- a/internal/inflection/singular.go +++ b/internal/inflection/singular.go @@ -14,5 +14,12 @@ func Singular(name string) string { if strings.ToLower(name) == "campus" { return name } + // Manual fix for incorrect handling of "meta" + // + // https://github.com/kyleconroy/sqlc/issues/1217 + // https://github.com/jinzhu/inflection/issues/21 + if strings.ToLower(name) == "meta" { + return name + } return upstream.Singular(name) }