#!/usr/bin/env python3
"""Verify database schema changes."""
import asyncio
import sys
from pathlib import Path
# Add src to path
sys.path.insert(0, str(Path(__file__).parent / "src"))
from src.data.models.database import get_db
from src.data.models.contracts import Contract
from src.data.models.trades import Trade
from sqlalchemy import inspect, text
import structlog
logger = structlog.get_logger()
async def verify_schema():
"""Verify that the new fields exist in the database."""
try:
db_gen = get_db()
db = await db_gen.__anext__()
try:
# Use raw SQL to check table structure
contracts_result = await db.execute(text("""
SELECT column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_name = 'contracts'
ORDER BY column_name;
"""))
trades_result = await db.execute(text("""
SELECT column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_name = 'trades'
ORDER BY column_name;
"""))
print("=== CONTRACTS TABLE SCHEMA ===")
for row in contracts_result:
print(f"{row.column_name:30} {row.data_type:20} {row.is_nullable}")
print("\n=== TRADES TABLE SCHEMA ===")
for row in trades_result:
print(f"{row.column_name:30} {row.data_type:20} {row.is_nullable}")
# Check for specific new fields
new_contract_fields = ['instrument_guid_long', 'instrument_long_name']
new_trade_fields = ['instrument_guid_long', 'count_clr_trade_id', 'trade_date']
contracts_columns = [row.column_name for row in await db.execute(text("SELECT column_name FROM information_schema.columns WHERE table_name = 'contracts'"))]
trades_columns = [row.column_name for row in await db.execute(text("SELECT column_name FROM information_schema.columns WHERE table_name = 'trades'"))]
print(f"\n=== VERIFICATION ===")
print(f"✅ New Contract Fields:")
for field in new_contract_fields:
status = "✅" if field in contracts_columns else "❌"
print(f" {status} {field}")
print(f"✅ New Trade Fields:")
for field in new_trade_fields:
status = "✅" if field in trades_columns else "❌"
print(f" {status} {field}")
finally:
await db.close()
except Exception as e:
logger.error("schema_verification_failed", error=str(e))
raise
if __name__ == "__main__":
asyncio.run(verify_schema())