class DatastaxRails::Cql::Select

CQL generation for SELECT

Public Class Methods

new(klass, select) click to toggle source
Calls superclass method DatastaxRails::Cql::Base::new
# File lib/datastax_rails/cql/select.rb, line 5
def initialize(klass, select)
  @select = select.join(',')
  @limit = nil
  @conditions = {}
  @order = nil
  @paginate = nil
  @allow_filtering = nil
  super
end

Public Instance Methods

allow_filtering() click to toggle source
# File lib/datastax_rails/cql/select.rb, line 15
def allow_filtering
  @allow_filtering = true
  self
end
conditions(conditions) click to toggle source
# File lib/datastax_rails/cql/select.rb, line 25
def conditions(conditions)
  @conditions.merge!(conditions)
  self
end
limit(limit) click to toggle source
# File lib/datastax_rails/cql/select.rb, line 30
def limit(limit)
  @limit = limit
  self
end
order(order) click to toggle source
# File lib/datastax_rails/cql/select.rb, line 35
def order(order)
  @order = order
  self
end
paginate(start) click to toggle source
# File lib/datastax_rails/cql/select.rb, line 20
def paginate(start)
  @paginate = start
  self
end
to_cql() click to toggle source
# File lib/datastax_rails/cql/select.rb, line 40
def to_cql
  conditions = []
  stmt = "SELECT #{@select} FROM #{@klass.column_family} "

  if @paginate
    conditions << "token(#{@klass.primary_key}) > token(?)"
    @values << @paginate
  end

  @conditions.each do |k, v|
    if k.to_s == @klass.primary_key && v.is_a?(Array)
      conditions << "\"#{k}\" IN (#{('?' * v.size).split(//).join(',')})"
      @values += v
    else
      v = v.first if v.is_a?(Array)
      conditions << "\"#{k}\" = ?"
      @values << v
    end
  end

  stmt << "WHERE #{conditions.join(' AND ')} " unless conditions.empty?
  stmt << "ORDER BY #{@order} " if @order
  stmt << "LIMIT #{@limit} " if @limit
  stmt << 'ALLOW FILTERING ' if @allow_filtering
  stmt
end