-- name: UpsertSkill :one INSERT INTO skills (name, category, embedding) VALUES ($1,$2,$3) ON CONFLICT (name) DO UPDATE SET category = EXCLUDED.category RETURNING *; -- name: GetSkillByName :one SELECT * FROM skills WHERE name = $1; -- name: ListSkills :many SELECT * FROM skills ORDER BY name LIMIT $1 OFFSET $2; -- name: SearchSkillsSemantic :many -- Cosine nearest-neighbor over the skills ontology (powers semantic skill adjacency). SELECT id, name, (embedding <=> $1::vector)::float8 AS distance FROM skills WHERE embedding IS NOT NULL ORDER BY embedding <=> $1::vector, name, id -- unique tiebreaker => deterministic [review SQLC-3] LIMIT $2;