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
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, line 90 def [](key) json_op(GET, key) end
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, line 100 def array_length(*args) Sequel::SQL::NumericExpression.new(:NOOP, SQL::Function.new(:json_array_length, self, *args)) end
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, line 110 def each(*args) SQL::Function.new(:json_each, self, *args) end
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, line 120 def extract(*a) function(:extract, *a) end
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, line 131 def get_json(key) self.class.new(json_op(GET_JSON, key)) end
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, line 140 def insert(path, value, *args) wrapped_function(:insert, path, value, *args) end
Returns an expression for a minified version of the JSON.
json_op.json # json(json)
# File lib/sequel/extensions/sqlite_json_ops.rb, line 147 def json JSONOp.new(SQL::Function.new(:json, self)) end
Returns the JSONB format of the JSON.
json_op.jsonb # jsonb(json)
# File lib/sequel/extensions/sqlite_json_ops.rb, line 155 def jsonb JSONBOp.new(SQL::Function.new(:jsonb, self)) end
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, line 162 def patch(json_patch) wrapped_function(:patch, json_patch) end
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, line 170 def remove(path, *paths) wrapped_function(:remove, path, *paths) end
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, line 179 def replace(path, value, *args) wrapped_function(:replace, path, value, *args) end
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, line 188 def set(path, value, *args) wrapped_function(:set, path, value, *args) end
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, line 197 def tree(*args) SQL::Function.new(:json_tree, self, *args) end
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, line 205 def type(*args) Sequel::SQL::StringExpression.new(:NOOP, SQL::Function.new(:json_type, self, *args)) end
Returns a boolean expression for whether the JSON is valid or not.
# File lib/sequel/extensions/sqlite_json_ops.rb, line 211 def valid Sequel::SQL::BooleanExpression.new(:NOOP, SQL::Function.new(:json_valid, self)) end
Private Instance Methods
Internals of the methods that return functions prefixed with
json_
.
# File lib/sequel/extensions/sqlite_json_ops.rb, line 223 def function(name, *args) SQL::Function.new("#{function_prefix}_#{name}", self, *args) end
Internals of the [], get, #get_json methods, using a placeholder literal string.
# File lib/sequel/extensions/sqlite_json_ops.rb, line 218 def json_op(str, args) self.class.new(Sequel::SQL::PlaceholderLiteralString.new(str, [self, args])) end
Internals of the methods that return functions prefixed with
json_
, that return JSON values.
# File lib/sequel/extensions/sqlite_json_ops.rb, line 229 def wrapped_function(*args) self.class.new(function(*args)) end