Exemplo n.º 1
0
        protected override void OnSetup()
        {
            ICollection <string> settingsKeys = ((IDictionary <string, object>)Settings).Keys;

            if (settingsKeys.Contains("ConnectionString"))
            {
                if (settingsKeys.Contains("ProviderName"))
                {
                    _connectionProvider = ProviderHelper.GetProviderByConnectionString(Settings.ConnectionString,
                                                                                       Settings.ProviderName);
                }
                else
                {
                    _connectionProvider = ProviderHelper.GetProviderByConnectionString(Settings.ConnectionString);
                }
            }
            else if (settingsKeys.Contains("Filename"))
            {
                _connectionProvider = ProviderHelper.GetProviderByFilename(Settings.Filename);
            }
            else if (settingsKeys.Contains("ConnectionName"))
            {
                _connectionProvider = ProviderHelper.GetProviderByConnectionName(Settings.ConnectionName);
            }
            _schema           = DatabaseSchema.Get(_connectionProvider, _providerHelper);
            _relatedFinder    = new Lazy <AdoAdapterRelatedFinder>(CreateRelatedFinder);
            _commandOptimizer = ProviderHelper.GetCustomProvider <CommandOptimizer>(_connectionProvider) ??
                                new CommandOptimizer();
        }
Exemplo n.º 2
0
        public override int UpdateMany(string tableName, IEnumerable <IDictionary <string, object> > data)
        {
            IBulkUpdater bulkUpdater = ProviderHelper.GetCustomProvider <IBulkUpdater>(ConnectionProvider) ??
                                       new BulkUpdater();

            return(bulkUpdater.Update(this, tableName, data.ToList(), null));
        }
Exemplo n.º 3
0
        public override IEnumerable <IEnumerable <IDictionary <string, object> > > RunQueries(SimpleQuery[] queries, List <IEnumerable <SimpleQueryClauseBase> > unhandledClauses)
        {
            if (ProviderSupportsCompoundStatements && queries.Length > 1)
            {
                var commandBuilders = new ICommandBuilder[queries.Length];
                for (int i = 0; i < queries.Length; i++)
                {
                    IEnumerable <SimpleQueryClauseBase> unhandledClausesForThisQuery;
                    commandBuilders[i] = new QueryBuilder(this, i).Build(queries[i], out unhandledClausesForThisQuery);
                    unhandledClauses.Add(unhandledClausesForThisQuery);
                }
                var connection = _connectionProvider.CreateConnection();
                var command    = CommandBuilder.CreateCommand(_providerHelper.GetCustomProvider <IDbParameterFactory>(_schema.SchemaProvider), commandBuilders, connection);
                foreach (var item in command.ToEnumerables(connection))
                {
                    yield return(item.ToList());
                }
            }
            else
            {
                foreach (SimpleQuery t in queries)
                {
                    IEnumerable <SimpleQueryClauseBase> unhandledClausesForThisQuery;
                    yield return(RunQuery(t, out unhandledClausesForThisQuery));

                    unhandledClauses.Add(unhandledClausesForThisQuery);
                }
            }
        }
Exemplo n.º 4
0
 internal AdoAdapter(IConnectionProvider connectionProvider) : this()
 {
     _connectionProvider = connectionProvider;
     _schema             = DatabaseSchema.Get(_connectionProvider, _providerHelper);
     _relatedFinder      = new Lazy <AdoAdapterRelatedFinder>(CreateRelatedFinder);
     _commandOptimizer   = ProviderHelper.GetCustomProvider <CommandOptimizer>(_connectionProvider) ??
                           new CommandOptimizer();
 }
Exemplo n.º 5
0
        public int UpdateMany(string tableName, IEnumerable <IDictionary <string, object> > data,
                              IAdapterTransaction transaction, IList <string> keyFields)
        {
            IBulkUpdater bulkUpdater = ProviderHelper.GetCustomProvider <IBulkUpdater>(ConnectionProvider) ??
                                       new BulkUpdater();

            return(bulkUpdater.Update(this, tableName, data.ToList(), ((AdoAdapterTransaction)transaction).DbTransaction));
        }
