Fix unique bug
This commit is contained in:
+38
-10
@@ -9,6 +9,43 @@ def init_db():
|
|||||||
"""Initializes the database and creates the necessary table."""
|
"""Initializes the database and creates the necessary table."""
|
||||||
with sqlite3.connect(DB_PATH) as conn:
|
with sqlite3.connect(DB_PATH) as conn:
|
||||||
cursor = conn.cursor()
|
cursor = conn.cursor()
|
||||||
|
|
||||||
|
# Check if we need to migrate uploaded_assets
|
||||||
|
cursor.execute("PRAGMA table_info(uploaded_assets)")
|
||||||
|
columns = {col[1]: col for col in cursor.fetchall()}
|
||||||
|
|
||||||
|
# If the table exists and image_hash is the sole PK, migrate it
|
||||||
|
# col[5] is the 'pk' indicator in PRAGMA table_info
|
||||||
|
if "image_hash" in columns and columns["image_hash"][5] == 1 and ("asset_type" not in columns or columns["asset_type"][5] == 0):
|
||||||
|
print("Migrating uploaded_assets to composite primary key...")
|
||||||
|
|
||||||
|
# 1. Rename old table
|
||||||
|
cursor.execute("ALTER TABLE uploaded_assets RENAME TO uploaded_assets_old")
|
||||||
|
|
||||||
|
# 2. Create new table
|
||||||
|
cursor.execute("""
|
||||||
|
CREATE TABLE uploaded_assets (
|
||||||
|
image_hash TEXT,
|
||||||
|
asset_type INTEGER,
|
||||||
|
original_asset_id INTEGER NOT NULL,
|
||||||
|
new_asset_id INTEGER NOT NULL,
|
||||||
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (image_hash, asset_type)
|
||||||
|
)
|
||||||
|
""")
|
||||||
|
|
||||||
|
# 3. Copy data (defaulting old records to Shirt type = 11 if unknown)
|
||||||
|
cursor.execute("""
|
||||||
|
INSERT INTO uploaded_assets (image_hash, asset_type, original_asset_id, new_asset_id, created_at)
|
||||||
|
SELECT image_hash, COALESCE(asset_type, 11), original_asset_id, new_asset_id, created_at
|
||||||
|
FROM uploaded_assets_old
|
||||||
|
""")
|
||||||
|
|
||||||
|
# 4. Drop old table
|
||||||
|
cursor.execute("DROP TABLE uploaded_assets_old")
|
||||||
|
print("Migration complete.")
|
||||||
|
else:
|
||||||
|
# Standard creation if not exists
|
||||||
cursor.execute("""
|
cursor.execute("""
|
||||||
CREATE TABLE IF NOT EXISTS uploaded_assets (
|
CREATE TABLE IF NOT EXISTS uploaded_assets (
|
||||||
image_hash TEXT,
|
image_hash TEXT,
|
||||||
@@ -19,6 +56,7 @@ def init_db():
|
|||||||
PRIMARY KEY (image_hash, asset_type)
|
PRIMARY KEY (image_hash, asset_type)
|
||||||
)
|
)
|
||||||
""")
|
""")
|
||||||
|
|
||||||
cursor.execute("""
|
cursor.execute("""
|
||||||
CREATE TABLE IF NOT EXISTS onsale_queue (
|
CREATE TABLE IF NOT EXISTS onsale_queue (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
@@ -32,16 +70,6 @@ def init_db():
|
|||||||
next_retry DATETIME DEFAULT CURRENT_TIMESTAMP
|
next_retry DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
)
|
)
|
||||||
""")
|
""")
|
||||||
|
|
||||||
# Migration: Add asset_type to uploaded_assets if it doesn't exist
|
|
||||||
cursor.execute("PRAGMA table_info(uploaded_assets)")
|
|
||||||
columns = [column[1] for column in cursor.fetchall()]
|
|
||||||
if "asset_type" not in columns:
|
|
||||||
cursor.execute("ALTER TABLE uploaded_assets ADD COLUMN asset_type INTEGER")
|
|
||||||
print("Added asset_type column to uploaded_assets table.")
|
|
||||||
# Note: Existing items will have asset_type = null, which is fine for now
|
|
||||||
# as the query handles it.
|
|
||||||
|
|
||||||
conn.commit()
|
conn.commit()
|
||||||
|
|
||||||
def get_uploaded_asset(image_hash: str, asset_type: int) -> Optional[int]:
|
def get_uploaded_asset(image_hash: str, asset_type: int) -> Optional[int]:
|
||||||
|
|||||||
Reference in New Issue
Block a user