Last Modified
2013-07-31 01:34:14 +0000
Requires

Description

The pg_hstore_ops extension adds support to Sequel's DSL to make it easier to call PostgreSQL hstore functions and operators.

To load the extension:

Sequel.extension :pg_hstore_ops

The most common usage is taking an object that represents an SQL expression (such as a :symbol), and calling Sequel.hstore_op with it:

h = Sequel.hstore_op(:hstore_column)

If you have also loaded the pg_hstore extension, you can use Sequel.hstore as well:

h = Sequel.hstore(:hstore_column)

Also, on most Sequel expression objects, you can call the hstore method:

h = Sequel.expr(:hstore_column).hstore

If you have loaded the core_extensions extension), or you have loaded the core_refinements extension) and have activated refinements for the file, you can also use Symbol#hstore:

h = :hstore_column.hstore

This creates a Sequel::Postgres::HStoreOp object that can be used for easier querying:

h - 'a'    # hstore_column - CAST('a' AS text)
h['a']     # hstore_column -> 'a'

h.concat(:other_hstore_column)       # ||
h.has_key?('a')                      # ?
h.contain_all(:array_column)         # ?&
h.contain_any(:array_column)         # ?|
h.contains(:other_hstore_column)     # @> 
h.contained_by(:other_hstore_column) # <@

h.defined        # defined(hstore_column)
h.delete('a')    # delete(hstore_column, 'a')
h.each           # each(hstore_column)
h.keys           # akeys(hstore_column)
h.populate(:a)   # populate_record(a, hstore_column)
h.record_set(:a) # (a #= hstore_column)
h.skeys          # skeys(hstore_column)
h.slice(:a)      # slice(hstore_column, a)
h.svals          # svals(hstore_column)
h.to_array       # hstore_to_array(hstore_column)
h.to_matrix      # hstore_to_matrix(hstore_column)
h.values         # avals(hstore_column)

See the PostgreSQL hstore function and operator documentation for more details on what these functions and operators do.

If you are also using the pg_hstore extension, you should load it before loading this extension. Doing so will allow you to use HStore#op to get an HStoreOp, allowing you to perform hstore operations on hstore literals.