#
# 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.
#
######
###### This config file is a demonstration of streaming processing in seatunnel config
######

env {
  job.mode = "BATCH"
}

source {
  FakeSource {
    result_table_name = "fake"
    row.num = 100
    schema = {
      fields {
        id = "int"
        name = "string"
        age = "int"
        c_timestamp = "timestamp"
        c_date = "date"
        c_map = "map<string, string>"
        c_array = "array<int>"
        c_decimal = "decimal(30, 8)"
      }
    }
  }
}

transform {
  Sql {
    source_table_name = "fake"
    result_table_name = "fake1"
    # the query table name must same as field 'source_table_name'
    query = "select id, regexp_replace(name, '.+', 'b') as name, age+1 as age, pi() as pi, c_timestamp, c_date, c_map, c_array, c_decimal from fake"
  }
  # The SQL transform support base function and criteria operation
  # But the complex SQL unsupported yet, include: multi source table/rows JOIN and AGGREGATE operation and the like
}

sink {
  Console {
    source_table_name = "fake1"
  }
  Assert {
    source_table_name = "fake1"
    rules =
      {
        row_rules = [
          {
            rule_type = MIN_ROW
            rule_value = 100
          }
        ]
        field_rules = [
          {
            field_name = id
            field_type = int
            field_value = [
              {
                rule_type = NOT_NULL
              }
            ]
          },
          {
            field_name = name
            field_type = string
            field_value = [
              {
                rule_type = NOT_NULL
              },
              {
                rule_type = MIN_LENGTH
                rule_value = 1
              },
              {
                rule_type = MAX_LENGTH
                rule_value = 1
              }
            ]
          },
          {
            field_name = age
            field_type = int
            field_value = [
              {
                rule_type = NOT_NULL
              }
            ]
          },
          {
            field_name = pi
            field_type = double
            field_value = [
              {
                rule_type = NOT_NULL
              }
            ]
          },
          {
            field_name = c_timestamp
            field_type = timestamp
            field_value = [
              {
                rule_type = NOT_NULL
              }
            ]
          },
          {
            field_name = c_date
            field_type = date
            field_value = [
              {
                rule_type = NOT_NULL
              }
            ]
          }
        ]
      }
  }
}
