mirror of
https://github.com/aljazceru/turso.git
synced 2025-12-17 00:24:21 +01:00
The ProgrammingError exception is thrown when tables, indexes, or columns are dropped in parallel. Let's not fail the Antithesis test drivers when that happens.
70 lines
1.7 KiB
Python
Executable File
70 lines
1.7 KiB
Python
Executable File
#!/usr/bin/env -S python3 -u
|
|
|
|
|
|
import turso
|
|
from antithesis.random import get_random
|
|
|
|
# Get initial state
|
|
try:
|
|
con_init = turso.connect("init_state.db")
|
|
except Exception as e:
|
|
print(f"Error connecting to database: {e}")
|
|
exit(0)
|
|
|
|
cur_init = con_init.cursor()
|
|
|
|
# Connect to the main database
|
|
try:
|
|
con = turso.connect("stress_composer.db")
|
|
except Exception as e:
|
|
print(f"Failed to open stress_composer.db. Exiting... {e}")
|
|
exit(0)
|
|
|
|
cur = con.cursor()
|
|
|
|
# Get all user-created indexes (excluding automatic indexes)
|
|
existing_indexes = cur.execute("""
|
|
SELECT name, tbl_name FROM sqlite_master
|
|
WHERE type = 'index'
|
|
AND sql IS NOT NULL
|
|
AND name NOT LIKE 'sqlite_%'
|
|
""").fetchall()
|
|
|
|
if not existing_indexes:
|
|
print("No indexes available to drop")
|
|
exit(0)
|
|
|
|
# Select a random index to drop
|
|
selected_idx = get_random() % len(existing_indexes)
|
|
index_name, table_name = existing_indexes[selected_idx]
|
|
|
|
print(f"Selected index: {index_name} on table {table_name}")
|
|
print(f"Total indexes available: {len(existing_indexes)}")
|
|
|
|
try:
|
|
# Drop the index
|
|
drop_stmt = f"DROP INDEX {index_name}"
|
|
print(f"Dropping index: {drop_stmt}")
|
|
cur.execute(drop_stmt)
|
|
|
|
# Remove index information from init_state.db
|
|
cur_init.execute(f"""
|
|
DELETE FROM indexes
|
|
WHERE idx_name = '{index_name}'
|
|
""")
|
|
con_init.commit()
|
|
|
|
print(f"Successfully dropped index: {index_name}")
|
|
except turso.ProgrammingError as e:
|
|
print(f"Index {index_name} already dropped in parallel: {e}")
|
|
con.rollback()
|
|
except turso.OperationalError as e:
|
|
print(f"Failed to drop index: {e}")
|
|
con.rollback()
|
|
except Exception as e:
|
|
print(f"Warning: Could not remove index from metadata: {e}")
|
|
|
|
con.commit()
|
|
con.close()
|
|
con_init.close()
|