/**
         * Find data node by data source and logic table.
         *
         * @param dataSourceName data source name
         * @param logicTableName logic table name
         * @return data node
         */
        public DataNode GetDataNode(string dataSourceName, string logicTableName)
        {
            TableRule tableRule = GetTableRule(logicTableName);

            return(tableRule.ActualDataNodes.FirstOrDefault(o => ShardingDataSourceNames.DataSourceNames.Contains(o.GetDataSourceName()) &&
                                                            o.GetDataSourceName().Equals(dataSourceName)) ?? throw new ShardingException(
                       $"Cannot find actual data node for data source name: '{dataSourceName}' and logic table name: '{logicTableName}'"));
        }
        /**
         * Find data node by logic table name.
         *
         * @param logicTableName logic table name
         * @return data node
         */
        public DataNode GetDataNode(string logicTableName)
        {
            TableRule tableRule = GetTableRule(logicTableName);

            return(tableRule.ActualDataNodes[0]);
        }
 /**
  * Get table sharding strategy.
  *
  * <p>
  * Use default table sharding strategy if not found.
  * </p>
  *
  * @param tableRule table rule
  * @return table sharding strategy
  */
 public IShardingStrategy GetTableShardingStrategy(TableRule tableRule)
 {
     return(tableRule.TableShardingStrategy ?? DefaultTableShardingStrategy);
 }
 private bool IsShardingColumn(TableRule tableRule, string columnName)
 {
     return(GetDatabaseShardingStrategy(tableRule).GetShardingColumns().Contains(columnName) || GetTableShardingStrategy(tableRule).GetShardingColumns().Contains(columnName));
 }
 /**
  * Get database sharding strategy.
  *
  * <p>
  * Use default database sharding strategy if not found.
  * </p>
  *
  * @param tableRule table rule
  * @return database sharding strategy
  */
 public IShardingStrategy GetDatabaseShardingStrategy(TableRule tableRule)
 {
     return(tableRule.DatabaseShardingStrategy ?? DefaultDatabaseShardingStrategy);
 }