Class: Cequel::Metal::DataSet
- Inherits:
-
Object
- Object
- Cequel::Metal::DataSet
- Extended by:
- Util::Forwardable
- Includes:
- Enumerable
- Defined in:
- lib/cequel/metal/data_set.rb
Overview
Encapsulates a data set, specified as a table and optionally various query elements.
Instance Attribute Summary collapse
- #allow_filtering ⇒ Object readonly
-
#keyspace ⇒ Keyspace
readonly
Keyspace that this data set’s table resides in.
-
#query_consistency ⇒ Symbol
readonly
What consistency level queries from this data set will use.
- #query_page_size ⇒ Object readonly
- #query_paging_state ⇒ Object readonly
-
#row_limit ⇒ Integer
readonly
Maximum number of rows to return, ‘nil` if no limit.
-
#row_specifications ⇒ Array<RowSpecification>
readonly
Row specifications limiting the result rows returned by this data set.
-
#select_columns ⇒ Array<Symbol>
readonly
Columns that this data set restricts result rows to; empty if none.
-
#sort_order ⇒ Hash<Symbol,Symbol>
readonly
Map of column names to sort directions.
-
#table_name ⇒ Symbol
readonly
Name of the table that this data set retrieves data from.
-
#ttl_columns ⇒ Array<Symbol>
readonly
Columns that this data set will select the TTLs of.
-
#writetime_columns ⇒ Array<Symbol>
readonly
Columns that this data set will select the writetimes of.
Instance Method Summary collapse
- #==(other) ⇒ Boolean
- #allow_filtering! ⇒ Object
- #allow_filtering_cql ⇒ Object
-
#consistency(consistency) ⇒ DataSet
Change the consistency for queries performed by this data set.
- #count ⇒ Object (also: #length, #size)
-
#cql ⇒ Statement
CQL ‘SELECT` statement encoding this data set’s scope.
-
#decrement(deltas, options = {}) ⇒ void
(also: #decr)
Decrement one or more counter columns.
- #delete(*columns, &block) ⇒ void
-
#each ⇒ Enumerator, void
Enumerate over rows in this data set.
-
#first ⇒ Hash
The first row in this data set.
-
#increment(deltas, options = {}) ⇒ void
(also: #incr)
Increment one or more counter columns.
-
#initialize(table_name, keyspace) ⇒ DataSet
constructor
private
A new instance of DataSet.
-
#insert(data, options = {}) ⇒ void
Insert a row into the column family.
- #inspect ⇒ String
-
#last_page? ⇒ Boolean
Returns whether no more pages are available.
-
#limit(limit) ⇒ DataSet
Limit the number of rows returned by this data set.
-
#list_append(column, elements, options = {}) ⇒ void
Append element(s) to a list in the row(s) matched by this data set.
-
#list_prepend(column, elements, options = {}) ⇒ void
Prepend element(s) to a list in the row(s) matched by this data set.
-
#list_remove(column, value, options = {}) ⇒ void
Remove all occurrences of a given value from a list column.
-
#list_remove_at(column, *positions, options = {}) ⇒ void
Remove the value from a given position or positions in a list column.
-
#list_replace(column, index, value, options = {}) ⇒ void
Replace a list element at a specified index with a new value.
-
#map_remove(column, *keys, options = {}) ⇒ void
Remove a given key from a map column.
-
#map_update(column, updates, options = {}) ⇒ void
Update one or more keys in a map column.
-
#next_paging_state ⇒ String
Exposes current paging state for stateless pagination.
-
#order(pairs) ⇒ DataSet
Control how the result rows are sorted.
- #page_size(page_size) ⇒ Object
- #paging_state(paging_state) ⇒ Object
- #row_specifications_cql ⇒ Object
-
#select(*columns) ⇒ DataSet
Select specified columns from this data set.
-
#select!(*columns) ⇒ DataSet
Select specified columns from this data set, overriding chained scope.
-
#select_ttl(*columns) ⇒ DataSet
Return the remaining TTL for the specified columns from this data set.
-
#select_writetime(*columns) ⇒ DataSet
(also: #select_timestamp)
Return the write time for the specified columns in the data set.
-
#set_add(column, values, options = {}) ⇒ void
Add one or more elements to a set column.
-
#set_remove(column, value, options = {}) ⇒ void
Remove an element from a set.
-
#update(*args, &block) ⇒ void
Upsert data into one or more rows.
-
#where(row_specification, *bind_vars) ⇒ DataSet
Filter this data set with a row specification.
-
#where!(row_specification, *bind_vars) ⇒ DataSet
Replace existing row specifications.
Methods included from Util::Forwardable
Constructor Details
#initialize(table_name, keyspace) ⇒ DataSet
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of DataSet.
64 65 66 67 68 |
# File 'lib/cequel/metal/data_set.rb', line 64 def initialize(table_name, keyspace) @table_name, @keyspace = table_name, keyspace @select_columns, @ttl_columns, @writetime_columns, @row_specifications, @sort_order = [], [], [], [], {} end |
Instance Attribute Details
#allow_filtering ⇒ Object
53 54 55 |
# File 'lib/cequel/metal/data_set.rb', line 53 def allow_filtering @allow_filtering end |
#keyspace ⇒ Keyspace (readonly)
Returns keyspace that this data set’s table resides in.
27 28 29 |
# File 'lib/cequel/metal/data_set.rb', line 27 def keyspace @keyspace end |
#query_consistency ⇒ Symbol
Returns what consistency level queries from this data set will use.
50 51 52 |
# File 'lib/cequel/metal/data_set.rb', line 50 def query_consistency @query_consistency end |
#query_page_size ⇒ Object
51 52 53 |
# File 'lib/cequel/metal/data_set.rb', line 51 def query_page_size @query_page_size end |
#query_paging_state ⇒ Object
52 53 54 |
# File 'lib/cequel/metal/data_set.rb', line 52 def query_paging_state @query_paging_state end |
#row_limit ⇒ Integer
Returns maximum number of rows to return, ‘nil` if no limit.
46 47 48 |
# File 'lib/cequel/metal/data_set.rb', line 46 def row_limit @row_limit end |
#row_specifications ⇒ Array<RowSpecification> (readonly)
Returns row specifications limiting the result rows returned by this data set.
42 43 44 |
# File 'lib/cequel/metal/data_set.rb', line 42 def row_specifications @row_specifications end |
#select_columns ⇒ Array<Symbol> (readonly)
Returns columns that this data set restricts result rows to; empty if none.
33 34 35 |
# File 'lib/cequel/metal/data_set.rb', line 33 def select_columns @select_columns end |
#sort_order ⇒ Hash<Symbol,Symbol> (readonly)
Returns map of column names to sort directions.
44 45 46 |
# File 'lib/cequel/metal/data_set.rb', line 44 def sort_order @sort_order end |
#table_name ⇒ Symbol (readonly)
Returns name of the table that this data set retrieves data from.
30 31 32 |
# File 'lib/cequel/metal/data_set.rb', line 30 def table_name @table_name end |
#ttl_columns ⇒ Array<Symbol> (readonly)
Returns columns that this data set will select the TTLs of.
36 37 38 |
# File 'lib/cequel/metal/data_set.rb', line 36 def ttl_columns @ttl_columns end |
#writetime_columns ⇒ Array<Symbol> (readonly)
Returns columns that this data set will select the writetimes of.
39 40 41 |
# File 'lib/cequel/metal/data_set.rb', line 39 def writetime_columns @writetime_columns end |
Instance Method Details
#==(other) ⇒ Boolean
673 674 675 |
# File 'lib/cequel/metal/data_set.rb', line 673 def ==(other) cql == other.cql end |
#allow_filtering! ⇒ Object
582 583 584 585 586 |
# File 'lib/cequel/metal/data_set.rb', line 582 def allow_filtering! clone.tap do |data_set| data_set.allow_filtering = true end end |
#allow_filtering_cql ⇒ Object
692 693 694 695 696 697 |
# File 'lib/cequel/metal/data_set.rb', line 692 def allow_filtering_cql if allow_filtering ' ALLOW FILTERING' else '' end end |
#consistency(consistency) ⇒ DataSet
Change the consistency for queries performed by this data set
567 568 569 570 571 |
# File 'lib/cequel/metal/data_set.rb', line 567 def consistency(consistency) clone.tap do |data_set| data_set.query_consistency = consistency end end |
#count ⇒ Object Also known as: length, size
644 645 646 |
# File 'lib/cequel/metal/data_set.rb', line 644 def count raise Cequel::Record::DangerousQueryError.new end |
#cql ⇒ Statement
Returns CQL ‘SELECT` statement encoding this data set’s scope.
653 654 655 656 657 658 659 660 661 |
# File 'lib/cequel/metal/data_set.rb', line 653 def cql statement = Statement.new .append(select_cql) .append(" FROM #{table_name}") .append(*row_specifications_cql) .append(sort_order_cql) .append(limit_cql) .append(allow_filtering_cql) end |
#decrement(deltas, options = {}) ⇒ void Also known as: decr
This method returns an undefined value.
Decrement one or more counter columns
175 176 177 |
# File 'lib/cequel/metal/data_set.rb', line 175 def decrement(deltas, = {}) incrementer { decrement(deltas) }.execute() end |
#delete(options = {}) ⇒ void #delete(*columns, options = {}) ⇒ void #delete(options = {}) { ... } ⇒ void
If enclosed in a Keyspace#batch block, this method will be executed as part of the batch.
This method returns an undefined value.
429 430 431 432 433 434 435 436 437 438 |
# File 'lib/cequel/metal/data_set.rb', line 429 def delete(*columns, &block) = columns. if block deleter(&block).execute() elsif columns.empty? deleter { delete_row }.execute() else deleter { delete_columns(*columns) }.execute() end end |
#each ⇒ Enumerator #each {|Hash| ... } ⇒ void
Enumerate over rows in this data set. Along with #each, all other Enumerable methods are implemented.
629 630 631 632 |
# File 'lib/cequel/metal/data_set.rb', line 629 def each return enum_for(:each) unless block_given? results.each { |row| yield Row.from_result_row(row) } end |
#first ⇒ Hash
Returns the first row in this data set.
637 638 639 640 |
# File 'lib/cequel/metal/data_set.rb', line 637 def first row = execute_cql(*limit(1).cql).first Row.from_result_row(row) end |
#increment(deltas, options = {}) ⇒ void Also known as: incr
This can only be used on counter tables
This method returns an undefined value.
Increment one or more counter columns
158 159 160 |
# File 'lib/cequel/metal/data_set.rb', line 158 def increment(deltas, = {}) incrementer { increment(deltas) }.execute() end |
#insert(data, options = {}) ⇒ void
‘INSERT` statements will succeed even if a row at the specified primary key already exists. In this case, column values specified in the insert will overwrite the existing row.
If a enclosed in a Keyspace#batch block, this method will be executed as part of the batch.
This method returns an undefined value.
Insert a row into the column family.
86 87 88 |
# File 'lib/cequel/metal/data_set.rb', line 86 def insert(data, = {}) inserter { insert(data) }.execute() end |
#inspect ⇒ String
666 667 668 |
# File 'lib/cequel/metal/data_set.rb', line 666 def inspect "#<#{self.class.name}: #{cql.inspect}>" end |
#last_page? ⇒ Boolean
Returns whether no more pages are available
610 611 612 |
# File 'lib/cequel/metal/data_set.rb', line 610 def last_page? results.last_page? end |
#limit(limit) ⇒ DataSet
Limit the number of rows returned by this data set
537 538 539 |
# File 'lib/cequel/metal/data_set.rb', line 537 def limit(limit) clone.tap { |data_set| data_set.row_limit = limit } end |
#list_append(column, elements, options = {}) ⇒ void
If a enclosed in a Keyspace#batch block, this method will be executed as part of the batch.
This method returns an undefined value.
Append element(s) to a list in the row(s) matched by this data set.
223 224 225 |
# File 'lib/cequel/metal/data_set.rb', line 223 def list_append(column, elements, = {}) updater { list_append(column, elements) }.execute() end |
#list_prepend(column, elements, options = {}) ⇒ void
A bug (CASSANDRA-8733) exists in Cassandra versions 0.3.0-2.0.12 and 2.1.0-2.1.2 which will make elements appear in REVERSE ORDER in the list.
If a enclosed in a Keyspace#batch block, this method will be executed as part of the batch.
This method returns an undefined value.
Prepend element(s) to a list in the row(s) matched by this data set.
200 201 202 |
# File 'lib/cequel/metal/data_set.rb', line 200 def list_prepend(column, elements, = {}) updater { list_prepend(column, elements) }.execute() end |
#list_remove(column, value, options = {}) ⇒ void
If enclosed in a Keyspace#batch block, this method will be executed as part of the batch.
This method returns an undefined value.
Remove all occurrences of a given value from a list column
267 268 269 |
# File 'lib/cequel/metal/data_set.rb', line 267 def list_remove(column, value, = {}) updater { list_remove(column, value) }.execute() end |
#list_remove_at(column, *positions, options = {}) ⇒ void
290 291 292 293 294 295 |
# File 'lib/cequel/metal/data_set.rb', line 290 def list_remove_at(column, *positions) = positions. sorted_positions = positions.sort.reverse deleter { list_remove_at(column, *sorted_positions) }.execute() end |
#list_replace(column, index, value, options = {}) ⇒ void
if a enclosed in a Keyspace#batch block, this method will be executed as part of the batch.
This method returns an undefined value.
Replace a list element at a specified index with a new value
245 246 247 |
# File 'lib/cequel/metal/data_set.rb', line 245 def list_replace(column, index, value, = {}) updater { list_replace(column, index, value) }.execute() end |
#map_remove(column, *keys, options = {}) ⇒ void
315 316 317 318 |
# File 'lib/cequel/metal/data_set.rb', line 315 def map_remove(column, *keys) = keys. deleter { map_remove(column, *keys) }.execute() end |
#map_update(column, updates, options = {}) ⇒ void
If enclosed in a Keyspace#batch block, this method will be executed as part of the batch.
This method returns an undefined value.
Update one or more keys in a map column
379 380 381 |
# File 'lib/cequel/metal/data_set.rb', line 379 def map_update(column, updates, = {}) updater { map_update(column, updates) }.execute() end |
#next_paging_state ⇒ String
Exposes current paging state for stateless pagination
601 602 603 |
# File 'lib/cequel/metal/data_set.rb', line 601 def next_paging_state results.paging_state end |
#order(pairs) ⇒ DataSet
The only valid ordering column is the first clustering column
Control how the result rows are sorted
550 551 552 553 554 |
# File 'lib/cequel/metal/data_set.rb', line 550 def order(pairs) clone.tap do |data_set| data_set.sort_order.merge!(pairs.symbolize_keys) end end |
#page_size(page_size) ⇒ Object
573 574 575 576 577 |
# File 'lib/cequel/metal/data_set.rb', line 573 def page_size(page_size) clone.tap do |data_set| data_set.query_page_size = page_size end end |
#paging_state(paging_state) ⇒ Object
588 589 590 591 592 |
# File 'lib/cequel/metal/data_set.rb', line 588 def paging_state(paging_state) clone.tap do |data_set| data_set.query_paging_state = paging_state end end |
#row_specifications_cql ⇒ Object
678 679 680 681 682 683 684 685 686 687 688 689 |
# File 'lib/cequel/metal/data_set.rb', line 678 def row_specifications_cql if row_specifications.any? cql_fragments, bind_vars = [], [] row_specifications.each do |spec| cql_with_vars = spec.cql cql_fragments << cql_with_vars.shift bind_vars.concat(cql_with_vars) end [" WHERE #{cql_fragments.join(' AND ')}", *bind_vars] else [''] end end |
#select(*columns) ⇒ DataSet
Select specified columns from this data set.
446 447 448 449 450 |
# File 'lib/cequel/metal/data_set.rb', line 446 def select(*columns) clone.tap do |data_set| data_set.select_columns.concat(columns.flatten) end end |
#select!(*columns) ⇒ DataSet
Select specified columns from this data set, overriding chained scope.
487 488 489 490 491 |
# File 'lib/cequel/metal/data_set.rb', line 487 def select!(*columns) clone.tap do |data_set| data_set.select_columns.replace(columns.flatten) end end |
#select_ttl(*columns) ⇒ DataSet
Return the remaining TTL for the specified columns from this data set.
460 461 462 463 464 |
# File 'lib/cequel/metal/data_set.rb', line 460 def select_ttl(*columns) clone.tap do |data_set| data_set.ttl_columns.concat(columns.flatten) end end |
#select_writetime(*columns) ⇒ DataSet Also known as: select_timestamp
Return the write time for the specified columns in the data set
474 475 476 477 478 |
# File 'lib/cequel/metal/data_set.rb', line 474 def select_writetime(*columns) clone.tap do |data_set| data_set.writetime_columns.concat(columns.flatten) end end |
#set_add(column, values, options = {}) ⇒ void
If enclosed in a Keyspace#batch block, this method will be executed as part of the batch.
This method returns an undefined value.
Add one or more elements to a set column
337 338 339 |
# File 'lib/cequel/metal/data_set.rb', line 337 def set_add(column, values, = {}) updater { set_add(column, values) }.execute() end |
#set_remove(column, value, options = {}) ⇒ void
If enclosed in a Keyspace#batch block, this method will be executed as part of the batch.
This method returns an undefined value.
Remove an element from a set
358 359 360 |
# File 'lib/cequel/metal/data_set.rb', line 358 def set_remove(column, value, = {}) updater { set_remove(column, value) }.execute() end |
#update(column_values, options = {}) ⇒ void #update(options = {}) { ... } ⇒ void
‘UPDATE` statements will succeed even if targeting a row that does not exist. In this case a new row will be created.
This statement will fail unless one or more rows are fully specified by primary key using ‘where`
If a enclosed in a Keyspace#batch block, this method will be executed as part of the batch.
This method returns an undefined value.
Upsert data into one or more rows
131 132 133 134 135 136 137 138 |
# File 'lib/cequel/metal/data_set.rb', line 131 def update(*args, &block) if block updater(&block).execute(args.) else data = args.shift updater { set(data) }.execute(args.) end end |
#where(column_values) ⇒ DataSet #where(cql, *bind_vars) ⇒ DataSet
Filter this data set with a row specification
511 512 513 514 515 516 |
# File 'lib/cequel/metal/data_set.rb', line 511 def where(row_specification, *bind_vars) clone.tap do |data_set| data_set.row_specifications .concat(build_row_specifications(row_specification, bind_vars)) end end |
#where!(row_specification, *bind_vars) ⇒ DataSet
Replace existing row specifications
524 525 526 527 528 529 |
# File 'lib/cequel/metal/data_set.rb', line 524 def where!(row_specification, *bind_vars) clone.tap do |data_set| data_set.row_specifications .replace(build_row_specifications(row_specification, bind_vars)) end end |