<?xml version="1.0" encoding="UTF-8"?>
<!--

Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

-->
<pipeline>
  <info>
    <name>0021-execSqlRow-MDI-parent</name>
    <name_sync_with_filename>Y</name_sync_with_filename>
    <description/>
    <extended_description/>
    <pipeline_version/>
    <pipeline_type>Normal</pipeline_type>
    <parameters>
    </parameters>
    <capture_transform_performance>N</capture_transform_performance>
    <transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
    <transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
    <created_user>-</created_user>
    <created_date>2022/07/14 12:43:30.194</created_date>
    <modified_user>-</modified_user>
    <modified_date>2022/07/14 12:43:30.194</modified_date>
    <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA=</key_for_session_key>
    <is_key_private>N</is_key_private>
  </info>
  <notepads>
  </notepads>
  <order>
    <hop>
      <from>Data grid</from>
      <to>ETL metadata injection</to>
      <enabled>Y</enabled>
    </hop>
  </order>
  <transform>
    <name>Data grid</name>
    <type>DataGrid</type>
    <description/>
    <distribute>Y</distribute>
    <custom_distribution/>
    <copies>1</copies>
    <partitioning>
      <method>none</method>
      <schema_name/>
    </partitioning>
    <fields>
      <field>
        <set_empty_string>N</set_empty_string>
        <length>-1</length>
        <name>connection</name>
        <precision>-1</precision>
        <type>String</type>
      </field>
      <field>
        <set_empty_string>N</set_empty_string>
        <length>-1</length>
        <name>query_field</name>
        <precision>-1</precision>
        <type>String</type>
      </field>
      <field>
        <set_empty_string>N</set_empty_string>
        <length>-1</length>
        <name>insert_field</name>
        <precision>-1</precision>
        <type>String</type>
      </field>
      <field>
        <set_empty_string>N</set_empty_string>
        <length>-1</length>
        <name>update_field</name>
        <precision>-1</precision>
        <type>String</type>
      </field>
      <field>
        <set_empty_string>N</set_empty_string>
        <length>-1</length>
        <name>delete_field</name>
        <precision>-1</precision>
        <type>String</type>
      </field>
      <field>
        <set_empty_string>N</set_empty_string>
        <length>-1</length>
        <name>read_field</name>
        <precision>-1</precision>
        <type>String</type>
      </field>
      <field>
        <set_empty_string>N</set_empty_string>
        <length>-1</length>
        <name>commit_size</name>
        <precision>-1</precision>
        <type>String</type>
      </field>
    </fields>
    <data>
      <line>
        <item>unit-test-db</item>
        <item>sql</item>
        <item>insert</item>
        <item>update</item>
        <item>delete</item>
        <item>read</item>
        <item>1</item>
      </line>
    </data>
    <attributes/>
    <GUI>
      <xloc>208</xloc>
      <yloc>128</yloc>
    </GUI>
  </transform>
  <transform>
    <name>ETL metadata injection</name>
    <type>MetaInject</type>
    <description/>
    <distribute>Y</distribute>
    <custom_distribution/>
    <copies>1</copies>
    <partitioning>
      <method>none</method>
      <schema_name/>
    </partitioning>
    <filename>${PROJECT_HOME}/0021-execSqlRow-MDI-template.hpl</filename>
    <run_configuration>local</run_configuration>
    <source_transform/>
    <source_output_fields>    </source_output_fields>
    <target_file/>
    <create_parent_folder>Y</create_parent_folder>
    <no_execution>N</no_execution>
    <stream_source_transform/>
    <stream_target_transform/>
    <mappings>
      <mapping>
        <target_transform_name>Execute row SQL script</target_transform_name>
        <target_attribute_key>CONNECTION_NAME</target_attribute_key>
        <target_detail>N</target_detail>
        <source_transform>Data grid</source_transform>
        <source_field>connection</source_field>
      </mapping>
      <mapping>
        <target_transform_name>Execute row SQL script</target_transform_name>
        <target_attribute_key>COMMIT_SIZE</target_attribute_key>
        <target_detail>N</target_detail>
        <source_transform>Data grid</source_transform>
        <source_field>commit_size</source_field>
      </mapping>
      <mapping>
        <target_transform_name>Execute row SQL script</target_transform_name>
        <target_attribute_key>UPDATE_STATS</target_attribute_key>
        <target_detail>Y</target_detail>
        <source_transform>Data grid</source_transform>
        <source_field>insert_field</source_field>
      </mapping>
      <mapping>
        <target_transform_name>Execute row SQL script</target_transform_name>
        <target_attribute_key>DELETE_STATS</target_attribute_key>
        <target_detail>Y</target_detail>
        <source_transform>Data grid</source_transform>
        <source_field>delete_field</source_field>
      </mapping>
      <mapping>
        <target_transform_name>Execute row SQL script</target_transform_name>
        <target_attribute_key>INSERT_STATS</target_attribute_key>
        <target_detail>Y</target_detail>
        <source_transform>Data grid</source_transform>
        <source_field>update_field</source_field>
      </mapping>
      <mapping>
        <target_transform_name>Execute row SQL script</target_transform_name>
        <target_attribute_key>READ_STATS</target_attribute_key>
        <target_detail>Y</target_detail>
        <source_transform>Data grid</source_transform>
        <source_field>read_field</source_field>
      </mapping>
      <mapping>
        <target_transform_name>Execute row SQL script</target_transform_name>
        <target_attribute_key>SQL_FIELD_NAME</target_attribute_key>
        <target_detail>N</target_detail>
        <source_transform>Data grid</source_transform>
        <source_field>query_field</source_field>
      </mapping>
    </mappings>
    <attributes/>
    <GUI>
      <xloc>496</xloc>
      <yloc>128</yloc>
    </GUI>
  </transform>
  <transform_error_handling>
  </transform_error_handling>
  <attributes/>
</pipeline>
