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 130 131 132 |
# File 'lib/sequel/plugins/paged_operations.rb', line 121 def paged_delete(opts=OPTS) if (db.database_type == :oracle && !supports_fetch_next_rows?) || (db.database_type == :mssql && !is_2012_or_later?) raise Error, "paged_delete is not supported on MSSQL/Oracle when using emulated offsets" end 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).
142 143 144 145 146 147 148 |
# File 'lib/sequel/plugins/paged_operations.rb', line 142 def paged_update(values, opts=OPTS) rows_updated = 0 paged_datasets(opts) do |ds| rows_updated += ds.update(values) end rows_updated end |