execute

in src/zgoog_i_demo_nl2sql_imp.prog.abap [0:0]


  METHOD execute.

    DATA:
      lv_prompt              TYPE string,
      lt_text_response       TYPE soli_tab,
      lo_nl2sql    TYPE REF TO ZGOOG_CL_NL2SQL_CDS_VIEW,
      lv_response            TYPE string,
      lv_error               TYPE abap_bool,
      lo_cx_sdk              TYPE REF TO /goog/cx_sdk,
      lo_out                 TYPE REF TO if_demo_output,
      lv_msg                 TYPE string.

    FIELD-SYMBOLS:
      <ls_text_sysins> TYPE soli,
      <ls_text_prompt> TYPE soli.

    gr_text_response->delete_text( ).

    gr_text_prompt->get_text_as_stream( IMPORTING  text                   = gt_text_prompt
                                        EXCEPTIONS error_cntl_call_method = 1
                                                   OTHERS                 = 3 ).

    LOOP AT gt_text_prompt ASSIGNING <ls_text_prompt>.
      IF lv_prompt IS INITIAL.
        lv_prompt = <ls_text_prompt>.
      ELSE.
        CONCATENATE lv_prompt <ls_text_prompt> INTO lv_prompt
          SEPARATED BY space.

      ENDIF.

    ENDLOOP.

    TRY.
        CREATE OBJECT lo_nl2sql
          EXPORTING
            iv_model_key = p_model_key.


        lv_response = lo_nl2sql->GENERATE_SQL(
          IV_PROMPT = lv_prompt
          IV_CDS_VIEW = p_cds_view ).

        IF lv_response IS NOT INITIAL.
          CALL METHOD convert_string_to_table
            EXPORTING
              iv_response      = lv_response
            IMPORTING
              et_text_response = lt_text_response.

          gr_text_response->set_text_as_stream( lt_text_response ).

          CLEAR:
                lv_response,
                lt_text_response.
        ENDIF.
      CATCH /goog/cx_sdk INTO lo_cx_sdk.
        cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

    ENDTRY.