| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- """PostgreSQL adapter for query-planning-owned tables only."""
- from __future__ import annotations
- from typing import Any
- from uuid import UUID
- import psycopg2.extras
- from query_planning.domain import KnowledgeNeedDraft
- Json = psycopg2.extras.Json
- psycopg2.extras.register_uuid()
- class PostgresQueryPlanningStore:
- def __init__(self, conn: Any) -> None:
- self.conn = conn
- def _id(self, sql: str, params: tuple[Any, ...]) -> UUID:
- with self.conn.cursor() as cur:
- cur.execute(sql, params)
- row = cur.fetchone()
- if row is None:
- raise RuntimeError("query planning insert returned no id")
- return row[0]
- def create_plan(self, **kwargs: Any) -> UUID:
- return self._id(
- """
- INSERT INTO creation_knowledge.query_plans(
- generator_kind, status, input_snapshot, generator_config,
- max_queries, generated_count, normalized_count, unique_count,
- selected_count, dropped_count, metadata
- )
- VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
- RETURNING id
- """,
- (
- kwargs["generator_kind"],
- kwargs["status"],
- Json(kwargs.get("input_snapshot") or {}),
- Json(kwargs.get("generator_config") or {}),
- kwargs.get("max_queries"),
- kwargs["generated_count"],
- kwargs["normalized_count"],
- kwargs["unique_count"],
- kwargs["selected_count"],
- kwargs["dropped_count"],
- Json(kwargs.get("metadata") or {}),
- ),
- )
- def add_knowledge_need(self, *, plan_id: UUID, need: KnowledgeNeedDraft) -> UUID:
- return self._id(
- """
- INSERT INTO creation_knowledge.knowledge_needs(
- plan_id, need_key, decision_context, unknown_information,
- source_ref, priority, metadata
- )
- VALUES (%s, %s, %s, %s, %s, %s, %s)
- RETURNING id
- """,
- (
- plan_id,
- need.need_key,
- need.decision_context,
- need.unknown_information,
- Json(need.source_ref),
- need.priority,
- Json(need.metadata),
- ),
- )
- def link_plan_batch(self, *, plan_id: UUID, batch_id: UUID) -> None:
- with self.conn.cursor() as cur:
- cur.execute(
- """
- INSERT INTO creation_knowledge.query_plan_batches(plan_id, batch_id)
- VALUES (%s, %s)
- ON CONFLICT DO NOTHING
- """,
- (plan_id, batch_id),
- )
- def link_query_need(self, *, query_id: UUID, knowledge_need_id: UUID) -> None:
- with self.conn.cursor() as cur:
- cur.execute(
- """
- INSERT INTO creation_knowledge.query_knowledge_need_links(
- query_id, knowledge_need_id
- )
- VALUES (%s, %s)
- ON CONFLICT DO NOTHING
- """,
- (query_id, knowledge_need_id),
- )
|