Class: CassandraObject::Adapters::CassandraAdapter::QueryBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/cassandra_object/adapters/cassandra_adapter.rb

Instance Method Summary collapse

Constructor Details

#initialize(adapter, scope) ⇒ QueryBuilder

Returns a new instance of QueryBuilder.



27
28
29
30
# File 'lib/cassandra_object/adapters/cassandra_adapter.rb', line 27

def initialize(adapter, scope)
  @adapter  = adapter
  @scope    = scope
end

Instance Method Details

#escape_where_value(value) ⇒ Object



77
78
79
80
81
82
83
84
85
86
# File 'lib/cassandra_object/adapters/cassandra_adapter.rb', line 77

def escape_where_value(value)
  if value.is_a?(Array)
    value.map { |v| escape_where_value(v) }.join(",")
  elsif value.is_a?(String)
    value = value.gsub("'", "''")
    "'#{value}'"
  else
    value
  end
end

#format_where_statement(where_value) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/cassandra_object/adapters/cassandra_adapter.rb', line 63

def format_where_statement(where_value)
  if where_value.is_a?(String)
    [where_value]
  elsif where_value.is_a?(Hash)
    where_value.map do |column, value|
      if value.is_a?(Array)
        "#{column} IN (#{escape_where_value(value)})"
      else
        "#{column} = #{escape_where_value(value)}"
      end
    end
  end
end

#limit_stringObject



88
89
90
91
92
93
94
# File 'lib/cassandra_object/adapters/cassandra_adapter.rb', line 88

def limit_string
  if @scope.limit_value
    "LIMIT #{@scope.limit_value}"
  else
    ""
  end
end

#select_stringObject



41
42
43
44
45
46
47
# File 'lib/cassandra_object/adapters/cassandra_adapter.rb', line 41

def select_string
  if @scope.select_values.any?
    (['KEY'] | @scope.select_values) * ','
  else
    '*'
  end
end

#to_queryObject



32
33
34
35
36
37
38
39
# File 'lib/cassandra_object/adapters/cassandra_adapter.rb', line 32

def to_query
  [
    "SELECT #{select_string} FROM #{@scope.klass.column_family}",
    @adapter.write_option_string,
    where_string,
    limit_string
  ].delete_if(&:blank?) * ' '
end

#where_stringObject



49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/cassandra_object/adapters/cassandra_adapter.rb', line 49

def where_string
  if @scope.where_values.any?
    wheres = []

    @scope.where_values.map do |where_value|
      wheres.concat format_where_statement(where_value)
    end

    "WHERE #{wheres * ' AND '}"
  else
    ''
  end
end