owpengram-server/internal/store/postgres/sqlcgen/media.sql.go
2026-08-04 23:09:11 +03:00

1585 lines
38 KiB
Go

// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.31.1
// source: media.sql
package sqlcgen
import (
"context"
"github.com/jackc/pgx/v5/pgtype"
)
const addProfilePhoto = `-- name: AddProfilePhoto :exec
INSERT INTO profile_photos (owner_peer_type, owner_peer_id, photo_id, date, active, sort_order)
VALUES (
$1::text,
$2::bigint,
$3::bigint,
$4::int,
true,
$5::bigint
)
ON CONFLICT (owner_peer_type, owner_peer_id, photo_id) DO UPDATE SET
date = EXCLUDED.date,
active = true,
sort_order = EXCLUDED.sort_order
`
type AddProfilePhotoParams struct {
OwnerPeerType string
OwnerPeerID int64
PhotoID int64
Date int32
SortOrder int64
}
// profile_photos --------------------------------------------------------------
func (q *Queries) AddProfilePhoto(ctx context.Context, arg AddProfilePhotoParams) error {
_, err := q.db.Exec(ctx, addProfilePhoto,
arg.OwnerPeerType,
arg.OwnerPeerID,
arg.PhotoID,
arg.Date,
arg.SortOrder,
)
return err
}
const clearDocumentOrphan = `-- name: ClearDocumentOrphan :exec
UPDATE documents SET orphaned_at = NULL
WHERE id = $1::bigint AND orphaned_at IS NOT NULL
`
func (q *Queries) ClearDocumentOrphan(ctx context.Context, mediaID int64) error {
_, err := q.db.Exec(ctx, clearDocumentOrphan, mediaID)
return err
}
const clearPhotoOrphan = `-- name: ClearPhotoOrphan :exec
UPDATE photos SET orphaned_at = NULL
WHERE id = $1::bigint AND orphaned_at IS NOT NULL
`
func (q *Queries) ClearPhotoOrphan(ctx context.Context, mediaID int64) error {
_, err := q.db.Exec(ctx, clearPhotoOrphan, mediaID)
return err
}
const countAvailableReactions = `-- name: CountAvailableReactions :one
SELECT count(*)::int AS total FROM available_reactions
`
func (q *Queries) CountAvailableReactions(ctx context.Context) (int32, error) {
row := q.db.QueryRow(ctx, countAvailableReactions)
var total int32
err := row.Scan(&total)
return total, err
}
const countFileBlobRefs = `-- name: CountFileBlobRefs :one
SELECT COUNT(*)::int FROM file_blobs WHERE backend = $1::text AND object_key = $2::text
`
type CountFileBlobRefsParams struct {
Backend string
ObjectKey string
}
func (q *Queries) CountFileBlobRefs(ctx context.Context, arg CountFileBlobRefsParams) (int32, error) {
row := q.db.QueryRow(ctx, countFileBlobRefs, arg.Backend, arg.ObjectKey)
var column_1 int32
err := row.Scan(&column_1)
return column_1, err
}
const countProfilePhotos = `-- name: CountProfilePhotos :one
SELECT count(*)::int AS total
FROM profile_photos
WHERE owner_peer_type = $1::text
AND owner_peer_id = $2::bigint
AND active
`
type CountProfilePhotosParams struct {
OwnerPeerType string
OwnerPeerID int64
}
func (q *Queries) CountProfilePhotos(ctx context.Context, arg CountProfilePhotosParams) (int32, error) {
row := q.db.QueryRow(ctx, countProfilePhotos, arg.OwnerPeerType, arg.OwnerPeerID)
var total int32
err := row.Scan(&total)
return total, err
}
const countStickerSets = `-- name: CountStickerSets :one
SELECT count(*)::int AS total FROM sticker_sets
`
func (q *Queries) CountStickerSets(ctx context.Context) (int32, error) {
row := q.db.QueryRow(ctx, countStickerSets)
var total int32
err := row.Scan(&total)
return total, err
}
const currentProfilePhoto = `-- name: CurrentProfilePhoto :one
SELECT photo_id
FROM profile_photos
WHERE owner_peer_type = $1::text
AND owner_peer_id = $2::bigint
AND active
ORDER BY sort_order DESC
LIMIT 1
`
type CurrentProfilePhotoParams struct {
OwnerPeerType string
OwnerPeerID int64
}
func (q *Queries) CurrentProfilePhoto(ctx context.Context, arg CurrentProfilePhotoParams) (int64, error) {
row := q.db.QueryRow(ctx, currentProfilePhoto, arg.OwnerPeerType, arg.OwnerPeerID)
var photo_id int64
err := row.Scan(&photo_id)
return photo_id, err
}
const currentProfilePhotosForOwners = `-- name: CurrentProfilePhotosForOwners :many
SELECT DISTINCT ON (pp.owner_peer_id)
pp.owner_peer_id,
pp.photo_id,
ph.dc_id,
ph.sizes::text AS sizes_json
FROM profile_photos pp
JOIN photos ph ON ph.id = pp.photo_id
WHERE pp.owner_peer_type = $1::text
AND pp.owner_peer_id = ANY($2::bigint[])
AND pp.active
ORDER BY pp.owner_peer_id, pp.sort_order DESC
`
type CurrentProfilePhotosForOwnersParams struct {
OwnerPeerType string
OwnerIds []int64
}
type CurrentProfilePhotosForOwnersRow struct {
OwnerPeerID int64
PhotoID int64
DcID int32
SizesJson string
}
func (q *Queries) CurrentProfilePhotosForOwners(ctx context.Context, arg CurrentProfilePhotosForOwnersParams) ([]CurrentProfilePhotosForOwnersRow, error) {
rows, err := q.db.Query(ctx, currentProfilePhotosForOwners, arg.OwnerPeerType, arg.OwnerIds)
if err != nil {
return nil, err
}
defer rows.Close()
var items []CurrentProfilePhotosForOwnersRow
for rows.Next() {
var i CurrentProfilePhotosForOwnersRow
if err := rows.Scan(
&i.OwnerPeerID,
&i.PhotoID,
&i.DcID,
&i.SizesJson,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const deactivateProfilePhotos = `-- name: DeactivateProfilePhotos :many
UPDATE profile_photos
SET active = false
WHERE owner_peer_type = $1::text
AND owner_peer_id = $2::bigint
AND photo_id = ANY($3::bigint[])
AND active
RETURNING photo_id
`
type DeactivateProfilePhotosParams struct {
OwnerPeerType string
OwnerPeerID int64
PhotoIds []int64
}
func (q *Queries) DeactivateProfilePhotos(ctx context.Context, arg DeactivateProfilePhotosParams) ([]int64, error) {
rows, err := q.db.Query(ctx, deactivateProfilePhotos, arg.OwnerPeerType, arg.OwnerPeerID, arg.PhotoIds)
if err != nil {
return nil, err
}
defer rows.Close()
var items []int64
for rows.Next() {
var photo_id int64
if err := rows.Scan(&photo_id); err != nil {
return nil, err
}
items = append(items, photo_id)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const deleteDocumentRow = `-- name: DeleteDocumentRow :exec
DELETE FROM documents WHERE id = $1::bigint
`
func (q *Queries) DeleteDocumentRow(ctx context.Context, id int64) error {
_, err := q.db.Exec(ctx, deleteDocumentRow, id)
return err
}
const deleteExpiredUploadParts = `-- name: DeleteExpiredUploadParts :many
WITH doomed AS (
SELECT owner_user_id, file_id, part
FROM upload_parts
WHERE created_at < $1::timestamptz
ORDER BY created_at ASC
LIMIT $2::int
)
DELETE FROM upload_parts p
USING doomed d
WHERE p.owner_user_id = d.owner_user_id
AND p.file_id = d.file_id
AND p.part = d.part
RETURNING p.object_key
`
type DeleteExpiredUploadPartsParams struct {
Before pgtype.Timestamptz
BatchLimit int32
}
func (q *Queries) DeleteExpiredUploadParts(ctx context.Context, arg DeleteExpiredUploadPartsParams) ([]string, error) {
rows, err := q.db.Query(ctx, deleteExpiredUploadParts, arg.Before, arg.BatchLimit)
if err != nil {
return nil, err
}
defer rows.Close()
var items []string
for rows.Next() {
var object_key string
if err := rows.Scan(&object_key); err != nil {
return nil, err
}
items = append(items, object_key)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const deleteFileBlobRow = `-- name: DeleteFileBlobRow :exec
DELETE FROM file_blobs WHERE location_key = $1::text
`
func (q *Queries) DeleteFileBlobRow(ctx context.Context, locationKey string) error {
_, err := q.db.Exec(ctx, deleteFileBlobRow, locationKey)
return err
}
const deletePhotoRow = `-- name: DeletePhotoRow :exec
DELETE FROM photos WHERE id = $1::bigint
`
func (q *Queries) DeletePhotoRow(ctx context.Context, id int64) error {
_, err := q.db.Exec(ctx, deletePhotoRow, id)
return err
}
const deleteUploadParts = `-- name: DeleteUploadParts :many
DELETE FROM upload_parts
WHERE owner_user_id = $1::bigint
AND file_id = $2::bigint
RETURNING object_key
`
type DeleteUploadPartsParams struct {
OwnerUserID int64
FileID int64
}
func (q *Queries) DeleteUploadParts(ctx context.Context, arg DeleteUploadPartsParams) ([]string, error) {
rows, err := q.db.Query(ctx, deleteUploadParts, arg.OwnerUserID, arg.FileID)
if err != nil {
return nil, err
}
defer rows.Close()
var items []string
for rows.Next() {
var object_key string
if err := rows.Scan(&object_key); err != nil {
return nil, err
}
items = append(items, object_key)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const getDocument = `-- name: GetDocument :one
SELECT id, access_hash, file_reference, date, mime_type, size, dc_id,
attributes::text AS attributes_json,
thumbs::text AS thumbs_json,
owner_user_id
FROM documents
WHERE id = $1::bigint
`
type GetDocumentRow struct {
ID int64
AccessHash int64
FileReference []byte
Date int32
MimeType string
Size int64
DcID int32
AttributesJson string
ThumbsJson string
OwnerUserID int64
}
func (q *Queries) GetDocument(ctx context.Context, id int64) (GetDocumentRow, error) {
row := q.db.QueryRow(ctx, getDocument, id)
var i GetDocumentRow
err := row.Scan(
&i.ID,
&i.AccessHash,
&i.FileReference,
&i.Date,
&i.MimeType,
&i.Size,
&i.DcID,
&i.AttributesJson,
&i.ThumbsJson,
&i.OwnerUserID,
)
return i, err
}
const getDocuments = `-- name: GetDocuments :many
SELECT id, access_hash, file_reference, date, mime_type, size, dc_id,
attributes::text AS attributes_json,
thumbs::text AS thumbs_json,
owner_user_id
FROM documents
WHERE id = ANY($1::bigint[])
`
type GetDocumentsRow struct {
ID int64
AccessHash int64
FileReference []byte
Date int32
MimeType string
Size int64
DcID int32
AttributesJson string
ThumbsJson string
OwnerUserID int64
}
func (q *Queries) GetDocuments(ctx context.Context, ids []int64) ([]GetDocumentsRow, error) {
rows, err := q.db.Query(ctx, getDocuments, ids)
if err != nil {
return nil, err
}
defer rows.Close()
var items []GetDocumentsRow
for rows.Next() {
var i GetDocumentsRow
if err := rows.Scan(
&i.ID,
&i.AccessHash,
&i.FileReference,
&i.Date,
&i.MimeType,
&i.Size,
&i.DcID,
&i.AttributesJson,
&i.ThumbsJson,
&i.OwnerUserID,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const getFileBlob = `-- name: GetFileBlob :one
SELECT location_key, backend, object_key, size, sha256, mime_type
FROM file_blobs
WHERE location_key = $1::text
`
type GetFileBlobRow struct {
LocationKey string
Backend string
ObjectKey string
Size int64
Sha256 []byte
MimeType string
}
func (q *Queries) GetFileBlob(ctx context.Context, locationKey string) (GetFileBlobRow, error) {
row := q.db.QueryRow(ctx, getFileBlob, locationKey)
var i GetFileBlobRow
err := row.Scan(
&i.LocationKey,
&i.Backend,
&i.ObjectKey,
&i.Size,
&i.Sha256,
&i.MimeType,
)
return i, err
}
const getPhoto = `-- name: GetPhoto :one
SELECT id, access_hash, file_reference, date, dc_id, has_stickers,
sizes::text AS sizes_json,
owner_user_id
FROM photos
WHERE id = $1::bigint
`
type GetPhotoRow struct {
ID int64
AccessHash int64
FileReference []byte
Date int32
DcID int32
HasStickers bool
SizesJson string
OwnerUserID int64
}
func (q *Queries) GetPhoto(ctx context.Context, id int64) (GetPhotoRow, error) {
row := q.db.QueryRow(ctx, getPhoto, id)
var i GetPhotoRow
err := row.Scan(
&i.ID,
&i.AccessHash,
&i.FileReference,
&i.Date,
&i.DcID,
&i.HasStickers,
&i.SizesJson,
&i.OwnerUserID,
)
return i, err
}
const getStickerSetByID = `-- name: GetStickerSetByID :one
SELECT
id, access_hash, short_name, title, count, hash, set_kind,
official, animated, videos, emojis, masks, installed, archived, installed_date,
thumb_document_id, thumbs::text AS thumbs_json, thumb_dc_id, thumb_version,
document_ids::text AS document_ids_json, packs::text AS packs_json, sort_order, system_key
FROM sticker_sets
WHERE id = $1::bigint
`
type GetStickerSetByIDRow struct {
ID int64
AccessHash int64
ShortName string
Title string
Count int32
Hash int32
SetKind string
Official bool
Animated bool
Videos bool
Emojis bool
Masks bool
Installed bool
Archived bool
InstalledDate int32
ThumbDocumentID int64
ThumbsJson string
ThumbDcID int32
ThumbVersion int32
DocumentIdsJson string
PacksJson string
SortOrder int32
SystemKey string
}
func (q *Queries) GetStickerSetByID(ctx context.Context, id int64) (GetStickerSetByIDRow, error) {
row := q.db.QueryRow(ctx, getStickerSetByID, id)
var i GetStickerSetByIDRow
err := row.Scan(
&i.ID,
&i.AccessHash,
&i.ShortName,
&i.Title,
&i.Count,
&i.Hash,
&i.SetKind,
&i.Official,
&i.Animated,
&i.Videos,
&i.Emojis,
&i.Masks,
&i.Installed,
&i.Archived,
&i.InstalledDate,
&i.ThumbDocumentID,
&i.ThumbsJson,
&i.ThumbDcID,
&i.ThumbVersion,
&i.DocumentIdsJson,
&i.PacksJson,
&i.SortOrder,
&i.SystemKey,
)
return i, err
}
const getStickerSetByShortName = `-- name: GetStickerSetByShortName :one
SELECT
id, access_hash, short_name, title, count, hash, set_kind,
official, animated, videos, emojis, masks, installed, archived, installed_date,
thumb_document_id, thumbs::text AS thumbs_json, thumb_dc_id, thumb_version,
document_ids::text AS document_ids_json, packs::text AS packs_json, sort_order, system_key
FROM sticker_sets
WHERE short_name = $1::text
`
type GetStickerSetByShortNameRow struct {
ID int64
AccessHash int64
ShortName string
Title string
Count int32
Hash int32
SetKind string
Official bool
Animated bool
Videos bool
Emojis bool
Masks bool
Installed bool
Archived bool
InstalledDate int32
ThumbDocumentID int64
ThumbsJson string
ThumbDcID int32
ThumbVersion int32
DocumentIdsJson string
PacksJson string
SortOrder int32
SystemKey string
}
func (q *Queries) GetStickerSetByShortName(ctx context.Context, shortName string) (GetStickerSetByShortNameRow, error) {
row := q.db.QueryRow(ctx, getStickerSetByShortName, shortName)
var i GetStickerSetByShortNameRow
err := row.Scan(
&i.ID,
&i.AccessHash,
&i.ShortName,
&i.Title,
&i.Count,
&i.Hash,
&i.SetKind,
&i.Official,
&i.Animated,
&i.Videos,
&i.Emojis,
&i.Masks,
&i.Installed,
&i.Archived,
&i.InstalledDate,
&i.ThumbDocumentID,
&i.ThumbsJson,
&i.ThumbDcID,
&i.ThumbVersion,
&i.DocumentIdsJson,
&i.PacksJson,
&i.SortOrder,
&i.SystemKey,
)
return i, err
}
const getStickerSetBySystemKey = `-- name: GetStickerSetBySystemKey :one
SELECT
id, access_hash, short_name, title, count, hash, set_kind,
official, animated, videos, emojis, masks, installed, archived, installed_date,
thumb_document_id, thumbs::text AS thumbs_json, thumb_dc_id, thumb_version,
document_ids::text AS document_ids_json, packs::text AS packs_json, sort_order, system_key
FROM sticker_sets
WHERE system_key = $1::text
`
type GetStickerSetBySystemKeyRow struct {
ID int64
AccessHash int64
ShortName string
Title string
Count int32
Hash int32
SetKind string
Official bool
Animated bool
Videos bool
Emojis bool
Masks bool
Installed bool
Archived bool
InstalledDate int32
ThumbDocumentID int64
ThumbsJson string
ThumbDcID int32
ThumbVersion int32
DocumentIdsJson string
PacksJson string
SortOrder int32
SystemKey string
}
func (q *Queries) GetStickerSetBySystemKey(ctx context.Context, systemKey string) (GetStickerSetBySystemKeyRow, error) {
row := q.db.QueryRow(ctx, getStickerSetBySystemKey, systemKey)
var i GetStickerSetBySystemKeyRow
err := row.Scan(
&i.ID,
&i.AccessHash,
&i.ShortName,
&i.Title,
&i.Count,
&i.Hash,
&i.SetKind,
&i.Official,
&i.Animated,
&i.Videos,
&i.Emojis,
&i.Masks,
&i.Installed,
&i.Archived,
&i.InstalledDate,
&i.ThumbDocumentID,
&i.ThumbsJson,
&i.ThumbDcID,
&i.ThumbVersion,
&i.DocumentIdsJson,
&i.PacksJson,
&i.SortOrder,
&i.SystemKey,
)
return i, err
}
const getUploadPartSlot = `-- name: GetUploadPartSlot :one
SELECT
COALESCE((
SELECT size
FROM upload_parts
WHERE owner_user_id = $1::bigint
AND file_id = $2::bigint
AND part = $3::int
), -1)::bigint AS existing_bytes,
COALESCE((
SELECT object_key
FROM upload_parts
WHERE owner_user_id = $1::bigint
AND file_id = $2::bigint
AND part = $3::int
), '')::text AS object_key,
(
SELECT COUNT(*)::int
FROM upload_parts
WHERE owner_user_id = $1::bigint
AND file_id = $2::bigint
)::int AS file_parts
`
type GetUploadPartSlotParams struct {
OwnerUserID int64
FileID int64
Part int32
}
type GetUploadPartSlotRow struct {
ExistingBytes int64
ObjectKey string
FileParts int32
}
func (q *Queries) GetUploadPartSlot(ctx context.Context, arg GetUploadPartSlotParams) (GetUploadPartSlotRow, error) {
row := q.db.QueryRow(ctx, getUploadPartSlot, arg.OwnerUserID, arg.FileID, arg.Part)
var i GetUploadPartSlotRow
err := row.Scan(&i.ExistingBytes, &i.ObjectKey, &i.FileParts)
return i, err
}
const getUploadPartUsage = `-- name: GetUploadPartUsage :one
SELECT
COALESCE(SUM(size), 0)::bigint AS bytes,
COUNT(*)::int AS parts,
COUNT(DISTINCT file_id)::int AS files
FROM upload_parts
WHERE owner_user_id = $1::bigint
`
type GetUploadPartUsageRow struct {
Bytes int64
Parts int32
Files int32
}
func (q *Queries) GetUploadPartUsage(ctx context.Context, ownerUserID int64) (GetUploadPartUsageRow, error) {
row := q.db.QueryRow(ctx, getUploadPartUsage, ownerUserID)
var i GetUploadPartUsageRow
err := row.Scan(&i.Bytes, &i.Parts, &i.Files)
return i, err
}
const insertMediaReference = `-- name: InsertMediaReference :exec
INSERT INTO media_references (media_kind, media_id, ref_kind, ref_key)
VALUES ($1::text, $2::bigint, $3::text, $4::text)
ON CONFLICT DO NOTHING
`
type InsertMediaReferenceParams struct {
MediaKind string
MediaID int64
RefKind string
RefKey string
}
// media_references / storage retention -----------------------------------------
func (q *Queries) InsertMediaReference(ctx context.Context, arg InsertMediaReferenceParams) error {
_, err := q.db.Exec(ctx, insertMediaReference,
arg.MediaKind,
arg.MediaID,
arg.RefKind,
arg.RefKey,
)
return err
}
const listAvailableReactions = `-- name: ListAvailableReactions :many
SELECT
reaction, title, inactive, premium,
static_icon_id, appear_animation_id, select_animation_id,
activate_animation_id, effect_animation_id, around_animation_id, center_icon_id, sort_order
FROM available_reactions
ORDER BY sort_order ASC, reaction ASC
`
func (q *Queries) ListAvailableReactions(ctx context.Context) ([]AvailableReaction, error) {
rows, err := q.db.Query(ctx, listAvailableReactions)
if err != nil {
return nil, err
}
defer rows.Close()
var items []AvailableReaction
for rows.Next() {
var i AvailableReaction
if err := rows.Scan(
&i.Reaction,
&i.Title,
&i.Inactive,
&i.Premium,
&i.StaticIconID,
&i.AppearAnimationID,
&i.SelectAnimationID,
&i.ActivateAnimationID,
&i.EffectAnimationID,
&i.AroundAnimationID,
&i.CenterIconID,
&i.SortOrder,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const listFileBlobsByLocationPrefix = `-- name: ListFileBlobsByLocationPrefix :many
SELECT location_key, backend, object_key, size
FROM file_blobs
WHERE location_key = $1::text
OR location_key LIKE $2::text
`
type ListFileBlobsByLocationPrefixParams struct {
ExactKey string
PrefixPattern string
}
type ListFileBlobsByLocationPrefixRow struct {
LocationKey string
Backend string
ObjectKey string
Size int64
}
// Matches a media's main blob (exact_key, e.g. "doc:123") plus every
// variant keyed off it (prefix_pattern, e.g. "doc:123:%" for thumbnails /
// "photo:456:%" for each rendition size) -- a document/photo can own
// multiple file_blobs rows.
func (q *Queries) ListFileBlobsByLocationPrefix(ctx context.Context, arg ListFileBlobsByLocationPrefixParams) ([]ListFileBlobsByLocationPrefixRow, error) {
rows, err := q.db.Query(ctx, listFileBlobsByLocationPrefix, arg.ExactKey, arg.PrefixPattern)
if err != nil {
return nil, err
}
defer rows.Close()
var items []ListFileBlobsByLocationPrefixRow
for rows.Next() {
var i ListFileBlobsByLocationPrefixRow
if err := rows.Scan(
&i.LocationKey,
&i.Backend,
&i.ObjectKey,
&i.Size,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const listOrphanedDocumentIDsOlderThan = `-- name: ListOrphanedDocumentIDsOlderThan :many
SELECT id FROM documents
WHERE orphaned_at IS NOT NULL AND orphaned_at < $1::timestamptz
ORDER BY orphaned_at ASC
LIMIT $2::int
`
type ListOrphanedDocumentIDsOlderThanParams struct {
Cutoff pgtype.Timestamptz
BatchLimit int32
}
func (q *Queries) ListOrphanedDocumentIDsOlderThan(ctx context.Context, arg ListOrphanedDocumentIDsOlderThanParams) ([]int64, error) {
rows, err := q.db.Query(ctx, listOrphanedDocumentIDsOlderThan, arg.Cutoff, arg.BatchLimit)
if err != nil {
return nil, err
}
defer rows.Close()
var items []int64
for rows.Next() {
var id int64
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 listOrphanedPhotoIDsOlderThan = `-- name: ListOrphanedPhotoIDsOlderThan :many
SELECT id FROM photos
WHERE orphaned_at IS NOT NULL AND orphaned_at < $1::timestamptz
ORDER BY orphaned_at ASC
LIMIT $2::int
`
type ListOrphanedPhotoIDsOlderThanParams struct {
Cutoff pgtype.Timestamptz
BatchLimit int32
}
func (q *Queries) ListOrphanedPhotoIDsOlderThan(ctx context.Context, arg ListOrphanedPhotoIDsOlderThanParams) ([]int64, error) {
rows, err := q.db.Query(ctx, listOrphanedPhotoIDsOlderThan, arg.Cutoff, arg.BatchLimit)
if err != nil {
return nil, err
}
defer rows.Close()
var items []int64
for rows.Next() {
var id int64
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 listProfilePhotos = `-- name: ListProfilePhotos :many
SELECT photo_id
FROM profile_photos
WHERE owner_peer_type = $1::text
AND owner_peer_id = $2::bigint
AND active
AND ($3::bigint <= 0 OR photo_id < $3::bigint)
ORDER BY sort_order DESC
OFFSET $4::int
LIMIT $5::int
`
type ListProfilePhotosParams struct {
OwnerPeerType string
OwnerPeerID int64
MaxID int64
OffsetCount int32
LimitCount int32
}
func (q *Queries) ListProfilePhotos(ctx context.Context, arg ListProfilePhotosParams) ([]int64, error) {
rows, err := q.db.Query(ctx, listProfilePhotos,
arg.OwnerPeerType,
arg.OwnerPeerID,
arg.MaxID,
arg.OffsetCount,
arg.LimitCount,
)
if err != nil {
return nil, err
}
defer rows.Close()
var items []int64
for rows.Next() {
var photo_id int64
if err := rows.Scan(&photo_id); err != nil {
return nil, err
}
items = append(items, photo_id)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const listStickerSetsByKind = `-- name: ListStickerSetsByKind :many
SELECT
id, access_hash, short_name, title, count, hash, set_kind,
official, animated, videos, emojis, masks, installed, archived, installed_date,
thumb_document_id, thumbs::text AS thumbs_json, thumb_dc_id, thumb_version,
document_ids::text AS document_ids_json, packs::text AS packs_json, sort_order, system_key
FROM sticker_sets
WHERE set_kind = $1::text
ORDER BY sort_order ASC, id ASC
`
type ListStickerSetsByKindRow struct {
ID int64
AccessHash int64
ShortName string
Title string
Count int32
Hash int32
SetKind string
Official bool
Animated bool
Videos bool
Emojis bool
Masks bool
Installed bool
Archived bool
InstalledDate int32
ThumbDocumentID int64
ThumbsJson string
ThumbDcID int32
ThumbVersion int32
DocumentIdsJson string
PacksJson string
SortOrder int32
SystemKey string
}
func (q *Queries) ListStickerSetsByKind(ctx context.Context, setKind string) ([]ListStickerSetsByKindRow, error) {
rows, err := q.db.Query(ctx, listStickerSetsByKind, setKind)
if err != nil {
return nil, err
}
defer rows.Close()
var items []ListStickerSetsByKindRow
for rows.Next() {
var i ListStickerSetsByKindRow
if err := rows.Scan(
&i.ID,
&i.AccessHash,
&i.ShortName,
&i.Title,
&i.Count,
&i.Hash,
&i.SetKind,
&i.Official,
&i.Animated,
&i.Videos,
&i.Emojis,
&i.Masks,
&i.Installed,
&i.Archived,
&i.InstalledDate,
&i.ThumbDocumentID,
&i.ThumbsJson,
&i.ThumbDcID,
&i.ThumbVersion,
&i.DocumentIdsJson,
&i.PacksJson,
&i.SortOrder,
&i.SystemKey,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const listUploadParts = `-- name: ListUploadParts :many
SELECT part, total_parts, is_big, backend, object_key, size, sha256
FROM upload_parts
WHERE owner_user_id = $1::bigint
AND file_id = $2::bigint
ORDER BY part ASC
`
type ListUploadPartsParams struct {
OwnerUserID int64
FileID int64
}
type ListUploadPartsRow struct {
Part int32
TotalParts int32
IsBig bool
Backend string
ObjectKey string
Size int64
Sha256 []byte
}
func (q *Queries) ListUploadParts(ctx context.Context, arg ListUploadPartsParams) ([]ListUploadPartsRow, error) {
rows, err := q.db.Query(ctx, listUploadParts, arg.OwnerUserID, arg.FileID)
if err != nil {
return nil, err
}
defer rows.Close()
var items []ListUploadPartsRow
for rows.Next() {
var i ListUploadPartsRow
if err := rows.Scan(
&i.Part,
&i.TotalParts,
&i.IsBig,
&i.Backend,
&i.ObjectKey,
&i.Size,
&i.Sha256,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const nextProfilePhotoOrder = `-- name: NextProfilePhotoOrder :one
SELECT COALESCE(MAX(sort_order), 0)::bigint AS max_order
FROM profile_photos
WHERE owner_peer_type = $1::text
AND owner_peer_id = $2::bigint
`
type NextProfilePhotoOrderParams struct {
OwnerPeerType string
OwnerPeerID int64
}
func (q *Queries) NextProfilePhotoOrder(ctx context.Context, arg NextProfilePhotoOrderParams) (int64, error) {
row := q.db.QueryRow(ctx, nextProfilePhotoOrder, arg.OwnerPeerType, arg.OwnerPeerID)
var max_order int64
err := row.Scan(&max_order)
return max_order, err
}
const orphanDocumentIfUnreferenced = `-- name: OrphanDocumentIfUnreferenced :exec
UPDATE documents SET orphaned_at = now()
WHERE id = $1::bigint
AND orphaned_at IS NULL
AND NOT EXISTS (
SELECT 1 FROM media_references WHERE media_kind = 'document' AND media_id = $1::bigint
)
`
func (q *Queries) OrphanDocumentIfUnreferenced(ctx context.Context, mediaID int64) error {
_, err := q.db.Exec(ctx, orphanDocumentIfUnreferenced, mediaID)
return err
}
const orphanPhotoIfUnreferenced = `-- name: OrphanPhotoIfUnreferenced :exec
UPDATE photos SET orphaned_at = now()
WHERE id = $1::bigint
AND orphaned_at IS NULL
AND NOT EXISTS (
SELECT 1 FROM media_references WHERE media_kind = 'photo' AND media_id = $1::bigint
)
`
func (q *Queries) OrphanPhotoIfUnreferenced(ctx context.Context, mediaID int64) error {
_, err := q.db.Exec(ctx, orphanPhotoIfUnreferenced, mediaID)
return err
}
const putAvailableReaction = `-- name: PutAvailableReaction :exec
INSERT INTO available_reactions (
reaction, title, inactive, premium,
static_icon_id, appear_animation_id, select_animation_id,
activate_animation_id, effect_animation_id, around_animation_id, center_icon_id, sort_order
) VALUES (
$1::text,
$2::text,
$3::boolean,
$4::boolean,
$5::bigint,
$6::bigint,
$7::bigint,
$8::bigint,
$9::bigint,
$10::bigint,
$11::bigint,
$12::int
)
ON CONFLICT (reaction) DO UPDATE SET
title = EXCLUDED.title,
inactive = EXCLUDED.inactive,
premium = EXCLUDED.premium,
static_icon_id = EXCLUDED.static_icon_id,
appear_animation_id = EXCLUDED.appear_animation_id,
select_animation_id = EXCLUDED.select_animation_id,
activate_animation_id = EXCLUDED.activate_animation_id,
effect_animation_id = EXCLUDED.effect_animation_id,
around_animation_id = EXCLUDED.around_animation_id,
center_icon_id = EXCLUDED.center_icon_id,
sort_order = EXCLUDED.sort_order
`
type PutAvailableReactionParams struct {
Reaction string
Title string
Inactive bool
Premium bool
StaticIconID int64
AppearAnimationID int64
SelectAnimationID int64
ActivateAnimationID int64
EffectAnimationID int64
AroundAnimationID int64
CenterIconID int64
SortOrder int32
}
// available_reactions ---------------------------------------------------------
func (q *Queries) PutAvailableReaction(ctx context.Context, arg PutAvailableReactionParams) error {
_, err := q.db.Exec(ctx, putAvailableReaction,
arg.Reaction,
arg.Title,
arg.Inactive,
arg.Premium,
arg.StaticIconID,
arg.AppearAnimationID,
arg.SelectAnimationID,
arg.ActivateAnimationID,
arg.EffectAnimationID,
arg.AroundAnimationID,
arg.CenterIconID,
arg.SortOrder,
)
return err
}
const putDocument = `-- name: PutDocument :exec
INSERT INTO documents (id, access_hash, file_reference, date, mime_type, size, dc_id, attributes, thumbs, owner_user_id)
VALUES (
$1::bigint,
$2::bigint,
$3::bytea,
$4::int,
$5::text,
$6::bigint,
$7::int,
$8::jsonb,
$9::jsonb,
$10::bigint
)
ON CONFLICT (id) DO UPDATE SET
access_hash = EXCLUDED.access_hash,
file_reference = EXCLUDED.file_reference,
date = EXCLUDED.date,
mime_type = EXCLUDED.mime_type,
size = EXCLUDED.size,
dc_id = EXCLUDED.dc_id,
attributes = EXCLUDED.attributes,
thumbs = EXCLUDED.thumbs
`
type PutDocumentParams struct {
ID int64
AccessHash int64
FileReference []byte
Date int32
MimeType string
Size int64
DcID int32
AttributesJson []byte
ThumbsJson []byte
OwnerUserID int64
}
// documents -------------------------------------------------------------------
// owner_user_id is intentionally NOT in the UPDATE SET list: a document id is
// only ever (re-)upserted by its original uploader's own request replay, and
// keeping the first-write owner sticky avoids any risk of a later call
// (e.g. a forward re-touching the row) reassigning ownership.
func (q *Queries) PutDocument(ctx context.Context, arg PutDocumentParams) error {
_, err := q.db.Exec(ctx, putDocument,
arg.ID,
arg.AccessHash,
arg.FileReference,
arg.Date,
arg.MimeType,
arg.Size,
arg.DcID,
arg.AttributesJson,
arg.ThumbsJson,
arg.OwnerUserID,
)
return err
}
const putFileBlob = `-- name: PutFileBlob :exec
INSERT INTO file_blobs (location_key, backend, object_key, size, sha256, mime_type)
VALUES (
$1::text,
$2::text,
$3::text,
$4::bigint,
$5::bytea,
$6::text
)
ON CONFLICT (location_key) DO UPDATE SET
backend = EXCLUDED.backend,
object_key = EXCLUDED.object_key,
size = EXCLUDED.size,
sha256 = EXCLUDED.sha256,
mime_type = EXCLUDED.mime_type
`
type PutFileBlobParams struct {
LocationKey string
Backend string
ObjectKey string
Size int64
Sha256 []byte
MimeType string
}
// file_blobs ------------------------------------------------------------------
func (q *Queries) PutFileBlob(ctx context.Context, arg PutFileBlobParams) error {
_, err := q.db.Exec(ctx, putFileBlob,
arg.LocationKey,
arg.Backend,
arg.ObjectKey,
arg.Size,
arg.Sha256,
arg.MimeType,
)
return err
}
const putPhoto = `-- name: PutPhoto :exec
INSERT INTO photos (id, access_hash, file_reference, date, dc_id, has_stickers, sizes, owner_user_id)
VALUES (
$1::bigint,
$2::bigint,
$3::bytea,
$4::int,
$5::int,
$6::boolean,
$7::jsonb,
$8::bigint
)
ON CONFLICT (id) DO UPDATE SET
access_hash = EXCLUDED.access_hash,
file_reference = EXCLUDED.file_reference,
date = EXCLUDED.date,
dc_id = EXCLUDED.dc_id,
has_stickers = EXCLUDED.has_stickers,
sizes = EXCLUDED.sizes
`
type PutPhotoParams struct {
ID int64
AccessHash int64
FileReference []byte
Date int32
DcID int32
HasStickers bool
SizesJson []byte
OwnerUserID int64
}
// photos ----------------------------------------------------------------------
// owner_user_id intentionally not updated on conflict, see PutDocument.
func (q *Queries) PutPhoto(ctx context.Context, arg PutPhotoParams) error {
_, err := q.db.Exec(ctx, putPhoto,
arg.ID,
arg.AccessHash,
arg.FileReference,
arg.Date,
arg.DcID,
arg.HasStickers,
arg.SizesJson,
arg.OwnerUserID,
)
return err
}
const putStickerSet = `-- name: PutStickerSet :exec
INSERT INTO sticker_sets (
id, access_hash, short_name, title, count, hash, set_kind,
official, animated, videos, emojis, masks, installed, archived, installed_date,
thumb_document_id, thumbs, thumb_dc_id, thumb_version, document_ids, packs, sort_order, system_key
) VALUES (
$1::bigint,
$2::bigint,
$3::text,
$4::text,
$5::int,
$6::int,
$7::text,
$8::boolean,
$9::boolean,
$10::boolean,
$11::boolean,
$12::boolean,
$13::boolean,
$14::boolean,
$15::int,
$16::bigint,
$17::jsonb,
$18::int,
$19::int,
$20::jsonb,
$21::jsonb,
$22::int,
$23::text
)
ON CONFLICT (id) DO UPDATE SET
access_hash = EXCLUDED.access_hash,
short_name = EXCLUDED.short_name,
title = EXCLUDED.title,
count = EXCLUDED.count,
hash = EXCLUDED.hash,
set_kind = EXCLUDED.set_kind,
official = EXCLUDED.official,
animated = EXCLUDED.animated,
videos = EXCLUDED.videos,
emojis = EXCLUDED.emojis,
masks = EXCLUDED.masks,
installed = EXCLUDED.installed,
archived = EXCLUDED.archived,
installed_date = EXCLUDED.installed_date,
thumb_document_id = EXCLUDED.thumb_document_id,
thumbs = EXCLUDED.thumbs,
thumb_dc_id = EXCLUDED.thumb_dc_id,
thumb_version = EXCLUDED.thumb_version,
document_ids = EXCLUDED.document_ids,
packs = EXCLUDED.packs,
sort_order = EXCLUDED.sort_order,
system_key = EXCLUDED.system_key
`
type PutStickerSetParams struct {
ID int64
AccessHash int64
ShortName string
Title string
Count int32
Hash int32
SetKind string
Official bool
Animated bool
Videos bool
Emojis bool
Masks bool
Installed bool
Archived bool
InstalledDate int32
ThumbDocumentID int64
ThumbsJson []byte
ThumbDcID int32
ThumbVersion int32
DocumentIdsJson []byte
PacksJson []byte
SortOrder int32
SystemKey string
}
// sticker_sets ----------------------------------------------------------------
func (q *Queries) PutStickerSet(ctx context.Context, arg PutStickerSetParams) error {
_, err := q.db.Exec(ctx, putStickerSet,
arg.ID,
arg.AccessHash,
arg.ShortName,
arg.Title,
arg.Count,
arg.Hash,
arg.SetKind,
arg.Official,
arg.Animated,
arg.Videos,
arg.Emojis,
arg.Masks,
arg.Installed,
arg.Archived,
arg.InstalledDate,
arg.ThumbDocumentID,
arg.ThumbsJson,
arg.ThumbDcID,
arg.ThumbVersion,
arg.DocumentIdsJson,
arg.PacksJson,
arg.SortOrder,
arg.SystemKey,
)
return err
}
const removeMediaReference = `-- name: RemoveMediaReference :exec
DELETE FROM media_references
WHERE media_kind = $1::text
AND media_id = $2::bigint
AND ref_kind = $3::text
AND ref_key = $4::text
`
type RemoveMediaReferenceParams struct {
MediaKind string
MediaID int64
RefKind string
RefKey string
}
func (q *Queries) RemoveMediaReference(ctx context.Context, arg RemoveMediaReferenceParams) error {
_, err := q.db.Exec(ctx, removeMediaReference,
arg.MediaKind,
arg.MediaID,
arg.RefKind,
arg.RefKey,
)
return err
}
const saveUploadPart = `-- name: SaveUploadPart :exec
INSERT INTO upload_parts (owner_user_id, file_id, part, total_parts, is_big, backend, object_key, size, sha256)
VALUES (
$1::bigint,
$2::bigint,
$3::int,
$4::int,
$5::boolean,
$6::text,
$7::text,
$8::bigint,
$9::bytea
)
ON CONFLICT (owner_user_id, file_id, part) DO UPDATE SET
total_parts = EXCLUDED.total_parts,
is_big = EXCLUDED.is_big,
backend = EXCLUDED.backend,
object_key = EXCLUDED.object_key,
size = EXCLUDED.size,
sha256 = EXCLUDED.sha256,
created_at = now()
`
type SaveUploadPartParams struct {
OwnerUserID int64
FileID int64
Part int32
TotalParts int32
IsBig bool
Backend string
ObjectKey string
Size int64
Sha256 []byte
}
// upload_parts ----------------------------------------------------------------
func (q *Queries) SaveUploadPart(ctx context.Context, arg SaveUploadPartParams) error {
_, err := q.db.Exec(ctx, saveUploadPart,
arg.OwnerUserID,
arg.FileID,
arg.Part,
arg.TotalParts,
arg.IsBig,
arg.Backend,
arg.ObjectKey,
arg.Size,
arg.Sha256,
)
return err
}
const sumFileBlobBytes = `-- name: SumFileBlobBytes :one
SELECT COALESCE(SUM(size), 0)::bigint FROM file_blobs
`
// Physical bytes actually held by the blob backend (dedup-aware: identical
// content uploaded by different users is one row here). Used by the
// low-space guard's cached usage gauge and the admin panel's "physical
// usage" stat.
func (q *Queries) SumFileBlobBytes(ctx context.Context) (int64, error) {
row := q.db.QueryRow(ctx, sumFileBlobBytes)
var column_1 int64
err := row.Scan(&column_1)
return column_1, err
}