84 lines
2.2 KiB
SQL
84 lines
2.2 KiB
SQL
-- name: CreateCategory :one
|
|
INSERT INTO categories (
|
|
name,
|
|
icon,
|
|
description,
|
|
letter,
|
|
parent_id,
|
|
parent_path,
|
|
status,
|
|
sort
|
|
)
|
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
|
|
RETURNING *;
|
|
|
|
-- name: UpdateCategory :one
|
|
UPDATE categories
|
|
SET
|
|
name = COALESCE(sqlc.narg(name), name),
|
|
icon = COALESCE(sqlc.narg(icon), icon),
|
|
description = COALESCE(sqlc.narg(description), description),
|
|
letter = COALESCE(sqlc.narg(letter), letter),
|
|
parent_id = COALESCE(sqlc.narg(parent_id), parent_id),
|
|
parent_path = COALESCE(sqlc.narg(parent_path), parent_path),
|
|
sort = COALESCE(sqlc.narg(sort), sort),
|
|
status = COALESCE(sqlc.narg(status), status),
|
|
updated_at = NOW()
|
|
WHERE id = $1
|
|
RETURNING *;
|
|
|
|
-- name: GetCategory :one
|
|
SELECT *
|
|
FROM categories
|
|
WHERE id = $1
|
|
LIMIT 1;
|
|
|
|
-- name: ListCategories :many
|
|
SELECT * FROM categories
|
|
WHERE status = 0;
|
|
|
|
-- name: ListCategoriesByPath :many
|
|
SELECT * FROM categories
|
|
WHERE parent_path LIKE $1
|
|
AND status = 0
|
|
ORDER BY sort DESC, id ASC;
|
|
|
|
-- name: CountCategoriesCondition :one
|
|
SELECT COUNT(*) FROM categories
|
|
WHERE (NOT @is_status::Boolean OR status = @status)
|
|
AND (NOT @is_id::Boolean OR id = @id)
|
|
AND (NOT @is_parent_id::Boolean OR parent_id = @parent_id)
|
|
AND (@name::text = '' OR name ILIKE '%' || @name || '%');
|
|
|
|
-- name: ListCategoriesCondition :many
|
|
SELECT * FROM categories
|
|
WHERE (NOT @is_status::Boolean OR status = @status)
|
|
AND (NOT @is_id::Boolean OR id = @id)
|
|
AND (NOT @is_parent_id::Boolean OR parent_id = @parent_id)
|
|
AND (@name::text = '' OR name ILIKE '%' || @name || '%')
|
|
ORDER BY sort DESC, id ASC
|
|
OFFSET @skip
|
|
LIMIT @size;
|
|
|
|
-- name: AllCategories :many
|
|
SELECT * FROM categories
|
|
WHERE status = 0
|
|
ORDER BY sort DESC, id ASC;
|
|
|
|
-- name: ExistsCategories :one
|
|
SELECT EXISTS (
|
|
SELECT 1 FROM categories
|
|
);
|
|
|
|
-- name: ListCategoriesRecursive :many
|
|
WITH RECURSIVE dist AS (SELECT categories.*
|
|
FROM categories
|
|
WHERE status = 0
|
|
UNION ALL
|
|
SELECT categories.*
|
|
FROM categories,
|
|
dist
|
|
WHERE categories.id = dist.parent_id)
|
|
SELECT DISTINCT *
|
|
FROM dist
|
|
ORDER BY sort DESC, id ASC; |