class HuggORM::Query
Attributes
_command[R]
_limit[R]
_offset[R]
_order[R]
_returning[R]
_where[R]
column_name[R]
table[R]
values[R]
Public Class Methods
new(table, column_name = 'data')
click to toggle source
# File lib/hugg_orm/query.rb, line 6 def initialize(table, column_name = 'data') @table = table @column_name = column_name @values = [] end
Public Instance Methods
count()
click to toggle source
# File lib/hugg_orm/query.rb, line 52 def count @_command = "SELECT COUNT(*) FROM #{@table}" run.getvalue(0, 0).to_i end
delete()
click to toggle source
# File lib/hugg_orm/query.rb, line 47 def delete @_command = "DELETE FROM #{@table}" run.cmd_tuples end
insert(data)
click to toggle source
# File lib/hugg_orm/query.rb, line 22 def insert(data) @_command = "INSERT INTO #{@table} (#{@column_name}) VALUES (#{next_placeholder})" @values << data.to_json pg_result = run pg_result.cmd_tuples end
limit(limit, offset = nil)
click to toggle source
# File lib/hugg_orm/query.rb, line 64 def limit(limit, offset = nil) @_limit = "LIMIT #{next_placeholder}" @values << limit self.offset(offset) if offset self end
offset(offset)
click to toggle source
# File lib/hugg_orm/query.rb, line 71 def offset(offset) @_offset = "OFFSET #{next_placeholder}" @values << offset self end
order(*args)
click to toggle source
# File lib/hugg_orm/query.rb, line 77 def order(*args) fields = [] args.first.each_pair { |field, order| fields << "#{wrap_json(field)} #{order}" } @_order = "ORDER BY #{fields.join(', ')}" self end
run()
click to toggle source
# File lib/hugg_orm/query.rb, line 12 def run HuggORM::Connection.db.exec_params(to_sql, @values) end
select()
click to toggle source
# File lib/hugg_orm/query.rb, line 41 def select @_command = "SELECT #{@column_name} FROM #{@table}" pg_result = run pg_result.map { |tuple| deserialize(tuple["#{@column_name}"]) } end
to_sql()
click to toggle source
# File lib/hugg_orm/query.rb, line 16 def to_sql sql = "#{@_command} #{@_where} #{@_order} #{@_limit} #{@_offset} #{@_returning}".strip sql.gsub!(/\s{2,}/, ' ') sql end
update(data, return_data = false)
click to toggle source
# File lib/hugg_orm/query.rb, line 29 def update(data, return_data = false) @_command = "UPDATE #{@table} SET #{@column_name} = #{@column_name} || #{next_placeholder}::jsonb" @values << data.to_json if return_data @_returning = "RETURNING #{@column_name}" return run.map { |tuple| deserialize(tuple["#{@column_name}"]) } end run.cmd_tuples end
where(conditions, values = [])
click to toggle source
# File lib/hugg_orm/query.rb, line 57 def where(conditions, values = []) values.size.times { |i| conditions.sub!(/\?/, next_placeholder(i + 1)) } @_where = "WHERE #{conditions}" @values += values self end
Private Instance Methods
deserialize(data)
click to toggle source
# File lib/hugg_orm/query.rb, line 86 def deserialize(data) JSON.parse(data, symbolize_names: true) end
next_placeholder(offset = 1)
click to toggle source
# File lib/hugg_orm/query.rb, line 90 def next_placeholder(offset = 1) "$#{@values.size + offset}" end
wrap_json(field)
click to toggle source
# File lib/hugg_orm/query.rb, line 94 def wrap_json(field) "#{@column_name}->>'#{field}'" end