class Sequel::Postgres::JSONTableOp

  1. lib/sequel/extensions/pg_json_ops.rb
Superclass: Expression

Object representing json_table calls

Methods

Public Class

  1. new

Public Instance

  1. sequel_ast_transform
  2. to_s_append

Public Class methods

new(expr, path, opts=OPTS, &block)

See JSONBaseOp#table for documentation on the options.

[show source]
     # File lib/sequel/extensions/pg_json_ops.rb
1232 def initialize(expr, path, opts=OPTS, &block)
1233   @expr = expr
1234   @path = path
1235   @passing = opts[:passing]
1236   @on_error = opts[:on_error]
1237   @columns = opts[:_columns] || ColumnDSL.columns(&block)
1238   freeze
1239 end

Public Instance methods

sequel_ast_transform(transformer)

Support transforming of json_table expression

[show source]
     # File lib/sequel/extensions/pg_json_ops.rb
1269 def sequel_ast_transform(transformer)
1270   opts = {:on_error=>@on_error, :_columns=>@columns}
1271 
1272   if @passing
1273     passing = opts[:passing] = {}
1274     @passing.each do |k, v|
1275       passing[k] = transformer.call(v)
1276     end
1277   end
1278 
1279   self.class.new(transformer.call(@expr), @path, opts)
1280 end
to_s_append(ds, sql)

Append the json_table function call expression to the SQL

[show source]
     # File lib/sequel/extensions/pg_json_ops.rb
1242 def to_s_append(ds, sql)
1243   sql << 'json_table('
1244   ds.literal_append(sql, @expr)
1245   sql << ', '
1246   default_literal_append(ds, sql, @path)
1247 
1248   if (passing = @passing) && !passing.empty?
1249     sql << ' PASSING '
1250     comma = false
1251     passing.each do |k, v|
1252       if comma
1253         sql << ', '
1254       else
1255         comma = true
1256       end
1257       ds.literal_append(sql, v)
1258       sql << " AS "
1259       ds.send(:identifier_append, sql, k)
1260     end
1261   end
1262 
1263   to_s_append_columns(ds, sql, @columns)
1264   sql << TABLE_ON_ERROR_SQL.fetch(@on_error) if @on_error
1265   sql << ')'
1266 end