Class: Sequel::Postgres::JSONBSubscriptOp

Inherits:
SQL::Expression show all
Defined in:
lib/sequel/extensions/pg_json_ops.rb

Overview

Represents JSONB subscripts. This is abstracted because the subscript support depends on the database version.

Constant Summary collapse

SUBSCRIPT =
["".freeze, "[".freeze, "]".freeze].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from SQL::Expression

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

Constructor Details

#initialize(expression, sub) ⇒ JSONBSubscriptOp

Set the expression and subscript to the given arguments



637
638
639
640
641
# File 'lib/sequel/extensions/pg_json_ops.rb', line 637

def initialize(expression, sub)
  @expression = expression
  @sub = sub
  freeze
end

Instance Attribute Details

#expressionObject (readonly)

The expression being subscripted



631
632
633
# File 'lib/sequel/extensions/pg_json_ops.rb', line 631

def expression
  @expression
end

#subObject (readonly)

The subscript to use



634
635
636
# File 'lib/sequel/extensions/pg_json_ops.rb', line 634

def sub
  @sub
end

Instance Method Details

#sequel_ast_transform(transformer) ⇒ Object

Support transforming of jsonb subscripts



651
652
653
# File 'lib/sequel/extensions/pg_json_ops.rb', line 651

def sequel_ast_transform(transformer)
  self.class.new(transformer.call(@expression), transformer.call(@sub))
end

#to_s_append(ds, sql) ⇒ Object

Use subscripts instead of -> operator on PostgreSQL 14+



644
645
646
647
648
# File 'lib/sequel/extensions/pg_json_ops.rb', line 644

def to_s_append(ds, sql)
  server_version = ds.db.server_version
  frag = server_version && server_version >= 140000 ? SUBSCRIPT : JSONOp::GET
  ds.literal_append(sql, Sequel::SQL::PlaceholderLiteralString.new(frag, [@expression, @sub]))
end