class Sequel::Postgres::JSONBOp
JSONBaseOp
subclass for the jsonb type.
In the method documentation examples, assume that:
jsonb_op = Sequel.pg_jsonb(:jsonb)
Constants
- CONCAT
- CONTAINED_BY
- CONTAINS
- CONTAIN_ALL
- CONTAIN_ANY
- DELETE_PATH
- HAS_KEY
- PATH_EXISTS
- PATH_MATCH
Public Instance Methods
Source
# File lib/sequel/extensions/pg_json_ops.rb 597 def -(other) 598 self.class.new(super) 599 end
jsonb expression for deletion of the given argument from the current jsonb.
jsonb_op - "a" # (jsonb - 'a')
Source
# File lib/sequel/extensions/pg_json_ops.rb 576 def [](key) 577 if is_array?(key) 578 super 579 else 580 case @value 581 when Symbol, SQL::Identifier, SQL::QualifiedIdentifier, JSONBSubscriptOp 582 # Only use subscripts for identifiers. In other cases, switching from 583 # the -> operator to [] for subscripts causes SQL syntax issues. You 584 # only need the [] for subscripting when doing assignment, and 585 # assignment is generally done on identifiers. 586 self.class.new(JSONBSubscriptOp.new(self, key)) 587 else 588 super 589 end 590 end 591 end
Support subscript syntax for JSONB.
Sequel::Postgres::JSONBaseOp#[]
Source
# File lib/sequel/extensions/pg_json_ops.rb 605 def concat(other) 606 json_op(CONCAT, wrap_input_jsonb(other)) 607 end
jsonb expression for concatenation of the given jsonb into the current jsonb.
jsonb_op.concat(:h) # (jsonb || h)
Source
# File lib/sequel/extensions/pg_json_ops.rb 612 def contain_all(other) 613 bool_op(CONTAIN_ALL, wrap_input_array(other)) 614 end
Check if the receiver contains all of the keys in the given array:
jsonb_op.contain_all(:a) # (jsonb ?& a)
Source
# File lib/sequel/extensions/pg_json_ops.rb 619 def contain_any(other) 620 bool_op(CONTAIN_ANY, wrap_input_array(other)) 621 end
Check if the receiver contains any of the keys in the given array:
jsonb_op.contain_any(:a) # (jsonb ?| a)
Source
# File lib/sequel/extensions/pg_json_ops.rb 633 def contained_by(other) 634 bool_op(CONTAINED_BY, wrap_input_jsonb(other)) 635 end
Check if the other jsonb contains all entries in the receiver:
jsonb_op.contained_by(:h) # (jsonb <@ h)
Source
# File lib/sequel/extensions/pg_json_ops.rb 626 def contains(other) 627 bool_op(CONTAINS, wrap_input_jsonb(other)) 628 end
Check if the receiver contains all entries in the other jsonb:
jsonb_op.contains(:h) # (jsonb @> h)
Source
# File lib/sequel/extensions/pg_json_ops.rb 640 def delete_path(other) 641 json_op(DELETE_PATH, wrap_input_array(other)) 642 end
Removes the given path from the receiver.
jsonb_op.delete_path(:h) # (jsonb #- h)
Source
# File lib/sequel/extensions/pg_json_ops.rb 647 def has_key?(key) 648 bool_op(HAS_KEY, key) 649 end
Check if the receiver contains the given key:
jsonb_op.has_key?('a') # (jsonb ? 'a')
Source
# File lib/sequel/extensions/pg_json_ops.rb 658 def insert(path, other, insert_after=false) 659 self.class.new(function(:insert, wrap_input_array(path), wrap_input_jsonb(other), insert_after)) 660 end
Inserts the given jsonb value at the given path in the receiver. The default is to insert the value before the given path, but insert_after can be set to true to insert it after the given path.
jsonb_op.insert(['a', 'b'], h) # jsonb_insert(jsonb, ARRAY['a', 'b'], h, false) jsonb_op.insert(['a', 'b'], h, true) # jsonb_insert(jsonb, ARRAY['a', 'b'], h, true)
Source
# File lib/sequel/extensions/pg_json_ops.rb 665 def path_exists(path) 666 bool_op(PATH_EXISTS, path) 667 end
Returns whether the JSON path returns any item for the json object.
json_op.path_exists("$.foo") # (json @? '$.foo')
Source
# File lib/sequel/extensions/pg_json_ops.rb 679 def path_exists!(path, vars=nil, silent=nil) 680 Sequel::SQL::BooleanExpression.new(:NOOP, _path_function(:jsonb_path_exists, path, vars, silent)) 681 end
Returns whether the JSON path returns any item for the json object.
json_op.path_exists!("$.foo") # jsonb_path_exists(json, '$.foo') json_op.path_exists!("$.foo ? ($ > $x)", x: 2) # jsonb_path_exists(json, '$.foo ? ($ > $x)', '{"x":2}') json_op.path_exists!("$.foo ? ($ > $x)", {x: 2}, true) # jsonb_path_exists(json, '$.foo ? ($ > $x)', '{"x":2}', true)
Source
# File lib/sequel/extensions/pg_json_ops.rb 684 def path_exists_tz!(path, vars=nil, silent=nil) 685 Sequel::SQL::BooleanExpression.new(:NOOP, _path_function(:jsonb_path_exists_tz, path, vars, silent)) 686 end
The same as path_exists!
, except that timezone-aware conversions are used for date/time values.
Source
# File lib/sequel/extensions/pg_json_ops.rb 692 def path_match(path) 693 bool_op(PATH_MATCH, path) 694 end
Returns the first item of the result of JSON path predicate check for the json object. Returns nil if the first item is not true or false.
json_op.path_match("$.foo") # (json @@ '$.foo')
Source
# File lib/sequel/extensions/pg_json_ops.rb 707 def path_match!(path, vars=nil, silent=nil) 708 Sequel::SQL::BooleanExpression.new(:NOOP, _path_function(:jsonb_path_match, path, vars, silent)) 709 end
Returns the first item of the result of JSON path predicate check for the json object. Returns nil if the first item is not true or false and silent is true.
json_op.path_match!("$.foo") # jsonb_path_match(json, '$.foo') json_op.path_match!("$.foo ? ($ > $x)", x: 2) # jsonb_path_match(json, '$.foo ? ($ > $x)', '{"x":2}') json_op.path_match!("$.foo ? ($ > $x)", {x: 2}, true) # jsonb_path_match(json, '$.foo ? ($ > $x)', '{"x":2}', true)
Source
# File lib/sequel/extensions/pg_json_ops.rb 712 def path_match_tz!(path, vars=nil, silent=nil) 713 Sequel::SQL::BooleanExpression.new(:NOOP, _path_function(:jsonb_path_match_tz, path, vars, silent)) 714 end
The same as path_match!
, except that timezone-aware conversions are used for date/time values.
Source
# File lib/sequel/extensions/pg_json_ops.rb 727 def path_query(path, vars=nil, silent=nil) 728 _path_function(:jsonb_path_query, path, vars, silent) 729 end
Returns a set of all jsonb values specified by the JSON path for the json object.
json_op.path_query("$.foo") # jsonb_path_query(json, '$.foo') json_op.path_query("$.foo ? ($ > $x)", x: 2) # jsonb_path_query(json, '$.foo ? ($ > $x)', '{"x":2}') json_op.path_query("$.foo ? ($ > $x)", {x: 2}, true) # jsonb_path_query(json, '$.foo ? ($ > $x)', '{"x":2}', true)
Source
# File lib/sequel/extensions/pg_json_ops.rb 747 def path_query_array(path, vars=nil, silent=nil) 748 JSONBOp.new(_path_function(:jsonb_path_query_array, path, vars, silent)) 749 end
Returns a jsonb array of all values specified by the JSON path for the json object.
json_op.path_query_array("$.foo") # jsonb_path_query_array(json, '$.foo') json_op.path_query_array("$.foo ? ($ > $x)", x: 2) # jsonb_path_query_array(json, '$.foo ? ($ > $x)', '{"x":2}') json_op.path_query_array("$.foo ? ($ > $x)", {x: 2}, true) # jsonb_path_query_array(json, '$.foo ? ($ > $x)', '{"x":2}', true)
Source
# File lib/sequel/extensions/pg_json_ops.rb 752 def path_query_array_tz(path, vars=nil, silent=nil) 753 JSONBOp.new(_path_function(:jsonb_path_query_array_tz, path, vars, silent)) 754 end
The same as path_query_array
, except that timezone-aware conversions are used for date/time values.
Source
# File lib/sequel/extensions/pg_json_ops.rb 767 def path_query_first(path, vars=nil, silent=nil) 768 JSONBOp.new(_path_function(:jsonb_path_query_first, path, vars, silent)) 769 end
Returns the first item of the result specified by the JSON path for the json object.
json_op.path_query_first("$.foo") # jsonb_path_query_first(json, '$.foo') json_op.path_query_first("$.foo ? ($ > $x)", x: 2) # jsonb_path_query_first(json, '$.foo ? ($ > $x)', '{"x":2}') json_op.path_query_first("$.foo ? ($ > $x)", {x: 2}, true) # jsonb_path_query_first(json, '$.foo ? ($ > $x)', '{"x":2}', true)
Source
# File lib/sequel/extensions/pg_json_ops.rb 772 def path_query_first_tz(path, vars=nil, silent=nil) 773 JSONBOp.new(_path_function(:jsonb_path_query_first_tz, path, vars, silent)) 774 end
The same as path_query_first
, except that timezone-aware conversions are used for date/time values.
Source
# File lib/sequel/extensions/pg_json_ops.rb 732 def path_query_tz(path, vars=nil, silent=nil) 733 _path_function(:jsonb_path_query_tz, path, vars, silent) 734 end
The same as path_query
, except that timezone-aware conversions are used for date/time values.
Source
# File lib/sequel/extensions/pg_json_ops.rb 777 def pg_jsonb 778 self 779 end
Return the receiver, since it is already a JSONBOp
.
Source
# File lib/sequel/extensions/pg_json_ops.rb 784 def pretty 785 Sequel::SQL::StringExpression.new(:NOOP, function(:pretty)) 786 end
Return a pretty printed version of the receiver as a string expression.
jsonb_op.pretty # jsonb_pretty(jsonb)
Source
# File lib/sequel/extensions/pg_json_ops.rb 794 def set(path, other, create_missing=true) 795 self.class.new(function(:set, wrap_input_array(path), wrap_input_jsonb(other), create_missing)) 796 end
Set the given jsonb value at the given path in the receiver. By default, this will create the value if it does not exist, but create_missing can be set to false to not create a new value.
jsonb_op.set(['a', 'b'], h) # jsonb_set(jsonb, ARRAY['a', 'b'], h, true) jsonb_op.set(['a', 'b'], h, false) # jsonb_set(jsonb, ARRAY['a', 'b'], h, false)
Source
# File lib/sequel/extensions/pg_json_ops.rb 800 def set_lax(path, other, create_missing=true, null_value_treatment='use_json_null') 801 self.class.new(function(:set_lax, wrap_input_array(path), wrap_input_jsonb(other), create_missing, null_value_treatment)) 802 end
The same as set
, except if other
is nil
, then behaves according to null_value_treatment
, which can be one of ‘raise_exception’, ‘use_json_null’ (default), ‘delete_key’, or ‘return_target’.
Private Instance Methods
Source
# File lib/sequel/extensions/pg_json_ops.rb 807 def _path_function(func, path, vars, silent) 808 args = [] 809 if vars 810 if vars.is_a?(Hash) 811 vars = vars.to_json 812 end 813 args << vars 814 815 unless silent.nil? 816 args << silent 817 end 818 end 819 SQL::Function.new(func, self, path, *args) 820 end
Internals of the jsonb SQL/JSON path functions.
Source
# File lib/sequel/extensions/pg_json_ops.rb 824 def bool_op(str, other) 825 Sequel::SQL::BooleanExpression.new(:NOOP, Sequel::SQL::PlaceholderLiteralString.new(str, [value, other])) 826 end
Return a placeholder literal with the given str and args, wrapped in a boolean expression, used by operators that return booleans.
Source
# File lib/sequel/extensions/pg_json_ops.rb 847 def function_name(name) 848 "jsonb_#{name}" 849 end
The jsonb type functions are prefixed with jsonb_
Source
# File lib/sequel/extensions/pg_json_ops.rb 829 def wrap_input_array(obj) 830 if obj.is_a?(Array) && Sequel.respond_to?(:pg_array) 831 Sequel.pg_array(obj) 832 else 833 obj 834 end 835 end
Wrap argument in a PGArray
if it is an array
Source
# File lib/sequel/extensions/pg_json_ops.rb 838 def wrap_input_jsonb(obj) 839 if Sequel.respond_to?(:pg_jsonb) && (obj.is_a?(Array) || obj.is_a?(Hash)) 840 Sequel.pg_jsonb(obj) 841 else 842 obj 843 end 844 end
Wrap argument in a JSONBArray
or JSONBHash
if it is an array or hash.