Project, Task and Time management
// Code generated by sqlc. DO NOT EDIT.
// versions:
//   sqlc v1.28.0
// source: projects.sql

package database

import (
	"context"
	"database/sql"
)

const projectDetail = `-- name: ProjectDetail :one
select id, name, description, parent_id, planned_for, start_at, due_at, completed_at FROM projects WHERE id = ?
`

type ProjectDetailRow struct {
	ID          int64
	Name        string
	Description sql.NullString
	ParentID    sql.NullInt64
	PlannedFor  sql.NullTime
	StartAt     sql.NullTime
	DueAt       sql.NullTime
	CompletedAt sql.NullTime
}

func (q *Queries) ProjectDetail(ctx context.Context, id int64) (ProjectDetailRow, error) {
	row := q.db.QueryRowContext(ctx, projectDetail, id)
	var i ProjectDetailRow
	err := row.Scan(
		&i.ID,
		&i.Name,
		&i.Description,
		&i.ParentID,
		&i.PlannedFor,
		&i.StartAt,
		&i.DueAt,
		&i.CompletedAt,
	)
	return i, err
}

const projectName = `-- name: ProjectName :one
SELECT name FROM projects WHERE id = ?
`

func (q *Queries) ProjectName(ctx context.Context, id int64) (string, error) {
	row := q.db.QueryRowContext(ctx, projectName, id)
	var name string
	err := row.Scan(&name)
	return name, err
}

const projectShort = `-- name: ProjectShort :one
SELECT id, name, parent_id FROM projects WHERE id = ?
`

type ProjectShortRow struct {
	ID       int64
	Name     string
	ParentID sql.NullInt64
}

func (q *Queries) ProjectShort(ctx context.Context, id int64) (ProjectShortRow, error) {
	row := q.db.QueryRowContext(ctx, projectShort, id)
	var i ProjectShortRow
	err := row.Scan(&i.ID, &i.Name, &i.ParentID)
	return i, err
}

const recProjectName = `-- name: RecProjectName :one
WITH RECURSIVE rec_project_name(id, name) AS (
    SELECT id, name FROM projects WHERE parent_id IS NULL
    UNION ALL
    SELECT projects.id, rec_project_name.name||' > '||projects.name FROM projects JOIN rec_project_name ON projects.parent_id = rec_project_name.id
) SELECT name FROM rec_project_name WHERE projects.id = ?
`

func (q *Queries) RecProjectName(ctx context.Context, id int64) (string, error) {
	row := q.db.QueryRowContext(ctx, recProjectName, id)
	var name string
	err := row.Scan(&name)
	return name, err
}