class Sequel::Postgres::JSONBOp

JSONBaseOp subclass for the jsonb type.

In the method documentation examples, assume that:

jsonb_op = Sequel.pg_jsonb(:jsonb)

Constants

CONTAINED_BY
CONTAINS
CONTAIN_ALL
CONTAIN_ANY
HAS_KEY

Public Instance Methods

contain_all(other) click to toggle source

Check if the receiver contains all of the keys in the given array:

jsonb_op.contain_all(:a) # (jsonb ?& a)
# File lib/sequel/extensions/pg_json_ops.rb, line 270
def contain_all(other)
  bool_op(CONTAIN_ALL, wrap_input_array(other))
end
contain_any(other) click to toggle source

Check if the receiver contains any of the keys in the given array:

jsonb_op.contain_any(:a) # (jsonb ?| a)
# File lib/sequel/extensions/pg_json_ops.rb, line 277
def contain_any(other)
  bool_op(CONTAIN_ANY, wrap_input_array(other))
end
contained_by(other) click to toggle source

Check if the other jsonb contains all entries in the receiver:

jsonb_op.contained_by(:h) # (jsonb <@ h)
# File lib/sequel/extensions/pg_json_ops.rb, line 291
def contained_by(other)
  bool_op(CONTAINED_BY, wrap_input_jsonb(other))
end
contains(other) click to toggle source

Check if the receiver contains all entries in the other jsonb:

jsonb_op.contains(:h) # (jsonb @> h)
# File lib/sequel/extensions/pg_json_ops.rb, line 284
def contains(other)
  bool_op(CONTAINS, wrap_input_jsonb(other))
end
has_key?(key) click to toggle source

Check if the receiver contains the given key:

jsonb_op.has_key?('a') # (jsonb ? 'a')
# File lib/sequel/extensions/pg_json_ops.rb, line 298
def has_key?(key)
  bool_op(HAS_KEY, key)
end
Also aliased as: include?
include?(key)
Alias for: has_key?
pg_jsonb() click to toggle source

Return the receiver, since it is already a JSONBOp.

# File lib/sequel/extensions/pg_json_ops.rb, line 304
def pg_jsonb
  self
end

Private Instance Methods

bool_op(str, other) click to toggle source

Return a placeholder literal with the given str and args, wrapped in a boolean expression, used by operators that return booleans.

# File lib/sequel/extensions/pg_json_ops.rb, line 312
def bool_op(str, other)
  Sequel::SQL::BooleanExpression.new(:NOOP, Sequel::SQL::PlaceholderLiteralString.new(str, [value, other]))
end
function_name(name) click to toggle source

The jsonb type functions are prefixed with jsonb_

# File lib/sequel/extensions/pg_json_ops.rb, line 335
def function_name(name)
  "jsonb_#{name}"
end
wrap_input_array(obj) click to toggle source

Wrap argument in a PGArray if it is an array

# File lib/sequel/extensions/pg_json_ops.rb, line 317
def wrap_input_array(obj)
  if obj.is_a?(Array) && Sequel.respond_to?(:pg_array) 
    Sequel.pg_array(obj)
  else
    obj
  end
end
wrap_input_jsonb(obj) click to toggle source

Wrap argument in a JSONBArray or JSONBHash if it is an array or hash.

# File lib/sequel/extensions/pg_json_ops.rb, line 326
def wrap_input_jsonb(obj)
  if Sequel.respond_to?(:pg_jsonb) && (obj.is_a?(Array) || obj.is_a?(Hash))
    Sequel.pg_jsonb(obj)
  else
    obj
  end
end