Exemplo n.º 6
0
        public int UpdateMany(string tableName, IList <IDictionary <string, object> > dataList,
                              IEnumerable <string> criteriaFieldNames, IAdapterTransaction adapterTransaction)
        {
            IBulkUpdater bulkUpdater = ProviderHelper.GetCustomProvider <IBulkUpdater>(ConnectionProvider) ??
                                       new BulkUpdater();

            return(bulkUpdater.Update(this, tableName, dataList, criteriaFieldNames,
                                      ((AdoAdapterTransaction)adapterTransaction).DbTransaction));
        }
Exemplo n.º 7
0
        public override IEnumerable <IDictionary <string, object> > RunQuery(SimpleQuery query,
                                                                             out IEnumerable <SimpleQueryClauseBase>
                                                                             unhandledClauses)
        {
            if (query.Clauses.OfType <WithCountClause>().Any())
            {
                return(RunQueryWithCount(query, out unhandledClauses));
            }

            ICommandBuilder[] commandBuilders = GetQueryCommandBuilders(query, out unhandledClauses);
            IDbConnection     connection      = CreateConnection();

            if (ProviderSupportsCompoundStatements || commandBuilders.Length == 1)
            {
                return
                    (CommandBuilder.CreateCommand(
                         _providerHelper.GetCustomProvider <IDbParameterFactory>(_schema.SchemaProvider), commandBuilders,
                         connection).ToEnumerable(this.CreateConnection));
            }
            else
            {
                return(commandBuilders.SelectMany(cb => cb.GetCommand(connection).ToEnumerable(this.CreateConnection)));
            }
        }
Exemplo n.º 8
0
        private Func <IDbCommand, IDbParameterFactory> CreateGetParameterFactoryFunc()
        {
            if (_getParameterFactory == null)
            {
                var customParameterFactory =
                    _customInterfaceProvider.GetCustomProvider <IDbParameterFactory>(_schemaProvider);
                if (customParameterFactory != null)
                {
                    _getParameterFactory = _ => customParameterFactory;
                }
                else
                {
                    _getParameterFactory = c => new GenericDbParameterFactory(c);
                }
            }

            return(_getParameterFactory);
        }
Exemplo n.º 9
0
        private ICommandBuilder[] GetPagedQueryCommandBuilders(SimpleQuery query, Int32 bulkIndex,
                                                               out IEnumerable <SimpleQueryClauseBase> unhandledClauses)
        {
            var commandBuilders      = new List <ICommandBuilder>();
            var unhandledClausesList = new List <SimpleQueryClauseBase>();

            unhandledClauses = unhandledClausesList;

            IEnumerable <SimpleQueryClauseBase> unhandledClausesForPagedQuery;
            ICommandBuilder mainCommandBuilder = new QueryBuilder(this, bulkIndex).Build(query,
                                                                                         out
                                                                                         unhandledClausesForPagedQuery);

            unhandledClausesList.AddRange(unhandledClausesForPagedQuery);

            const int maxInt = 2147483646;

            SkipClause skipClause = query.Clauses.OfType <SkipClause>().FirstOrDefault() ?? new SkipClause(0);
            TakeClause takeClause = query.Clauses.OfType <TakeClause>().FirstOrDefault() ?? new TakeClause(maxInt);

            if (skipClause.Count != 0 || takeClause.Count != maxInt)
            {
                var queryPager = ProviderHelper.GetCustomProvider <IQueryPager>(ConnectionProvider);
                if (queryPager == null)
                {
                    unhandledClausesList.AddRange(query.OfType <SkipClause>());
                    unhandledClausesList.AddRange(query.OfType <TakeClause>());
                }

                IEnumerable <string> commandTexts = queryPager.ApplyPaging(mainCommandBuilder.Text, skipClause.Count,
                                                                           takeClause.Count);

                foreach (string commandText in commandTexts)
                {
                    var commandBuilder = new CommandBuilder(commandText, _schema, mainCommandBuilder.Parameters);
                    commandBuilders.Add(commandBuilder);
                }
            }
            return(commandBuilders.ToArray());
        }