| 236 | |
| 237 | |
| 238 | def sync_fields(session: SessionDep, ds: CoreDatasource, table: CoreTable, fields: List[ColumnSchema]): |
| 239 | id_list = [] |
| 240 | for index, item in enumerate(fields): |
| 241 | statement = select(CoreField).where( |
| 242 | and_(CoreField.table_id == table.id, CoreField.field_name == item.fieldName)) |
| 243 | record = session.exec(statement).first() |
| 244 | if record is not None: |
| 245 | item.id = record.id |
| 246 | id_list.append(record.id) |
| 247 | |
| 248 | record.field_comment = item.fieldComment |
| 249 | record.field_index = index |
| 250 | record.field_type = item.fieldType |
| 251 | session.add(record) |
| 252 | session.commit() |
| 253 | else: |
| 254 | field = CoreField(ds_id=ds.id, table_id=table.id, checked=True, field_name=item.fieldName, |
| 255 | field_type=item.fieldType, field_comment=item.fieldComment, |
| 256 | custom_comment=item.fieldComment, field_index=index) |
| 257 | session.add(field) |
| 258 | session.flush() |
| 259 | session.refresh(field) |
| 260 | item.id = field.id |
| 261 | id_list.append(field.id) |
| 262 | session.commit() |
| 263 | |
| 264 | if len(id_list) > 0: |
| 265 | session.query(CoreField).filter(and_(CoreField.table_id == table.id, CoreField.id.not_in(id_list))).delete( |
| 266 | synchronize_session=False) |
| 267 | session.commit() |
| 268 | |
| 269 | |
| 270 | def update_table_and_fields(session: SessionDep, data: TableObj): |