class Sequel::SQLite::JSONBaseOp

JSONBaseOp is an abstract base wrapper class for a object that defines methods that return Sequel expression objects representing SQLite json operators and functions. It is subclassed by both JSONOp and JSONBOp for json and jsonb specific behavior.

In the method documentation examples, assume that:

json_op = Sequel.sqlite_json_op(:json)

Constants

GET
GET_JSON

Public Instance Methods

[](key) click to toggle source

Returns an expression for getting the JSON array element or object field at the specified path as a SQLite value.

json_op[1]         # (json ->> 1)
json_op['a']       # (json ->> 'a')
json_op['$.a.b']   # (json ->> '$.a.b')
json_op['$[1][2]'] # (json ->> '$[1][2]')
   # File lib/sequel/extensions/sqlite_json_ops.rb
91 def [](key)
92   json_op(GET, key)
93 end
Also aliased as: get
array_length(*args) click to toggle source

Returns an expression for the length of the JSON array, or the JSON array at the given path.

json_op.array_length         # json_array_length(json)
json_op.array_length('$[1]') # json_array_length(json, '$[1]')
    # File lib/sequel/extensions/sqlite_json_ops.rb
101 def array_length(*args)
102   Sequel::SQL::NumericExpression.new(:NOOP, SQL::Function.new(:json_array_length, self, *args))
103 end
each(*args) click to toggle source

Returns an expression for a set of information extracted from the top-level members of the JSON array or object, or the top-level members of the JSON array or object at the given path.

json_op.each        # json_each(json)
json_op.each('$.a') # json_each(json, '$.a')
    # File lib/sequel/extensions/sqlite_json_ops.rb
111 def each(*args)
112   SQL::Function.new(:json_each, self, *args)
113 end
extract(*a) click to toggle source

Returns an expression for the JSON array element or object field at the specified path as a SQLite value, but only accept paths as arguments, and allow the use of multiple paths.

json_op.extract('$.a')        # json_extract(json, '$.a')
json_op.extract('$.a', '$.b') # json_extract(json, '$.a', '$.b')
    # File lib/sequel/extensions/sqlite_json_ops.rb
121 def extract(*a)
122   function(:extract, *a)
123 end
get(key)
Alias for: []
get_json(key) click to toggle source

Returns an expression for getting the JSON array element or object field at the specified path as a JSON value.

json_op.get_json(1)         # (json -> 1)
json_op.get_json('a')       # (json -> 'a')
json_op.get_json('$.a.b')   # (json -> '$.a.b')
json_op.get_json('$[1][2]') # (json -> '$[1][2]')
    # File lib/sequel/extensions/sqlite_json_ops.rb
132 def get_json(key)
133   self.class.new(json_op(GET_JSON, key))
134 end
insert(path, value, *args) click to toggle source

Returns an expression for creating new entries at the given paths in the JSON array or object, but not overwriting existing entries.

json_op.insert('$.a', 1)           # json_insert(json, '$.a', 1)
json_op.insert('$.a', 1, '$.b', 2) # json_insert(json, '$.a', 1, '$.b', 2)
    # File lib/sequel/extensions/sqlite_json_ops.rb
141 def insert(path, value, *args)
142   wrapped_function(:insert, path, value, *args)
143 end
json() click to toggle source

Returns an expression for a minified version of the JSON.

json_op.json   # json(json)
    # File lib/sequel/extensions/sqlite_json_ops.rb
148 def json
149   JSONOp.new(SQL::Function.new(:json, self))
150 end
Also aliased as: minify
jsonb() click to toggle source

Returns the JSONB format of the JSON.

json_op.jsonb   # jsonb(json)
    # File lib/sequel/extensions/sqlite_json_ops.rb
156 def jsonb
157   JSONBOp.new(SQL::Function.new(:jsonb, self))
158 end
minify()
Alias for: json
patch(json_patch) click to toggle source

Returns an expression for updating the JSON object using the RFC 7396 MergePatch algorithm

json_op.patch('{"a": 1, "b": null}') # json_patch(json, '{"a": 1, "b": null}')
    # File lib/sequel/extensions/sqlite_json_ops.rb
163 def patch(json_patch)
164   wrapped_function(:patch, json_patch)
165 end
remove(path, *paths) click to toggle source

Returns an expression for removing entries at the given paths from the JSON array or object.

json_op.remove('$.a')        # json_remove(json, '$.a')
json_op.remove('$.a', '$.b') # json_remove(json, '$.a', '$.b')
    # File lib/sequel/extensions/sqlite_json_ops.rb
171 def remove(path, *paths)
172   wrapped_function(:remove, path, *paths)
173 end
replace(path, value, *args) click to toggle source

Returns an expression for replacing entries at the given paths in the JSON array or object, but not creating new entries.

json_op.replace('$.a', 1)           # json_replace(json, '$.a', 1)
json_op.replace('$.a', 1, '$.b', 2) # json_replace(json, '$.a', 1, '$.b', 2)
    # File lib/sequel/extensions/sqlite_json_ops.rb
180 def replace(path, value, *args)
181   wrapped_function(:replace, path, value, *args)
182 end
set(path, value, *args) click to toggle source

Returns an expression for creating or replacing entries at the given paths in the JSON array or object.

json_op.set('$.a', 1)           # json_set(json, '$.a', 1)
json_op.set('$.a', 1, '$.b', 2) # json_set(json, '$.a', 1, '$.b', 2)
    # File lib/sequel/extensions/sqlite_json_ops.rb
189 def set(path, value, *args)
190   wrapped_function(:set, path, value, *args)
191 end
tree(*args) click to toggle source

Returns an expression for a set of information extracted from the JSON array or object, or the JSON array or object at the given path.

json_op.tree        # json_tree(json)
json_op.tree('$.a') # json_tree(json, '$.a')
    # File lib/sequel/extensions/sqlite_json_ops.rb
198 def tree(*args)
199   SQL::Function.new(:json_tree, self, *args)
200 end
type(*args) click to toggle source

Returns an expression for the type of the JSON value or the JSON value at the given path.

json_op.type         # json_type(json)
json_op.type('$[1]') # json_type(json, '$[1]')
    # File lib/sequel/extensions/sqlite_json_ops.rb
206 def type(*args)
207   Sequel::SQL::StringExpression.new(:NOOP, SQL::Function.new(:json_type, self, *args))
208 end
Also aliased as: typeof
typeof(*args)
Alias for: type
valid() click to toggle source

Returns a boolean expression for whether the JSON is valid or not.

    # File lib/sequel/extensions/sqlite_json_ops.rb
212 def valid
213   Sequel::SQL::BooleanExpression.new(:NOOP, SQL::Function.new(:json_valid, self))
214 end

Private Instance Methods

function(name, *args) click to toggle source

Internals of the methods that return functions prefixed with json_.

    # File lib/sequel/extensions/sqlite_json_ops.rb
224 def function(name, *args)
225   SQL::Function.new("#{function_prefix}_#{name}", self, *args)
226 end
json_op(str, args) click to toggle source

Internals of the [], get, get_json methods, using a placeholder literal string.

    # File lib/sequel/extensions/sqlite_json_ops.rb
219 def json_op(str, args)
220   self.class.new(Sequel::SQL::PlaceholderLiteralString.new(str, [self, args]))
221 end
wrapped_function(*args) click to toggle source

Internals of the methods that return functions prefixed with json_, that return JSON values.

    # File lib/sequel/extensions/sqlite_json_ops.rb
230 def wrapped_function(*args)
231   self.class.new(function(*args))
232 end