<!--
  ~ 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.
  -->

<dataset>
    <metadata>
        <column name="table" />
        <column name="logic_column" />
        <column name="cipher_column" />
        <column name="assisted_query_column" />
        <column name="like_query_column" />
        <column name="encryptor_type" />
        <column name="encryptor_props" />
        <column name="assisted_query_type" />
        <column name="assisted_query_props" />
        <column name="like_query_type" />
        <column name="like_query_props" />
    </metadata>
    <row values="t_user| pwd| pwd_cipher| | | AES| {&quot;aes-key-value&quot;:&quot;123456abc&quot;,&quot;digest-algorithm-name&quot;:&quot;SHA-1&quot;}| | | | "/>
</dataset>
