Sequel :: Model paginate / each_page возвращает только первую страницу данных

Я знаю, что очень близок к тому, чтобы этот код заработал, но, должно быть, не хватает чего-то простого.

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

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

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

Вот как я реализовал тестовый код для 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 записей. Последние две итерации этого цикла:

1000

1000

values ​​= {: key1 => 12345,: key2 => 14,58,: key3 => 155,44}

675

1000

values ​​= {: key1 => 12345,: key2 => 14,58,: key3 => 155,44}

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

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


person Steve S.    schedule 31.08.2016    source источник


Ответы (1)


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

person Jeremy Evans    schedule 31.08.2016
comment
Спасибо, Джереми ... Конечная цель моей попытки использовать разбиение на страницы состояла в том, чтобы иметь возможность прокручивать большие наборы данных, не загружая их все сразу в память. Поскольку я могу сделать это, просто используя .each в обычном наборе данных, мне действительно не нужно использовать разбиение на страницы. Я согласен, что это скорее всего проблема с адаптером терадата. - person Steve S.; 02.09.2016