Skip to content

Commit 96d9cf4

Browse files
committed
INTEGRITY: Use INFORMATION_SCHEMA.COLUMNS instead of relying on error handling for column migration.
1 parent 7dcb20b commit 96d9cf4

File tree

1 file changed

+79
-53
lines changed

1 file changed

+79
-53
lines changed

schema.py

Lines changed: 79 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -164,59 +164,85 @@ def init_database():
164164
"file_fileset_detection": "CREATE INDEX file_fileset_detection ON file (fileset, detection)",
165165
}
166166

167-
try:
168-
cursor.execute("ALTER TABLE file ADD COLUMN detection_type VARCHAR(20);")
169-
except Exception:
170-
# if aleady exists, change the length of the column
171-
cursor.execute("ALTER TABLE file MODIFY COLUMN detection_type VARCHAR(20);")
172-
173-
try:
174-
cursor.execute("ALTER TABLE file ADD COLUMN `timestamp` TIMESTAMP NOT NULL;")
175-
except Exception:
176-
# if aleady exists, change the length of the column
177-
cursor.execute("ALTER TABLE file MODIFY COLUMN `timestamp` TIMESTAMP NOT NULL;")
178-
179-
try:
180-
cursor.execute("ALTER TABLE fileset ADD COLUMN `user_count` INT;")
181-
except Exception:
182-
# if aleady exists, change the length of the column
183-
cursor.execute("ALTER TABLE fileset MODIFY COLUMN `user_count` INT;")
184-
185-
try:
186-
cursor.execute("ALTER TABLE file ADD COLUMN punycode_name VARCHAR(200);")
187-
except Exception:
188-
cursor.execute("ALTER TABLE file MODIFY COLUMN punycode_name VARCHAR(200);")
189-
190-
try:
191-
cursor.execute(
192-
"ALTER TABLE file ADD COLUMN encoding_type VARCHAR(20) DEFAULT 'UTF-8';"
193-
)
194-
except Exception:
195-
cursor.execute(
196-
"ALTER TABLE file MODIFY COLUMN encoding_type VARCHAR(20) DEFAULT 'UTF-8';"
197-
)
198-
199-
try:
200-
cursor.execute(
201-
"ALTER TABLE file ADD COLUMN `size-r` BIGINT DEFAULT 0, ADD COLUMN `size-rd` BIGINT DEFAULT 0;"
202-
)
203-
except Exception:
204-
cursor.execute(
205-
"ALTER TABLE file MODIFY COLUMN `size-r` BIGINT DEFAULT 0, MODIFY COLUMN `size-rd` BIGINT DEFAULT 0;"
206-
)
207-
try:
208-
cursor.execute("ALTER TABLE log ADD COLUMN `text` varchar(5000);")
209-
except Exception:
210-
cursor.execute("ALTER TABLE log MODIFY COLUMN `text` varchar(5000);")
211-
212-
try:
213-
cursor.execute(
214-
"ALTER TABLE fileset ADD COLUMN set_dat_metadata varchar(5000) DEFAULT 'UTF-8';"
215-
)
216-
except Exception:
217-
cursor.execute(
218-
"ALTER TABLE fileset MODIFY COLUMN set_dat_metadata varchar(5000) DEFAULT 'UTF-8';"
219-
)
167+
def migrate_column(cursor, table_name, column_name, add_sql, modify_sql):
168+
query = """
169+
SELECT COUNT(*) AS count
170+
FROM INFORMATION_SCHEMA.COLUMNS
171+
WHERE table_name = %s AND column_name = %s
172+
"""
173+
cursor.execute(query, (table_name, column_name))
174+
exists = cursor.fetchone()["count"] > 0
175+
176+
if exists:
177+
print(f"Modifying column '{column_name}' in table '{table_name}'")
178+
cursor.execute(modify_sql)
179+
else:
180+
print(f"Adding column '{column_name}' to table '{table_name}'")
181+
cursor.execute(add_sql)
182+
183+
migrate_column(
184+
cursor,
185+
"file",
186+
"detection_type",
187+
"ALTER TABLE file ADD COLUMN detection_type VARCHAR(20);",
188+
"ALTER TABLE file MODIFY COLUMN detection_type VARCHAR(20);",
189+
)
190+
191+
migrate_column(
192+
cursor,
193+
"file",
194+
"timestamp",
195+
"ALTER TABLE file ADD COLUMN `timestamp` TIMESTAMP NOT NULL;",
196+
"ALTER TABLE file MODIFY COLUMN `timestamp` TIMESTAMP NOT NULL;",
197+
)
198+
199+
migrate_column(
200+
cursor,
201+
"fileset",
202+
"user_count",
203+
"ALTER TABLE fileset ADD COLUMN `user_count` INT;",
204+
"ALTER TABLE fileset MODIFY COLUMN `user_count` INT;",
205+
)
206+
207+
migrate_column(
208+
cursor,
209+
"file",
210+
"punycode_name",
211+
"ALTER TABLE file ADD COLUMN punycode_name VARCHAR(200);",
212+
"ALTER TABLE file MODIFY COLUMN punycode_name VARCHAR(200);",
213+
)
214+
215+
migrate_column(
216+
cursor,
217+
"file",
218+
"encoding_type",
219+
"ALTER TABLE file ADD COLUMN encoding_type VARCHAR(20) DEFAULT 'UTF-8';",
220+
"ALTER TABLE file MODIFY COLUMN encoding_type VARCHAR(20) DEFAULT 'UTF-8';",
221+
)
222+
223+
migrate_column(
224+
cursor,
225+
"file",
226+
"size-r",
227+
"ALTER TABLE file ADD COLUMN `size-r` BIGINT DEFAULT 0;",
228+
"ALTER TABLE file MODIFY COLUMN `size-r` BIGINT DEFAULT 0;",
229+
)
230+
231+
migrate_column(
232+
cursor,
233+
"file",
234+
"size-rd",
235+
"ALTER TABLE file ADD COLUMN `size-rd` BIGINT DEFAULT 0;",
236+
"ALTER TABLE file MODIFY COLUMN `size-rd` BIGINT DEFAULT 0;",
237+
)
238+
239+
migrate_column(
240+
cursor,
241+
"log",
242+
"text",
243+
"ALTER TABLE log ADD COLUMN `text` VARCHAR(5000);",
244+
"ALTER TABLE log MODIFY COLUMN `text` VARCHAR(5000);",
245+
)
220246

221247
for index, definition in indices.items():
222248
try:

0 commit comments

Comments
 (0)