#
# 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.
#

dataSources:
  master_ds_0: !!com.zaxxer.hikari.HikariDataSource
    driverClassName: org.h2.Driver
    jdbcUrl: jdbc:h2:mem:master_ds_0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
    username: sa
    password:
  master_ds_0_slave_0: !!com.zaxxer.hikari.HikariDataSource
    driverClassName: org.h2.Driver
    jdbcUrl: jdbc:h2:mem:master_ds_0_slave_0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
    username: sa
    password:
  master_ds_0_slave_1: !!com.zaxxer.hikari.HikariDataSource
    driverClassName: org.h2.Driver
    jdbcUrl: jdbc:h2:mem:master_ds_0_slave_1;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
    username: sa
    password:
  default_ds: !!com.zaxxer.hikari.HikariDataSource
    driverClassName: org.h2.Driver
    jdbcUrl: jdbc:h2:mem:default_ds;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
    username: sa
    password:
  # Shadow Databases
  shadow_master_ds_0: !!com.zaxxer.hikari.HikariDataSource
    driverClassName: org.h2.Driver
    jdbcUrl: jdbc:h2:mem:master_ds_0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
    username: shadow_sa
    password:
  shadow_master_ds_0_slave_0: !!com.zaxxer.hikari.HikariDataSource
    driverClassName: org.h2.Driver
    jdbcUrl: jdbc:h2:mem:master_ds_0_slave_0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
    username: shadow_sa
    password:
  shadow_master_ds_0_slave_1: !!com.zaxxer.hikari.HikariDataSource
    driverClassName: org.h2.Driver
    jdbcUrl: jdbc:h2:mem:master_ds_0_slave_1;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
    username: shadow_sa
    password:
  shadow_default_ds: !!com.zaxxer.hikari.HikariDataSource
    driverClassName: org.h2.Driver
    jdbcUrl: jdbc:h2:mem:default_ds;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
    username: shadow_sa
    password:

shadowRule:
  column: is_shadow
  shadowMappings:
    master_ds_0: shadow_master_ds_0
    master_ds_0_slave_0: shadow_master_ds_0_slave_0
    master_ds_0_slave_1: shadow_master_ds_0_slave_1
    default_ds:  shadow_default_ds
  shardingRule:
    tables:
      t_user:
        actualDataNodes: ds_${0..1}.t_user_${0..15}
        databaseStrategy:
          complex:
            shardingColumns: region_id, user_id
            algorithmClassName: TestDatabaseComplexAlgorithmClassName
        tableStrategy:
          complex:
            shardingColumns: region_id, user_id
            algorithmClassName: TestTableComplexAlgorithmClassName
      t_stock:
        actualDataNodes: ds_${0..1}.t_stock{0..8}
        databaseStrategy:
          hint:
            algorithmClassName: TestDatabaseHintAlgorithmClassName
        tableStrategy:
          hint:
            algorithmClassName: TestTableHintAlgorithmClassName
      t_order:
        actualDataNodes: ds_${0..1}.t_order_${0..1}
        tableStrategy:
          inline:
            shardingColumn: order_id
            algorithmExpression: t_order_${order_id % 2}
        keyGenerator:
          type: SNOWFLAKE
          column: order_id
          props:
            worker.id: 123
      t_order_item:
        actualDataNodes: ds_${0..1}.t_order_item_${0..1}
        tableStrategy:
          standard:
            shardingColumn: order_id
            preciseAlgorithmClassName: TestPreciseAlgorithmClassName
            rangeAlgorithmClassName: TestRangeAlgorithmClassName
    bindingTables:
      - t_order, t_order_item
    broadcastTables:
      - t_config
    defaultDataSourceName: default_ds
    defaultDatabaseStrategy:
      inline:
        shardingColumn: order_id
        algorithmExpression: ds_${order_id % 2}
    defaultTableStrategy:
      none:
    masterSlaveRules:
      ds_0:
        masterDataSourceName: master_ds_0
        slaveDataSourceNames:
          - master_ds_0_slave_0
          - master_ds_0_slave_1
        loadBalanceAlgorithmType: ROUND_ROBIN
      ds_1:
        masterDataSourceName: master_ds_1
        slaveDataSourceNames:
          - master_ds_1_slave_0
          - master_ds_1_slave_1
        loadBalanceAlgorithmType: RANDOM
props:
  sql.show: true
