Class: SQLTree::Node::IndexHint

Inherits:
Base
  • Object
show all
Defined in:
lib/active_record/turntable/sql_tree_patch.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#quote_field_name

Constructor Details

#initialize(hint_method, hint_key, index_list) ⇒ IndexHint

Returns a new instance of IndexHint.



196
197
198
# File 'lib/active_record/turntable/sql_tree_patch.rb', line 196

def initialize(hint_method, hint_key, index_list)
  @hint_method, @hint_key, @index_list = hint_method, hint_key, index_list
end

Class Method Details

.parse(tokens) ⇒ Object



206
207
208
209
210
211
212
213
214
215
216
217
# File 'lib/active_record/turntable/sql_tree_patch.rb', line 206

def self.parse(tokens)
  hint_method = tokens.next.literal
  if tokens.peek.index_keyword?
    hint_key = tokens.next.literal
    tokens.consume(SQLTree::Token::LPAREN)
    index_list = parse_list(tokens, SQLTree::Node::Expression::Field)
    tokens.consume(SQLTree::Token::RPAREN)
    self.new(hint_method, hint_key, index_list)
  else
    raise SQLTree::Parser::UnexpectedToken.new(tokens.current)
  end
end

Instance Method Details

#to_sql(options = {}) ⇒ Object



200
201
202
203
204
# File 'lib/active_record/turntable/sql_tree_patch.rb', line 200

def to_sql(options={})
  sql = "#{hint_method} #{hint_key} "
  sql << "(#{index_list.map {|idx| idx.to_sql }.join(' ')})"
  sql
end