Class: Sequel::SQLite::JSONBaseOp

Inherits:
Sequel::SQL::Wrapper show all
Defined in:
lib/sequel/extensions/sqlite_json_ops.rb

Overview

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)

Direct Known Subclasses

JSONBOp, JSONOp

Instance Attribute Summary

Attributes inherited from Sequel::SQL::Wrapper

#value

Instance Method Summary collapse

Methods inherited from Sequel::SQL::Wrapper

#initialize

Methods included from Sequel::SQL::IsDistinctFrom::Methods

#is_distinct_from

Methods included from JSONOpMethods

#sqlite_json_op, #sqlite_jsonb_op

Methods included from Postgres::HStoreOpMethods

#hstore

Methods included from Postgres::RangeOpMethods

#pg_range

Methods included from Postgres::ArrayOpMethods

#pg_array

Methods included from Postgres::JSONOpMethods

#pg_json, #pg_jsonb

Methods included from Postgres::InetOpMethods

#pg_inet

Methods included from Postgres::PGRowOp::ExpressionMethods

#pg_row

Methods included from Sequel::SQL::SubscriptMethods

#sql_subscript

Methods included from Sequel::SQL::StringMethods

#escaped_ilike, #escaped_like, #ilike, #like

Methods included from Sequel::SQL::PatternMatchMethods

#!~, #=~

Methods included from Sequel::SQL::OrderMethods

#asc, #desc

Methods included from Sequel::SQL::NumericMethods

#+, #coerce

Methods included from Sequel::SQL::ComplexExpressionMethods

#sql_boolean, #sql_number, #sql_string

Methods included from Sequel::SQL::CastMethods

#cast, #cast_numeric, #cast_string

Methods included from Sequel::SQL::BooleanMethods

#~

Methods included from Sequel::SQL::AliasMethods

#as

Methods inherited from Sequel::SQL::Expression

#==, attr_reader, #clone, #eql?, #hash, inherited, #inspect

Constructor Details

This class inherits a constructor from Sequel::SQL::Wrapper

Instance Method Details

#[](key) ⇒ Object Also known as: get

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]')


91
92
93
# File 'lib/sequel/extensions/sqlite_json_ops.rb', line 91

def [](key)
  json_op(GET, key)
end

#array_length(*args) ⇒ Object

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]')


101
102
103
# File 'lib/sequel/extensions/sqlite_json_ops.rb', line 101

def array_length(*args)
  Sequel::SQL::NumericExpression.new(:NOOP, SQL::Function.new(:json_array_length, self, *args))
end

#each(*args) ⇒ Object

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')


111
112
113
# File 'lib/sequel/extensions/sqlite_json_ops.rb', line 111

def each(*args)
  SQL::Function.new(:json_each, self, *args)
end

#extract(*a) ⇒ Object

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')


121
122
123
# File 'lib/sequel/extensions/sqlite_json_ops.rb', line 121

def extract(*a)
  function(:extract, *a)
end

#get_json(key) ⇒ Object

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]')


132
133
134
# File 'lib/sequel/extensions/sqlite_json_ops.rb', line 132

def get_json(key)
  self.class.new(json_op(GET_JSON, key))
end

#insert(path, value, *args) ⇒ Object

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)


141
142
143
# File 'lib/sequel/extensions/sqlite_json_ops.rb', line 141

def insert(path, value, *args)
  wrapped_function(:insert, path, value, *args)
end

#jsonObject Also known as: minify

Returns an expression for a minified version of the JSON.

json_op.json   # json(json)


148
149
150
# File 'lib/sequel/extensions/sqlite_json_ops.rb', line 148

def json
  JSONOp.new(SQL::Function.new(:json, self))
end

#jsonbObject

Returns the JSONB format of the JSON.

json_op.jsonb   # jsonb(json)


156
157
158
# File 'lib/sequel/extensions/sqlite_json_ops.rb', line 156

def jsonb
  JSONBOp.new(SQL::Function.new(:jsonb, self))
end

#patch(json_patch) ⇒ Object

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}')


163
164
165
# File 'lib/sequel/extensions/sqlite_json_ops.rb', line 163

def patch(json_patch)
  wrapped_function(:patch, json_patch)
end

#remove(path, *paths) ⇒ Object

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')


171
172
173
# File 'lib/sequel/extensions/sqlite_json_ops.rb', line 171

def remove(path, *paths)
  wrapped_function(:remove, path, *paths)
end

#replace(path, value, *args) ⇒ Object

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)


180
181
182
# File 'lib/sequel/extensions/sqlite_json_ops.rb', line 180

def replace(path, value, *args)
  wrapped_function(:replace, path, value, *args)
end

#set(path, value, *args) ⇒ Object

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)


189
190
191
# File 'lib/sequel/extensions/sqlite_json_ops.rb', line 189

def set(path, value, *args)
  wrapped_function(:set, path, value, *args)
end

#tree(*args) ⇒ Object

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')


198
199
200
# File 'lib/sequel/extensions/sqlite_json_ops.rb', line 198

def tree(*args)
  SQL::Function.new(:json_tree, self, *args)
end

#type(*args) ⇒ Object Also known as: typeof

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]')


206
207
208
# File 'lib/sequel/extensions/sqlite_json_ops.rb', line 206

def type(*args)
  Sequel::SQL::StringExpression.new(:NOOP, SQL::Function.new(:json_type, self, *args))
end

#validObject

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



212
213
214
# File 'lib/sequel/extensions/sqlite_json_ops.rb', line 212

def valid
  Sequel::SQL::BooleanExpression.new(:NOOP, SQL::Function.new(:json_valid, self))
end