<!--

    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.

-->

<data>
  <row>
    <int_field>1</int_field>
    <bigint_field>1000</bigint_field>
    <float_field>1.3</float_field>
    <double_field>3.3</double_field>
    <boolean_field>true</boolean_field>
    <date_field>2022-01-01</date_field>
    <date2_field>03/02/2022</date2_field>
    <time_field>12:04:34</time_field>
    <timestamp_field>2022-01-06T12:30:30Z</timestamp_field>
    <string_field>string</string_field>
  </row>

  <row>
    <int_field>2</int_field>
    <bigint_field>2000</bigint_field>
    <float_field>2.3</float_field>
    <double_field>4.3</double_field>
    <boolean_field>false</boolean_field>
    <date_field>2022-02-01</date_field>
    <date2_field>03/01/2022</date2_field>
    <time_field>13:04:34</time_field>
    <timestamp_field>2022-03-06T12:30:30Z</timestamp_field>
  </row>

</data>
