From fcdb07a7a6c8e21a57fba2b0f31e2c5ceb6ca618 Mon Sep 17 00:00:00 2001 From: Marc Bernard <59966492+mbtools@users.noreply.github.com> Date: Sun, 2 Oct 2022 03:19:33 -0400 Subject: [PATCH] TABL: Fix deserialize if foreign key exists (#5773) --- src/objects/zcl_abapgit_object_tabl.clas.abap | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/objects/zcl_abapgit_object_tabl.clas.abap b/src/objects/zcl_abapgit_object_tabl.clas.abap index 7eb6359ae..e9505b86c 100644 --- a/src/objects/zcl_abapgit_object_tabl.clas.abap +++ b/src/objects/zcl_abapgit_object_tabl.clas.abap @@ -58,6 +58,8 @@ CLASS zcl_abapgit_object_tabl DEFINITION TYPES: ty_dd03p_tt TYPE STANDARD TABLE OF dd03p . + TYPES: + ty_dd08v_tt TYPE STANDARD TABLE OF dd08v. TYPES: BEGIN OF ty_dd02_text, ddlanguage TYPE dd02t-ddlanguage, @@ -108,6 +110,9 @@ CLASS zcl_abapgit_object_tabl DEFINITION !iv_tabclass TYPE dd02l-tabclass RETURNING VALUE(rv_is_db_table_type) TYPE dd02l-tabclass . + METHODS clear_foreign_keys + CHANGING + !ct_dd08v TYPE ty_dd08v_tt. ENDCLASS. @@ -205,6 +210,30 @@ CLASS zcl_abapgit_object_tabl IMPLEMENTATION. ENDMETHOD. + METHOD clear_foreign_keys. + + DATA: + ls_item TYPE zif_abapgit_definitions=>ty_item, + lv_index TYPE sy-tabix. + + FIELD-SYMBOLS TYPE dd08v. + + " Remove foreign key definitions where the check table/view does not exist (yet) + LOOP AT ct_dd08v ASSIGNING . + lv_index = sy-tabix. + ls_item-obj_name = -checktable. + ls_item-obj_type = 'TABL'. + IF zcl_abapgit_objects=>exists( ls_item ) = abap_false. + ls_item-obj_type = 'VIEW'. + IF zcl_abapgit_objects=>exists( ls_item ) = abap_false. + DELETE ct_dd08v INDEX lv_index. + ENDIF. + ENDIF. + ENDLOOP. + + ENDMETHOD. + + METHOD delete_extras. DELETE FROM tddat WHERE tabname = iv_tabname. @@ -780,7 +809,8 @@ CLASS zcl_abapgit_object_tabl IMPLEMENTATION. " DDIC Step: Remove references to search helps and foreign keys IF iv_step = zif_abapgit_object=>gc_step_id-ddic. - CLEAR: lt_dd08v, lt_dd35v, lt_dd36m. + CLEAR: lt_dd35v, lt_dd36m. + clear_foreign_keys( CHANGING ct_dd08v = lt_dd08v ). ENDIF. IF iv_step = zif_abapgit_object=>gc_step_id-late