Sequel :: Model paginate / each_page只返回数据的第一页

时间:2016-08-31 15:26:36

标签: ruby sequel

我知道我非常接近使这段代码正常工作,但必须遗漏一些简单的东西。

我有一系列teradata和oracle表格,我使用续集::模型进行抽象。我已将分页扩展名加载到数据库中。我可以返回一个数据集,但无论我做什么,我都不能让它给我除第一页以外的任何东西。

以下是我如何抽象表格的示例。

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 =&gt; 12345,:key2 =&gt; 14.58,:key3 =&gt; 155.44}

675

1000

values = {:key1 =&gt; 12345,:key2 =&gt; 14.58,:key3 =&gt; 155.44}

所以......正在创建适当数量的页面。并且分页记录的基础计数是正确的。但是当我尝试获取页面中的实际值时,它只从第一页获取记录,包括记录计数。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

Maybe page.first is removing the offset from the dataset? I can't recreate your results. It's possible the issue is in the teradata adapter (which is external adapter not part of Sequel itself). You may want to try page.from_self.first, or page.limit(1).all[0] and see if the results are different, as well as post an SQL log (which you can probably generate using tera_db.loggers << Logger.new($stdout))