#
# 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: 
  master_ds_1: !!com.zaxxer.hikari.HikariDataSource
    driverClassName: org.h2.Driver
    jdbcUrl: jdbc:h2:mem:master_ds_1;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
    username: sa
    password: 
  master_ds_1_slave_0: !!com.zaxxer.hikari.HikariDataSource
    driverClassName: org.h2.Driver
    jdbcUrl: jdbc:h2:mem:master_ds_1_slave_0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
    username: sa
    password:
  master_ds_1_slave_1: !!com.zaxxer.hikari.HikariDataSource
    driverClassName: org.h2.Driver
    jdbcUrl: jdbc:h2:mem:master_ds_1_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: 

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
