Skip to content

Support for custom models #755

@mlukasik-dev

Description

@mlukasik-dev

Example:

db/queries/roles.sql

-- name: ListRolesWithPermissions :many
-- model: Roles
-- path: internal/domain/roles
SELECT
  r.role_id,
  r.display_name,
  r.description,
  array_agg(permissions.method)::text[] AS permissions
  FROM roles r
    LEFT JOIN permissions USING (role_id)
GROUP BY r.role_id;

-- name ListRoles :many
-- model: Roles
-- path: internal/domain/roles
SELECT  role_id, display_name, description FROM roles; /* returned colums exists in the model so we can reuse it */

It isn't generated file!
internal/domain/roles

type Role struct {
	RoleID      uuid.UUID // here we can add some custom struct tags and methods
	DisplayName string
	Description string
	Permissions []sql.NullString // using []string throws an error if an array is empty 
}

Generated method

func (q *Queries) ListRoles(ctx context.Context) ([]roles.Role, error)

P.S. These features can be useful because with it we can both use sqlc and follow Clean Architecture. And reuse structs for tables for complex queries with joins.

So my question is if I'd correctly implement this functionality would you approve PR (I'm asking because this feature can be not in the spirit of the project)

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions