ó
    À‘´j=  ã            	       ó  • S r SSKJr  SSKJr  SSKJr  SSKJr  SSK	J
r
  SSKJrJr  SSKJr  SS	KJr  S
\4S jrSS\S
\
4S jjrSS\
S-  S\S
S4S jjrSS\
S-  S
\\   4S jjr\SS\
S-  S
\\SS4   4S jj5       rg)z3Database connection utilities for Quber RAG system.é    )Úcontextmanager)Ú	Generator)Úlogger)Úcreate_engine)ÚEngine)ÚSessionÚsessionmaker)ÚBase)Úget_settingsÚreturnc            
      ó  • [        5       R                  n U R                  nU R                  nU R                  nU R
                  nU R                  nSU SU SU SU SU 3
n[        R                  " SU SU SU SU 35        U$ )zÜ
Construct database URL from `get_settings().db`.

Each POSTGRES_* variable that is unset falls back to its default in
`DBSettings`, so a missing variable never raises here.

Returns:
    Database connection URL string.
zpostgresql+psycopg://Ú:Ú@Ú/z#Database URL: postgresql+psycopg://z:***@)r   ÚdbÚuserÚpasswordÚhostÚportr   Údebug)Údb_settingsr   r   r   r   r   Úurls          Ú1/home/mande/repo/quber/src/quber/db/connection.pyÚget_database_urlr      s–   € ô “.×#Ñ#€KØ×Ñ€DØ×#Ñ#€HØ×Ñ€DØ×Ñ€DØ	�‰€Bà! $  q¨¨
°!°D°6¸¸4¸&ÀÀ"ÀÐ
F€CÜ
‡L‚LÐ6°t°f¸EÀ$ÀÀqÈÈÈaÐPRÈtÐTÔUØ€Jó    Úechoc                 ó¶   • [        5       n[        XSS9n[        R                  " SUR                  R
                   SUR                  R                   35        U$ )z›
Create and return a SQLAlchemy engine.

Args:
    echo: If True, log all SQL statements (useful for debugging).

Returns:
    SQLAlchemy Engine instance.
T)r   Úpool_pre_pingzDatabase engine created: r   )r   r   r   Úinfor   Údatabaser   )r   r   Úengines      r   Ú
get_enginer"   %   sK   € ô Ó
€CÜ˜3¸Ñ>€FÜ
‡K‚KÐ+¨F¯J©J×,?Ñ,?Ð+@ÀÀ&Ç*Á*Ç/Á/ÐARÐSÔTØ€Mr   Nr!   Údrop_allc                 ó,  • U c
  [        5       n U(       a5  [        R                  " S5        [        R                  R                  U 5        [        R                  " S5        [        R                  R                  U 5        [        R                  " S5        g)z¬
Initialize database schema.

Args:
    engine: SQLAlchemy engine. If None, creates a new one.
    drop_all: If True, drop all tables before creating (WARNING: data loss).
NzDropping all tables...zCreating database tables...z!Database initialized successfully)	r"   r   Úwarningr
   Úmetadatar#   r   Ú
create_allÚsuccess)r!   r#   s     r   Úinit_dbr)   5   s^   € ð �~Ü“ˆæÜ�ŠÐ/Ô0Ü�‰×Ñ˜vÔ&ä
‡K‚KÐ-Ô.Ü‡M�M×Ñ˜VÔ$Ü
‡N‚NÐ6Õ7r   c                 ó0   • U c
  [        5       n [        U SS9$ )z„
Create a session factory.

Args:
    engine: SQLAlchemy engine. If None, creates a new one.

Returns:
    SQLAlchemy sessionmaker.
F©ÚbindÚexpire_on_commit)r"   r	   )r!   s    r   Úget_session_factoryr.   I   s   € ð �~Ü“ˆä˜V°eÑ<Ð<r   c              #   ó6  #   • U c
  [        5       n [        U SS9nU" 5       n Uv •  UR                  5          UR                  5         g! [         a/  nUR	                  5         [
        R                  " SU 35        e SnAff = f! UR                  5         f = f7f)zþ
Context manager for database sessions.

Args:
    engine: SQLAlchemy engine. If None, creates a new one.

Yields:
    Database session.

Example:
    ```python
    with get_session() as session:
        documents = session.query(Document).all()
    ```
NFr+   zSession error: )r"   r	   ÚcommitÚ	ExceptionÚrollbackr   ÚerrorÚclose)r!   ÚSessionLocalÚsessionÚes       r   Úget_sessionr8   Y   s„   é € ð" �~Ü“ˆä V¸eÑD€LÙ‹n€GðØŠØ�‰Õð 	�‰�øô ó Ø×ÑÔÜ�Š� q cÐ*Ô+Øûðûð
 	�‰�üs3   ‚B¢A ·BÁ
BÁ*A<Á<BÂB ÂBÂB)F)NF)N)Ú__doc__Ú
contextlibr   Útypingr   Úlogurur   Ú
sqlalchemyr   Úsqlalchemy.enginer   Úsqlalchemy.ormr   r	   Úquber.db.modelsr
   Úquber.settingsr   Ústrr   Úboolr"   r)   r.   r8   © r   r   Ú<module>rE      s«   ðÙ 9å %Ý å Ý $Ý $ß 0å  Ý 'ð˜#ô ñ,�Tð  fõ ñ 8�F˜T‘Mð 8°Dð 8ÀTõ 8ñ(= ¨¡ð =¸ÀgÑ9Nõ =ð  ñ˜ ™ð °¸7ÀDÈ$Ð;NÑ1Oô ó ñr   