2016-08-31 3 views
0

Я знаю, что я очень близок к тому, чтобы этот код работал, но должен пропустить что-то простое.Sequel :: Модель paginate/each_page возвращает только первую страницу данных

У меня есть серия таблиц teradata и oracle, которые я абстрагировал, используя сиквел :: model. Ive загрузило расширение pagination в базу данных. Я могу получить возвращаемый набор данных, но независимо от того, что я делаю, я не могу заставить его дать мне ничего, кроме первой страницы.

Вот пример того, как Ive абстрагировал таблицы.

module MyDB 
    class MyTable< Sequel::Model(tera_db["#{$env[:my_db]}__my_table".to_sym]) 
     @factory_name = :my_factory 
     set_primary_key [:my_primary_key] 
     @typecast_on_assignment = false 
    end 
end 

Вот как Ive реализован некоторый тестовый код вокруг each_page

MyDB::MyTable.order(:my_primary_key).each_page(1000) do |page| 
    p page.current_page_record_count 
    p page.count 
    p page.first 
end 

Есть 87,675 записей в наборе данных. Последние две итерации Выход из этого цикла являются:

значения = {: ключ1 => 12345,: ключ2 => 14,58,: ключ3 => 155,44}

значения = {: ключ1 => 12345,: ключ2 => 14,58,: ключ3 => 155,44}

Итак ... создается необходимое количество страниц. И исходное количество вычисленных записей правильное. Но когда я пытаюсь получить фактические значения на странице, он получает только записи с первой страницы, включая количество записей.

Что мне не хватает?

ответ

0

Возможно, page.first удаляет смещение из набора данных? Я не могу воссоздать ваши результаты. Возможно, проблема связана с адаптером Teradata (который является внешним адаптером, не являющимся частью самого Sequel). Вы можете попробовать page.from_self.first или page.limit(1).all[0] и посмотреть, если результаты разные, а также опубликовать журнал SQL (который, вероятно, можно генерировать с помощью tera_db.loggers << Logger.new($stdout))

+0

Спасибо Джереми ... Конечной целью моей попытки в с помощью разбивки на страницы было возможность прокручивать большие массивы данных, не загружая их сразу в память. Поскольку я могу это сделать, просто используя .each в регулярном наборе данных, мне не нужно использовать пейджинг. Я согласен, что это, вероятно, проблема с адаптером Teradata. –

Смежные вопросы