Module: Sequel::Plugins::PagedOperations::DatasetMethods
- Defined in:
- lib/sequel/plugins/paged_operations.rb
Instance Method Summary collapse
-
#paged_datasets(opts = OPTS) {|ds| ... } ⇒ Object
Yield datasets for subsets of the receiver that are limited to no more than 1000 rows (you can configure the number of rows using
:rows_per_page
). -
#paged_delete(opts = OPTS) ⇒ Object
Delete all rows of the dataset using using multiple queries so that no more than 1000 rows are deleted at a time (you can configure the number of rows using
:rows_per_page
). -
#paged_update(values, opts = OPTS) ⇒ Object
Update all rows of the dataset using using multiple queries so that no more than 1000 rows are updated at a time (you can configure the number of rows using
:rows_per_page
).
Instance Method Details
#paged_datasets(opts = OPTS) {|ds| ... } ⇒ Object
Yield datasets for subsets of the receiver that are limited to no more than 1000 rows (you can configure the number of rows using :rows_per_page
).
Options:
- :rows_per_page
-
The maximum number of rows in each yielded dataset (unless concurrent modifications are made to the table).
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/sequel/plugins/paged_operations.rb', line 91 def paged_datasets(opts=OPTS) unless defined?(yield) return enum_for(:paged_datasets, opts) end pk = _paged_operations_pk(:paged_update) base_offset_ds = offset_ds = _paged_operations_offset_ds(opts) first = nil while last = offset_ds.get(pk) ds = where(pk < last) ds = ds.where(pk >= first) if first yield ds first = last offset_ds = base_offset_ds.where(pk >= first) end ds = self ds = ds.where(pk >= first) if first yield ds nil end |
#paged_delete(opts = OPTS) ⇒ Object
Delete all rows of the dataset using using multiple queries so that no more than 1000 rows are deleted at a time (you can configure the number of rows using :rows_per_page
).
Options:
- :rows_per_page
-
The maximum number of rows affected by each DELETE query (unless concurrent modifications are made to the table).
121 122 123 124 125 126 127 128 129 |
# File 'lib/sequel/plugins/paged_operations.rb', line 121 def paged_delete(opts=OPTS) pk = _paged_operations_pk(:paged_delete) rows_deleted = 0 offset_ds = _paged_operations_offset_ds(opts) while last = offset_ds.get(pk) rows_deleted += where(pk < last).delete end rows_deleted + delete end |
#paged_update(values, opts = OPTS) ⇒ Object
Update all rows of the dataset using using multiple queries so that no more than 1000 rows are updated at a time (you can configure the number of rows using :rows_per_page
). All arguments are passed to Dataset#update.
Options:
- :rows_per_page
-
The maximum number of rows affected by each UPDATE query (unless concurrent modifications are made to the table).
139 140 141 142 143 144 145 |
# File 'lib/sequel/plugins/paged_operations.rb', line 139 def paged_update(values, opts=OPTS) rows_updated = 0 paged_datasets(opts) do |ds| rows_updated += ds.update(values) end rows_updated end |