Spaces:
Running
Running
| import sqlite3 | |
| class SchemaEncoder: | |
| def __init__(self, db_root): | |
| self.db_root = db_root | |
| def get_tables_and_columns(self, db_id): | |
| # FIXED PATH | |
| db_path = self.db_root / f"{db_id}.sqlite" | |
| conn = sqlite3.connect(db_path) | |
| cursor = conn.cursor() | |
| tables = cursor.execute( | |
| "SELECT name FROM sqlite_master WHERE type='table';" | |
| ).fetchall() | |
| schema = {} | |
| for (table,) in tables: | |
| cols = cursor.execute(f"PRAGMA table_info({table});").fetchall() | |
| col_names = [c[1] for c in cols] | |
| schema[table] = col_names | |
| conn.close() | |
| return schema | |
| # ----------------------------------- | |
| # Strategy 1: Structured | |
| # ----------------------------------- | |
| def structured_schema(self, db_id): | |
| schema = self.get_tables_and_columns(db_id) | |
| lines = [] | |
| for table, cols in schema.items(): | |
| lines.append(f"{table}({', '.join(cols)})") | |
| return "\n".join(lines) | |
| # ----------------------------------- | |
| # Strategy 2: Natural Language | |
| # ----------------------------------- | |
| def natural_language_schema(self, db_id): | |
| schema = self.get_tables_and_columns(db_id) | |
| lines = [] | |
| for table, cols in schema.items(): | |
| col_text = ", ".join(cols) | |
| lines.append(f"The table '{table}' contains the columns: {col_text}.") | |
| return "\n".join(lines) | |