// Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.31.1 // source: clipboard.sql package db import ( "context" ) const clearExpiredClipboards = `-- name: ClearExpiredClipboards :execrows UPDATE clipboard_state SET content = NULL, source_device = NULL WHERE content IS NOT NULL AND updated_at < ? ` // ClearExpiredClipboards empties content older than the cutoff (content / // source_device set NULL) for the short-TTL exposure limit; the row is kept. // Called periodically by the clipboard sweeper. // // ASCII only: sqlc 1.31.x miscomputes byte offsets on multibyte comments and // truncates the generated SQL const. This query was silently cut to "SET content =" // (the sweeper then failed at runtime with "incomplete input"). Keep ASCII. func (q *Queries) ClearExpiredClipboards(ctx context.Context, updatedAt int64) (int64, error) { result, err := q.db.ExecContext(ctx, clearExpiredClipboards, updatedAt) if err != nil { return 0, err } return result.RowsAffected() } const getClipboard = `-- name: GetClipboard :one SELECT user_id, content_type, content, source_device, updated_at, version, origin_ts FROM clipboard_state WHERE user_id = ? ` func (q *Queries) GetClipboard(ctx context.Context, userID string) (ClipboardState, error) { row := q.db.QueryRowContext(ctx, getClipboard, userID) var i ClipboardState err := row.Scan( &i.UserID, &i.ContentType, &i.Content, &i.SourceDevice, &i.UpdatedAt, &i.Version, &i.OriginTs, ) return i, err } const upsertClipboard = `-- name: UpsertClipboard :one INSERT INTO clipboard_state (user_id, content_type, content, source_device, updated_at, version, origin_ts) VALUES (?, ?, ?, ?, ?, 1, ?) ON CONFLICT (user_id) DO UPDATE SET content_type = excluded.content_type, content = excluded.content, source_device = excluded.source_device, updated_at = excluded.updated_at, version = clipboard_state.version + 1, origin_ts = excluded.origin_ts WHERE excluded.origin_ts > clipboard_state.origin_ts RETURNING version ` type UpsertClipboardParams struct { UserID string `json:"user_id"` ContentType string `json:"content_type"` Content *string `json:"content"` SourceDevice *string `json:"source_device"` UpdatedAt int64 `json:"updated_at"` OriginTs int64 `json:"origin_ts"` } // New rows start version 1; conflicts bump version by 1 (per-user monotonic). // LWW: the DO UPDATE only runs when the new origin_ts is strictly greater than // the stored one, so a delayed / out-of-order older copy changes nothing and // RETURNING yields no row (the service reads sql.ErrNoRows as "stale, rejected"). func (q *Queries) UpsertClipboard(ctx context.Context, arg UpsertClipboardParams) (int64, error) { row := q.db.QueryRowContext(ctx, upsertClipboard, arg.UserID, arg.ContentType, arg.Content, arg.SourceDevice, arg.UpdatedAt, arg.OriginTs, ) var version int64 err := row.Scan(&version) return version, err }