private IStreamDataReader Decorate(List <IStreamDataReader> streamDataReaders, SelectCommandContext selectCommandContext, IStreamDataReader mergedStreamDataReader)
        {
            var paginationContext = selectCommandContext.GetPaginationContext();

            if (!paginationContext.HasPagination() || 1 == streamDataReaders.Count)
            {
                return(mergedStreamDataReader);
            }
            String trunkDatabaseName = DatabaseTypes.GetTrunkDatabaseType(_databaseType.GetName()).GetName();

            if ("MySql".Equals(trunkDatabaseName) || "PostgreSQL".Equals(trunkDatabaseName))
            {
                return(new LimitDecoratorStreamDataReader(mergedStreamDataReader, paginationContext));
            }
            if ("Oracle".Equals(trunkDatabaseName))
            {
                return(new RowNumberDecoratorStreamDataReader(mergedStreamDataReader, paginationContext));
            }
            if ("SQLServer".Equals(trunkDatabaseName))
            {
                return(new TopAndRowNumberDecoratorStreamDataReader(mergedStreamDataReader, paginationContext));
            }
            return(mergedStreamDataReader);
        }