"""v3_api_database_revision Revision ID: 8077140e1e99 Revises: Create Date: 2024-12-03 12:10:10.878485 """ import os from typing import Sequence, Union import sqlalchemy as sa from alembic import op # revision identifiers, used by Alembic. revision: str = "8077140e1e99" down_revision: Union[str, None] = "2fac23e4d91b" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None project_name = os.getenv("R2R_PROJECT_NAME") if not project_name: raise ValueError( "Environment variable `R2R_PROJECT_NAME` must be provided migrate, it should be set equal to the value of `project_name` in your `r2r.toml`." ) if ( input( "WARNING: This migration will delete all graph data. Are you sure you want to continue? (yes/no) " ).lower() != "yes" ): raise ValueError("Migration aborted.") def upgrade() -> None: # Collections table migration op.alter_column( "collections", "collection_id", new_column_name="id", schema=project_name, ) op.drop_column( "collections", "kg_enrichment_status", schema=project_name, ) op.add_column( "collections", sa.Column( "owner_id", sa.UUID, server_default=sa.text("'2acb499e-8428-543b-bd85-0d9098718220'"), ), schema=project_name, ) op.add_column( "collections", sa.Column( "graph_sync_status", sa.Text, server_default=sa.text("'pending'") ), schema=project_name, ) op.add_column( "collections", sa.Column( "graph_cluster_status", sa.Text, server_default=sa.text("'pending'"), ), schema=project_name, ) # Documents table migration op.rename_table( "document_info", "documents", schema=project_name, ) op.alter_column( "documents", "document_id", new_column_name="id", schema=project_name, ) op.alter_column( "documents", "user_id", new_column_name="owner_id", schema=project_name, ) op.drop_column( "documents", "kg_extraction_status", schema=project_name, ) op.add_column( "documents", sa.Column( "extraction_status", sa.Text, server_default=sa.text("'pending'"), ), schema=project_name, ) op.alter_column( "documents", "doc_search_vector", new_column_name="raw_tsvector", schema=project_name, ) # Files table migration op.rename_table( "file_storage", "files", schema=project_name, ) op.alter_column( "files", "file_name", new_column_name="name", schema=project_name, ) op.alter_column( "files", "file_oid", new_column_name="oid", schema=project_name, ) op.alter_column( "files", "file_size", new_column_name="size", schema=project_name, ) op.alter_column( "files", "file_type", new_column_name="type", schema=project_name, ) # Prompts table migration op.alter_column( "prompts", "prompt_id", new_column_name="id", schema=project_name, ) # Users table migration op.alter_column( "users", "user_id", new_column_name="id", schema=project_name, ) # Chunks table migration op.rename_table( "vectors", "chunks", schema=project_name, ) op.alter_column( "chunks", "extraction_id", new_column_name="id", schema=project_name, ) op.alter_column( "chunks", "user_id", new_column_name="owner_id", schema=project_name, ) def downgrade() -> None: # Collections table migration op.alter_column( "collections", "id", new_column_name="collection_id", schema=project_name, ) op.add_column( "collections", sa.Column( "kg_enrichment_status", sa.Text, server_default=sa.text("'pending'"), ), schema=project_name, ) op.drop_column( "collections", "owner_id", schema=project_name, ) op.drop_column( "collections", "graph_sync_status", schema=project_name, ) op.drop_column( "collections", "graph_cluster_status", schema=project_name, ) # Documents table migration op.rename_table( "documents", "document_info", schema=project_name, ) op.alter_column( "document_info", "id", new_column_name="document_id", schema=project_name, ) op.alter_column( "document_info", "owner_id", new_column_name="user_id", schema=project_name, ) op.add_column( "document_info", sa.Column( "kg_extraction_status", sa.Text, server_default=sa.text("'pending'"), ), schema=project_name, ) op.drop_column( "document_info", "extraction_status", schema=project_name, ) op.alter_column( "document_info", "raw_tsvector", new_column_name="doc_search_vector", schema=project_name, ) # Files table migration op.rename_table( "files", "file_storage", schema=project_name, ) op.alter_column( "file_storage", "name", new_column_name="file_name", schema=project_name, ) op.alter_column( "file_storage", "oid", new_column_name="file_oid", schema=project_name, ) op.alter_column( "file_storage", "size", new_column_name="file_size", schema=project_name, ) op.alter_column( "file_storage", "type", new_column_name="file_type", schema=project_name, ) # Prompts table migration op.alter_column( "prompts", "id", new_column_name="prompt_id", schema=project_name, ) # Users table migration op.alter_column( "users", "id", new_column_name="user_id", schema=project_name, ) # Chunks table migration op.rename_table( "chunks", "vectors", schema=project_name, ) op.alter_column( "vectors", "id", new_column_name="extraction_id", schema=project_name, ) op.alter_column( "vectors", "owner_id", new_column_name="user_id", schema=project_name, )