<?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>0024-if-null-specific-fields</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>2021/06/01 15:47:03.315</created_date>
    <modified_user>-</modified_user>
    <modified_date>2021/06/01 15:47:03.315</modified_date>
    <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA=</key_for_session_key>
    <is_key_private>N</is_key_private>
  </info>
  <notepads>
  </notepads>
  <order>
    <hop>
      <from>Sample data</from>
      <to>If Null - fields a,c,d,f</to>
      <enabled>Y</enabled>
    </hop>
    <hop>
      <from>If Null - fields a,c,d,f</from>
      <to>Verify</to>
      <enabled>Y</enabled>
    </hop>
  </order>
  <transform>
    <name>If Null - fields a,c,d,f</name>
    <type>IfNull</type>
    <description/>
    <distribute>Y</distribute>
    <custom_distribution/>
    <copies>1</copies>
    <partitioning>
      <method>none</method>
      <schema_name/>
    </partitioning>
    <replaceAllByValue>?</replaceAllByValue>
    <replaceAllMask/>
    <selectFields>Y</selectFields>
    <selectValuesType>N</selectValuesType>
    <setEmptyStringAll>N</setEmptyStringAll>
    <valuetypes>
      </valuetypes>
    <fields>
      <field>
        <name>a</name>
        <value>a?</value>
        <mask/>
        <set_empty_string>N</set_empty_string>
      </field>
      <field>
        <name>c</name>
        <value>c?</value>
        <mask/>
        <set_empty_string>N</set_empty_string>
      </field>
      <field>
        <name>d</name>
        <value>d?</value>
        <mask/>
        <set_empty_string>N</set_empty_string>
      </field>
      <field>
        <name>f</name>
        <value>f?</value>
        <mask/>
        <set_empty_string>N</set_empty_string>
      </field>
    </fields>
    <attributes/>
    <GUI>
      <xloc>272</xloc>
      <yloc>96</yloc>
    </GUI>
  </transform>
  <transform>
    <name>Sample data</name>
    <type>DataGrid</type>
    <description/>
    <distribute>Y</distribute>
    <custom_distribution/>
    <copies>1</copies>
    <partitioning>
      <method>none</method>
      <schema_name/>
    </partitioning>
    <fields>
      <field>
        <name>a</name>
        <type>String</type>
        <format/>
        <currency/>
        <decimal/>
        <group/>
        <length>-1</length>
        <precision>-1</precision>
        <set_empty_string>N</set_empty_string>
      </field>
      <field>
        <name>b</name>
        <type>String</type>
        <format/>
        <currency/>
        <decimal/>
        <group/>
        <length>-1</length>
        <precision>-1</precision>
        <set_empty_string>N</set_empty_string>
      </field>
      <field>
        <name>c</name>
        <type>String</type>
        <format/>
        <currency/>
        <decimal/>
        <group/>
        <length>-1</length>
        <precision>-1</precision>
        <set_empty_string>N</set_empty_string>
      </field>
      <field>
        <name>d</name>
        <type>String</type>
        <format/>
        <currency/>
        <decimal/>
        <group/>
        <length>-1</length>
        <precision>-1</precision>
        <set_empty_string>N</set_empty_string>
      </field>
      <field>
        <name>e</name>
        <type>String</type>
        <format/>
        <currency/>
        <decimal/>
        <group/>
        <length>-1</length>
        <precision>-1</precision>
        <set_empty_string>N</set_empty_string>
      </field>
      <field>
        <name>f</name>
        <type>String</type>
        <format/>
        <currency/>
        <decimal/>
        <group/>
        <length>-1</length>
        <precision>-1</precision>
        <set_empty_string>N</set_empty_string>
      </field>
    </fields>
    <data>
      <line>
        <item>a1</item>
        <item/>
        <item>c1</item>
        <item/>
        <item>e1</item>
        <item>f1</item>
      </line>
      <line>
        <item/>
        <item>b2</item>
        <item/>
        <item/>
        <item/>
        <item/>
      </line>
      <line>
        <item/>
        <item/>
        <item>c3</item>
        <item/>
        <item/>
        <item>f3</item>
      </line>
      <line>
        <item/>
        <item>b4</item>
        <item>c4</item>
        <item>d4</item>
        <item/>
        <item/>
      </line>
      <line>
        <item/>
        <item/>
        <item/>
        <item/>
        <item>e5</item>
        <item/>
      </line>
      <line>
        <item>a6</item>
        <item/>
        <item/>
        <item/>
        <item/>
        <item>f6</item>
      </line>
    </data>
    <attributes/>
    <GUI>
      <xloc>112</xloc>
      <yloc>96</yloc>
    </GUI>
  </transform>
  <transform>
    <name>Verify</name>
    <type>Dummy</type>
    <description/>
    <distribute>Y</distribute>
    <custom_distribution/>
    <copies>1</copies>
    <partitioning>
      <method>none</method>
      <schema_name/>
    </partitioning>
    <attributes/>
    <GUI>
      <xloc>448</xloc>
      <yloc>96</yloc>
    </GUI>
  </transform>
  <transform_error_handling>
  </transform_error_handling>
  <attributes/>
</pipeline>
