refactor concatenated_key_to_where() (#6531)

This commit is contained in:
Lars Hvam 2023-10-08 08:50:15 +02:00 committed by GitHub
parent 58da735823
commit 97cdd3afa8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 52 additions and 21 deletions

View File

@ -27,12 +27,12 @@
]
},
"devDependencies": {
"@abaplint/cli": "^2.102.51",
"@abaplint/cli": "^2.102.56",
"@abaplint/database-sqlite": "^2.7.101",
"@abaplint/runtime": "^2.7.101",
"@abaplint/transpiler-cli": "^2.7.101",
"@abaplint/runtime": "^2.7.102",
"@abaplint/transpiler-cli": "^2.7.102",
"abapmerge": "^0.16.0",
"c8": "^8.0.1",
"eslint": "^8.50.0"
"eslint": "^8.51.0"
}
}

View File

@ -3,7 +3,7 @@ CLASS zcl_abapgit_data_utils DEFINITION
CREATE PUBLIC.
PUBLIC SECTION.
TYPES ty_names TYPE STANDARD TABLE OF abap_compname WITH DEFAULT KEY .
CLASS-METHODS build_table_itab
IMPORTING
!iv_name TYPE tadir-obj_name
@ -24,8 +24,6 @@ CLASS zcl_abapgit_data_utils DEFINITION
CLASS-METHODS jump
IMPORTING
!is_item TYPE zif_abapgit_definitions=>ty_item
RETURNING
VALUE(rv_exit) TYPE abap_bool
RAISING
zcx_abapgit_exception.
CLASS-METHODS does_table_exist
@ -38,9 +36,6 @@ CLASS zcl_abapgit_data_utils DEFINITION
!iv_name TYPE tadir-obj_name
RETURNING
VALUE(rv_customizing) TYPE abap_bool.
PROTECTED SECTION.
PRIVATE SECTION.
TYPES ty_names TYPE STANDARD TABLE OF abap_compname WITH DEFAULT KEY .
CLASS-METHODS list_key_fields
IMPORTING
!iv_name TYPE tadir-obj_name
@ -48,6 +43,8 @@ CLASS zcl_abapgit_data_utils DEFINITION
VALUE(rt_names) TYPE ty_names
RAISING
zcx_abapgit_exception.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.

View File

@ -309,6 +309,8 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION.
FIELD-SYMBOLS: <li_repo> LIKE LINE OF mt_list.
ASSERT iv_key IS NOT INITIAL.
IF mv_init = abap_false.
refresh_all( ).
ENDIF.

View File

@ -51,7 +51,9 @@ CLASS zcl_abapgit_gui_page_data DEFINITION
!iv_table TYPE tabname
!iv_tabkey TYPE clike
RETURNING
VALUE(rv_where) TYPE string .
VALUE(rv_where) TYPE string
RAISING
zcx_abapgit_exception.
METHODS add_via_transport
RAISING
zcx_abapgit_exception .
@ -153,28 +155,38 @@ CLASS zcl_abapgit_gui_page_data IMPLEMENTATION.
METHOD concatenated_key_to_where.
DATA lo_structdescr TYPE REF TO cl_abap_structdescr.
DATA lt_fields TYPE ddfields.
DATA ls_field LIKE LINE OF lt_fields.
DATA lo_typedescr TYPE REF TO cl_abap_typedescr.
DATA lt_fields TYPE zcl_abapgit_data_utils=>ty_names.
DATA lv_field LIKE LINE OF lt_fields.
DATA lv_table TYPE tadir-obj_name.
DATA lv_length TYPE i.
DATA lv_tabix TYPE i.
DATA lv_key TYPE c LENGTH 900.
lv_key = iv_tabkey.
lo_structdescr ?= cl_abap_typedescr=>describe_by_name( iv_table ).
lt_fields = lo_structdescr->get_ddic_field_list( ).
lv_table = iv_table.
lt_fields = zcl_abapgit_data_utils=>list_key_fields( lv_table ).
LOOP AT lt_fields INTO ls_field WHERE keyflag = abap_true.
IF ls_field-position = '0001' AND ls_field-datatype = 'CLNT'.
lv_key = lv_key+ls_field-leng.
LOOP AT lt_fields INTO lv_field.
lv_tabix = sy-tabix.
lo_typedescr = cl_abap_typedescr=>describe_by_name( |{ iv_table }-{ lv_field }| ).
lv_length = lo_typedescr->length / cl_abap_char_utilities=>charsize.
IF lv_tabix = 1 AND lo_typedescr->get_relative_name( ) = 'MANDT'.
lv_key = lv_key+lv_length.
CONTINUE.
ENDIF.
IF lv_key = |*|.
EXIT. " current loop
ENDIF.
IF NOT rv_where IS INITIAL.
rv_where = |{ rv_where } AND |.
ENDIF.
rv_where = |{ rv_where }{ to_lower( ls_field-fieldname ) } = '{ lv_key(ls_field-leng) }'|.
lv_key = lv_key+ls_field-leng.
rv_where = |{ rv_where }{ to_lower( lv_field ) } = '{ lv_key(lv_length) }'|.
lv_key = lv_key+lv_length.
ENDLOOP.
ENDMETHOD.
@ -300,7 +312,7 @@ CLASS zcl_abapgit_gui_page_data IMPLEMENTATION.
lt_configs = mi_config->get_configs( ).
LOOP AT lt_configs INTO ls_config.
lo_form = zcl_abapgit_html_form=>create( ).
lo_form = zcl_abapgit_html_form=>create( ).
CREATE OBJECT lo_form_data.
lo_form_data->set(

View File

@ -8,6 +8,7 @@ CLASS ltcl_test DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL.
METHODS concatenated_key_to_where2 FOR TESTING RAISING cx_static_check.
METHODS concatenated_key_to_where3 FOR TESTING RAISING cx_static_check.
METHODS concatenated_key_to_where4 FOR TESTING RAISING cx_static_check.
METHODS with_mandt FOR TESTING RAISING cx_static_check.
ENDCLASS.
@ -69,4 +70,23 @@ CLASS ltcl_test IMPLEMENTATION.
ENDMETHOD.
METHOD with_mandt.
DATA lv_where TYPE string.
IF sy-sysid = 'ABC'.
* dont run on open-abap
RETURN.
ENDIF.
lv_where = zcl_abapgit_gui_page_data=>concatenated_key_to_where(
iv_table = 'USR02'
iv_tabkey = '100ASDF' ).
cl_abap_unit_assert=>assert_equals(
act = lv_where
exp = |bname = 'ASDF'| ).
ENDMETHOD.
ENDCLASS.

View File

@ -358,7 +358,7 @@ INTERFACE zif_abapgit_definitions
go_background TYPE string VALUE 'go_background',
go_background_run TYPE string VALUE 'go_background_run',
go_repo_diff TYPE string VALUE 'go_repo_diff',
go_file_diff TYPE string VALUE 'go_fill_diff',
go_file_diff TYPE string VALUE 'go_file_diff',
go_stage TYPE string VALUE 'go_stage',
go_stage_transport TYPE string VALUE 'go_stage_transport',
go_commit TYPE string VALUE 'go_commit',