Class: Sequel::Postgres::JSONTableOp

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

Overview

Object representing json_table calls

Instance Method Summary collapse

Methods inherited from SQL::Expression

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

Constructor Details

#initialize(expr, path, opts = OPTS, &block) ⇒ JSONTableOp

See JSONBaseOp#table for documentation on the options.



1224
1225
1226
1227
1228
1229
1230
1231
# File 'lib/sequel/extensions/pg_json_ops.rb', line 1224

def initialize(expr, path, opts=OPTS, &block)
  @expr = expr
  @path = path
  @passing = opts[:passing]
  @on_error = opts[:on_error]
  @columns = opts[:_columns] || ColumnDSL.columns(&block)
  freeze
end

Instance Method Details

#sequel_ast_transform(transformer) ⇒ Object

Support transforming of json_table expression



1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
# File 'lib/sequel/extensions/pg_json_ops.rb', line 1260

def sequel_ast_transform(transformer)
  opts = {:on_error=>@on_error, :_columns=>@columns}

  if @passing
    passing = opts[:passing] = {}
    @passing.each do |k, v|
      passing[k] = transformer.call(v)
    end
  end

  self.class.new(transformer.call(@expr), @path, opts)
end

#to_s_append(ds, sql) ⇒ Object

Append the json_table function call expression to the SQL



1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
# File 'lib/sequel/extensions/pg_json_ops.rb', line 1234

def to_s_append(ds, sql)
  sql << 'json_table('
  ds.literal_append(sql, @expr)
  sql << ', '
  default_literal_append(ds, sql, @path)

  if (passing = @passing) && !passing.empty?
    sql << ' PASSING '
    comma = false
    passing.each do |k, v|
      if comma
        sql << ', '
      else
        comma = true
      end
      ds.literal_append(sql, v)
      sql << " AS " << k.to_s
    end
  end

  to_s_append_columns(ds, sql, @columns)
  sql << TABLE_ON_ERROR_SQL.fetch(@on_error) if @on_error
  sql << ')'
end