Module: EmSequelAsync::SequelExtensions::Dataset::InstanceMethods

Defined in:
lib/em-sequel-async/sequel_extensions.rb

Constant Summary collapse

STOCK_COUNT_OPTS =
{
  select: [ Sequel::LiteralString.new("COUNT(*)").freeze ],
  order: nil
}.freeze

Instance Method Summary collapse

Instance Method Details

#async_allObject



128
129
130
131
132
133
134
135
136
137
138
# File 'lib/em-sequel-async/sequel_extensions.rb', line 128

def async_all
  async_fetch_rows(sql, :all) do |rows|
    if (row_proc = @row_proc)
      yield(rows.map { |row| row_proc.call(row) })
    else
      yield(rows)
    end
  end

  return
end

#async_count(&callback) ⇒ Object



140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# File 'lib/em-sequel-async/sequel_extensions.rb', line 140

def async_count(&callback)
  if (options_overlap(Sequel::Dataset::COUNT_FROM_SELF_OPTS))
    from_self.async_count(&callback)
  else
    clone(STOCK_COUNT_OPTS).async_each do |row|
      callback.call(
        case (row)
        when Hash
          row.values.first.to_i
        else
          row.values.values.first.to_i
        end
      )
    end
  end
  
  return
end

#async_delete(&block) ⇒ Object



78
79
80
# File 'lib/em-sequel-async/sequel_extensions.rb', line 78

def async_delete(&block)
  self.async_query_return_affected_rows(delete_sql, &block)
end

#async_eachObject



116
117
118
119
120
121
122
123
124
125
126
# File 'lib/em-sequel-async/sequel_extensions.rb', line 116

def async_each
  async_fetch_rows(select_sql, :each) do |row|
    if (row_proc = @row_proc)
      yield(row_proc.call(row))
    else
      yield(row)
    end
  end

  return
end

#async_fetch_rows(sql, iter = :each) ⇒ Object



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/em-sequel-async/sequel_extensions.rb', line 90

def async_fetch_rows(sql, iter = :each)
  self.db.async.query(sql) do |result, time, client, err|
    case (result)
    when Mysql2::Result
      case (iter)
      when :each
        result.each do |row|
          yield(row)
        end
      else
        yield(result.to_a)
      end
    end
  end

  return
end

#async_first(sql) ⇒ Object



108
109
110
111
112
113
114
# File 'lib/em-sequel-async/sequel_extensions.rb', line 108

def async_first(sql)
  async_fetch_rows(sql, :each) do |result, time, client, err|
    yield(rows && rows[0])

    return
  end
end

#async_insert(*args) ⇒ Object



54
55
56
57
58
59
60
# File 'lib/em-sequel-async/sequel_extensions.rb', line 54

def async_insert(*args)
  self.db.async.query(insert_sql(*args)) do |result, time, client, err|
    yield(err ? nil : client.last_id) if (block_given?)
  end

  return
end

#async_insert_ignore(*args, &block) ⇒ Object



70
71
72
# File 'lib/em-sequel-async/sequel_extensions.rb', line 70

def async_insert_ignore(*args, &block)
  self.async_query_return_affected_rows(insert_ignore.insert_sql(*args), &block)
end

#async_multi_insert(*args, &block) ⇒ Object



82
83
84
# File 'lib/em-sequel-async/sequel_extensions.rb', line 82

def async_multi_insert(*args, &block)
  self.async_query_return_affected_rows(multi_insert_sql(*args).first, &block)
end

#async_multi_insert_ignore(*args, &block) ⇒ Object



86
87
88
# File 'lib/em-sequel-async/sequel_extensions.rb', line 86

def async_multi_insert_ignore(*args, &block)
  self.async_query_return_affected_rows(insert_ignore.multi_insert_sql(*args).first, &block)
end

#async_query_return_affected_rows(query) ⇒ Object



62
63
64
65
66
67
68
# File 'lib/em-sequel-async/sequel_extensions.rb', line 62

def async_query_return_affected_rows(query)
  self.db.async.query(query) do |result, time, client, err|
    yield(err ? nil : client.affected_rows) if (block_given?)
  end

  return
end

#async_update(*args, &block) ⇒ Object



74
75
76
# File 'lib/em-sequel-async/sequel_extensions.rb', line 74

def async_update(*args, &block)
  self.async_query_return_affected_rows(update_sql(*args), &block)
end