示例#1
0
        private AbstractDataSource GetDataSource(AbstractRequestContext context)
        {
            var sourceChoice = context.DataSourceChoice;
            var database     = context.ExecutionContext.SmartSqlConfig.Database;
            AbstractDataSource choiceDataSource = database.Write;
            var readDataSources = database.Reads;

            if (sourceChoice != DataSourceChoice.Read || readDataSources == null || readDataSources.Count <= 0)
            {
                return(choiceDataSource);
            }
            if (!string.IsNullOrEmpty(context.ReadDb))
            {
                if (!readDataSources.TryGetValue(context.ReadDb, out var readDataSource))
                {
                    throw new SmartSqlException($"Can not find ReadDb:{context.ReadDb} .");
                }
                choiceDataSource = readDataSource;
            }
            else
            {
                var seekList = readDataSources.Values.Select(readDataSource => new WeightFilter <AbstractDataSource> .WeightSource
                {
                    Source = readDataSource,
                    Weight = readDataSource.Weight
                });
                choiceDataSource = _weightFilter.Elect(seekList).Source;
            }
            if (_logger.IsEnabled(LogLevel.Debug))
            {
                _logger.LogDebug($"DataSourceFilter GetDataSource Choice: {choiceDataSource.Name} .");
            }
            return(choiceDataSource);
        }
示例#2
0
        private IDataSource GetDataSource(RequestContext context)
        {
            var         sourceChoice     = context.DataSourceChoice;
            IDataSource choiceDataSource = _smartSqlContext.Database.WriteDataSource;
            var         readDataSources  = _smartSqlContext.Database.ReadDataSources;

            if (sourceChoice == DataSourceChoice.Read &&
                readDataSources != null &&
                readDataSources.Count > 0
                )
            {
                if (!String.IsNullOrEmpty(context.ReadDb))
                {
                    choiceDataSource = readDataSources.FirstOrDefault(readDb => readDb.Name == context.ReadDb);
                    if (choiceDataSource == null)
                    {
                        throw new SmartSqlException($"Statement.Key:{context.StatementKey},can not find ReadDb:{context.ReadDb} .");
                    }
                }
                else
                {
                    var seekList = readDataSources.Select(readDataSource => new WeightFilter <IReadDataSource> .WeightSource
                    {
                        Source = readDataSource,
                        Weight = readDataSource.Weight
                    });
                    choiceDataSource = _weightFilter.Elect(seekList).Source;
                }
            }
            if (_logger.IsEnabled(LogLevel.Debug))
            {
                _logger.LogDebug($"DataSourceFilter GetDataSource Choice: {choiceDataSource.Name} .");
            }
            return(choiceDataSource);
        }
示例#3
0
 public void Elect()
 {
     var readDataSources = Enumerable.Range(1, 100).Select(m => new ReadDataSource {
         Name = m.ToString(), Weight = m
     });
     var inWeightSources = readDataSources.Select(readDataSource => new WeightFilter <ReadDataSource> .WeightSource
     {
         Source = readDataSource,
         Weight = readDataSource.Weight
     });
     WeightFilter <ReadDataSource> weightFilter = new WeightFilter <ReadDataSource>();
     var choiced = weightFilter.Elect(inWeightSources);
 }
示例#4
0
        public IDataSource GetDataSource(DataSourceChoice sourceChoice)
        {
            IDataSource choiceDataSource = SmartSqlMapper.SqlMapConfig.Database.WriteDataSource;
            var         readDataSources  = SmartSqlMapper.SqlMapConfig.Database.ReadDataSources;

            if (sourceChoice == DataSourceChoice.Read &&
                readDataSources.Count > 0
                )
            {
                var seekList = readDataSources.Select(readDataSource => new WeightFilter <IReadDataSource> .WeightSource
                {
                    Source = readDataSource,
                    Weight = readDataSource.Weight
                });
                choiceDataSource = weightFilter.Elect(seekList).Source;
            }
            _logger.LogDebug($"DataSourceManager GetDataSource Choice: {choiceDataSource.Name} .");
            return(choiceDataSource);
        }
示例#5
0
        private IDataSource FindDefault(RequestContext context)
        {
            var         database   = context.SmartSqlContext.Database;
            IDataSource dataSource = default;

            if (context.DataSourceChoice == DataSourceChoice.Write)
            {
                dataSource = database.WriteDataSource;
            }
            else if (database.ReadDataSources != null)
            {
                var seekList = database.ReadDataSources.Select(readDataSource => new WeightFilter <IReadDataSource> .WeightSource
                {
                    Source = readDataSource,
                    Weight = readDataSource.Weight
                });
                dataSource = _weightFilter.Elect(seekList).Source;
            }
            return(dataSource);
        }
示例#6
0
        private AbstractDataSource FindDefault(AbstractRequestContext context)
        {
            var database = context.ExecutionContext.SmartSqlConfig.Database;
            AbstractDataSource dataSource = null;

            if (context.DataSourceChoice == DataSourceChoice.Write)
            {
                dataSource = database.Write;
            }
            else if (database.Reads != null)
            {
                var seekList = database.Reads.Select(readDataSource => new WeightFilter <ReadDataSource> .WeightSource
                {
                    Source = readDataSource.Value,
                    Weight = readDataSource.Value.Weight
                });
                dataSource = _weightFilter.Elect(seekList).Source;
            }
            return(dataSource);
        }
示例#7
0
        public IDataSource GetDataSource(DataSourceType type)
        {
            var         ReadDataSources = BaraMapper.BaraMapConfig.DataBase.ReadDataSources;
            IDataSource ChosedDataBase;

            if (ReadDataSources.Count > 0)
            {
                var seekList = ReadDataSources.Select(DataSource => new WeightFilter <IDataSource> .WeightSource
                {
                    Source = DataSource,
                    Weight = DataSource.Weight
                });
                ChosedDataBase = WeightFilter.Elect(seekList).Source;
            }
            else
            {
                ChosedDataBase = BaraMapper.BaraMapConfig.DataBase.WriteDataBase;
            }
            _logger.LogDebug($"DataSourceManager GetDataSource Choice: {ChosedDataBase.Name} .");
            return(ChosedDataBase);
        }
示例#8
0
        private IDataSource GetDataSource(DataSourceChoice sourceChoice)
        {
            IDataSource choiceDataSource = _smartSqlContext.Database.WriteDataSource;
            var         readDataSources  = _smartSqlContext.Database.ReadDataSources;

            if (sourceChoice == DataSourceChoice.Read &&
                readDataSources.Count > 0
                )
            {
                var seekList = readDataSources.Select(readDataSource => new WeightFilter <IReadDataSource> .WeightSource
                {
                    Source = readDataSource,
                    Weight = readDataSource.Weight
                });
                choiceDataSource = _weightFilter.Elect(seekList).Source;
            }
            if (_logger.IsEnabled(LogLevel.Debug))
            {
                _logger.LogDebug($"DataSourceManager GetDataSource Choice: {choiceDataSource.Name} .");
            }
            return(choiceDataSource);
        }