| 48 | |
| 49 | |
| 50 | def load_tables(paths): |
| 51 | schemas = {} |
| 52 | eval_foreign_key_maps = {} |
| 53 | |
| 54 | for path in paths: |
| 55 | schema_dicts = json.load(open(path)) |
| 56 | for schema_dict in schema_dicts: |
| 57 | tables = tuple( |
| 58 | Table( |
| 59 | id=i, |
| 60 | name=name.split(), |
| 61 | unsplit_name=name, |
| 62 | orig_name=orig_name, |
| 63 | ) |
| 64 | for i, (name, orig_name) in enumerate(zip( |
| 65 | schema_dict['table_names'], schema_dict['table_names_original'])) |
| 66 | ) |
| 67 | columns = tuple( |
| 68 | Column( |
| 69 | id=i, |
| 70 | table=tables[table_id] if table_id >= 0 else None, |
| 71 | name=col_name.split(), |
| 72 | unsplit_name=col_name, |
| 73 | orig_name=orig_col_name, |
| 74 | type=col_type, |
| 75 | ) |
| 76 | for i, ((table_id, col_name), (_, orig_col_name), col_type) in enumerate(zip( |
| 77 | schema_dict['column_names'], |
| 78 | schema_dict['column_names_original'], |
| 79 | schema_dict['column_types'])) |
| 80 | ) |
| 81 | |
| 82 | # Link columns to tables |
| 83 | for column in columns: |
| 84 | if column.table: |
| 85 | column.table.columns.append(column) |
| 86 | |
| 87 | for column_id in schema_dict['primary_keys']: |
| 88 | # Register primary keys |
| 89 | column = columns[column_id] |
| 90 | column.table.primary_keys.append(column) |
| 91 | |
| 92 | foreign_key_graph = nx.DiGraph() |
| 93 | for source_column_id, dest_column_id in schema_dict['foreign_keys']: |
| 94 | # Register foreign keys |
| 95 | source_column = columns[source_column_id] |
| 96 | dest_column = columns[dest_column_id] |
| 97 | source_column.foreign_key_for = dest_column |
| 98 | foreign_key_graph.add_edge( |
| 99 | source_column.table.id, |
| 100 | dest_column.table.id, |
| 101 | columns=(source_column_id, dest_column_id)) |
| 102 | foreign_key_graph.add_edge( |
| 103 | dest_column.table.id, |
| 104 | source_column.table.id, |
| 105 | columns=(dest_column_id, source_column_id)) |
| 106 | |
| 107 | db_id = schema_dict['db_id'] |