(session: SessionDep, ds: CoreDatasource, tables: List[CoreTable])
| 192 | |
| 193 | |
| 194 | def sync_table(session: SessionDep, ds: CoreDatasource, tables: List[CoreTable]): |
| 195 | id_list = [] |
| 196 | for item in tables: |
| 197 | statement = select(CoreTable).where(and_(CoreTable.ds_id == ds.id, CoreTable.table_name == item.table_name)) |
| 198 | record = session.exec(statement).first() |
| 199 | # update exist table, only update table_comment |
| 200 | if record is not None: |
| 201 | item.id = record.id |
| 202 | id_list.append(record.id) |
| 203 | |
| 204 | record.table_comment = item.table_comment |
| 205 | session.add(record) |
| 206 | session.commit() |
| 207 | else: |
| 208 | # save new table |
| 209 | table = CoreTable(ds_id=ds.id, checked=True, table_name=item.table_name, table_comment=item.table_comment, |
| 210 | custom_comment=item.table_comment) |
| 211 | session.add(table) |
| 212 | session.flush() |
| 213 | session.refresh(table) |
| 214 | item.id = table.id |
| 215 | id_list.append(table.id) |
| 216 | session.commit() |
| 217 | |
| 218 | # sync field |
| 219 | fields = getFieldsByDs(session, ds, item.table_name) |
| 220 | sync_fields(session, ds, item, fields) |
| 221 | |
| 222 | if len(id_list) > 0: |
| 223 | session.query(CoreTable).filter(and_(CoreTable.ds_id == ds.id, CoreTable.id.not_in(id_list))).delete( |
| 224 | synchronize_session=False) |
| 225 | session.query(CoreField).filter(and_(CoreField.ds_id == ds.id, CoreField.table_id.not_in(id_list))).delete( |
| 226 | synchronize_session=False) |
| 227 | session.commit() |
| 228 | else: # delete all tables and fields in this ds |
| 229 | session.query(CoreTable).filter(CoreTable.ds_id == ds.id).delete(synchronize_session=False) |
| 230 | session.query(CoreField).filter(CoreField.ds_id == ds.id).delete(synchronize_session=False) |
| 231 | session.commit() |
| 232 | |
| 233 | # do table embedding |
| 234 | run_save_table_embeddings(id_list) |
| 235 | run_save_ds_embeddings([ds.id]) |
| 236 | |
| 237 | |
| 238 | def sync_fields(session: SessionDep, ds: CoreDatasource, table: CoreTable, fields: List[ColumnSchema]): |
no test coverage detected