class RailsNewsfeed::Connection
Public Class Methods
batch_cqls(cqls, options = {})
click to toggle source
executes batch
# File lib/rails_newsfeed/connection.rb, line 54 def self.batch_cqls(cqls, options = {}) return true if cqls.empty? batch = connection.batch do |b| cqls.each do |cql| b.add(cql) end end exec_cql(batch, options) end
config()
click to toggle source
gets config
# File lib/rails_newsfeed/connection.rb, line 37 def self.config YAML.load_file('config/cassandra.yml')[Rails.env] end
connection()
click to toggle source
gets cassandra connection
# File lib/rails_newsfeed/connection.rb, line 42 def self.connection return @connection if @connection cfg = config @connection = Cassandra.cluster(cfg || {}).connect(cfg['keyspace']) end
delete(tbl, schema, conditions, to_cql = false)
click to toggle source
deletes
# File lib/rails_newsfeed/connection.rb, line 84 def self.delete(tbl, schema, conditions, to_cql = false) cql = "DELETE FROM #{tbl} WHERE #{exported_col_val(schema, conditions).join(' AND ')}" return cql if to_cql exec_cql(cql) true end
exec_cql(cql, options = {})
click to toggle source
executes cql
# File lib/rails_newsfeed/connection.rb, line 49 def self.exec_cql(cql, options = {}) connection.execute(cql, options) end
insert(tbl, schema, vals, to_cql = false)
click to toggle source
inserts
# File lib/rails_newsfeed/connection.rb, line 65 def self.insert(tbl, schema, vals, to_cql = false) cql = "INSERT INTO #{tbl} (#{vals.keys.join(',')}) VALUES (#{cass_vals(schema, vals)})" return cql if to_cql exec_cql(cql) true end
select(tbl, schema = {}, columns = '*', conditions = {}, options = {})
click to toggle source
selects
# File lib/rails_newsfeed/connection.rb, line 92 def self.select(tbl, schema = {}, columns = '*', conditions = {}, options = {}) cql = 'SELECT ' cql += columns unless columns.is_a?(Array) cql += columns.join(',') if columns.is_a?(Array) cql += " FROM #{tbl}" cql += " WHERE #{exported_col_val(schema, conditions).join(' AND ')}" unless conditions.empty? if options[:filtering] cql += ' ALLOW FILTERING' options.delete(:filtering) end exec_cql(cql, options) end
update(tbl, schema, conditions, vals, to_cql = false)
click to toggle source
updates
# File lib/rails_newsfeed/connection.rb, line 73 def self.update(tbl, schema, conditions, vals, to_cql = false) # unsets primary keys conditions.keys.each { |k| vals.delete(k) } val_s = exported_col_val(schema, vals).join(',') cql = "UPDATE #{tbl} SET #{val_s} WHERE #{exported_col_val(schema, conditions).join(' AND ')}" return cql if to_cql exec_cql(cql) true end
Private Class Methods
cass_val(val, type)
click to toggle source
exports a value to cassandra value
# File lib/rails_newsfeed/connection.rb, line 7 def cass_val(val, type) return 'null' if val.nil? case type when :ascii, :text, :varchar, :timestamp return "'#{val.to_s.gsub("'", "''")}'" else val end end
cass_vals(schema, vals)
click to toggle source
exports values to cassandra values
# File lib/rails_newsfeed/connection.rb, line 18 def cass_vals(schema, vals) cass_vals = [] vals.each do |col, val| cass_vals.push(cass_val(val, schema[col])) end cass_vals.join(',') end
exported_col_val(schema, col_val_pair)
click to toggle source
exports column value pair
# File lib/rails_newsfeed/connection.rb, line 27 def exported_col_val(schema, col_val_pair) a = [] col_val_pair.each do |col, val| a.push("#{col}=#{cass_val(val, schema[col])}") end a end