|
2 | 2 | import sys |
3 | 3 | import os |
4 | 4 |
|
| 5 | +from functools import cmp_to_key |
| 6 | + |
| 7 | + |
| 8 | +def cmp_ver(a, b): |
| 9 | + for va, vb in zip(a.split('.'), b.split('.')): |
| 10 | + va, vb = int(va), int(vb) |
| 11 | + if va > vb: |
| 12 | + return 1 |
| 13 | + if va < vb: |
| 14 | + return -1 |
| 15 | + return 0 |
| 16 | + |
| 17 | + |
| 18 | +def cmp_file_ver(a, b): |
| 19 | + return cmp_ver(a.split('-')[0], b.split('-')[0]) |
| 20 | + |
5 | 21 |
|
6 | 22 | def get_script_list(start_ver, target_ver): |
7 | 23 | sql_script_names = os.listdir("sql") |
8 | | - sql_script_names.sort() |
9 | | - res = [] |
10 | | - start_index = -1 |
11 | | - end_index = -1 |
12 | | - for i in range(len(sql_script_names)): |
13 | | - if sql_script_names[i].startswith(start_ver): |
14 | | - start_index = i |
15 | | - if sql_script_names[i].replace(".sql", "").endswith(target_ver): |
16 | | - end_index = i |
17 | | - if start_index == -1 or end_index == -1 or start_index > end_index: |
18 | | - return res |
19 | | - res = sql_script_names[start_index:end_index+1] |
20 | | - print("will run scripts:") |
21 | | - print(res) |
22 | | - return res |
| 24 | + print("FUM upgradeable sql list:", sql_script_names) |
| 25 | + inclusive_files = filter(lambda x: cmp_ver( |
| 26 | + x.split('-')[0], start_ver) >= 0 and cmp_ver(x.split('-')[1], target_ver) <= 0, sql_script_names) |
| 27 | + return sorted(inclusive_files, key=cmp_to_key(cmp_file_ver)) |
23 | 28 |
|
24 | 29 |
|
25 | 30 | def preprocess_script(script): |
@@ -51,7 +56,9 @@ def run_script(script, cursor): |
51 | 56 |
|
52 | 57 | if __name__ == '__main__': |
53 | 58 | _, user, password, start_ver, end_ver = sys.argv |
| 59 | + print("Version upgrade span:", start_ver, end_ver) |
54 | 60 | scripts_to_run = get_script_list(start_ver, end_ver) |
| 61 | + print("Filtered sql list:", scripts_to_run) |
55 | 62 | mydb = mysql.connector.connect( |
56 | 63 | host="mysql", |
57 | 64 | user=user, |
|
0 commit comments