169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
|
# File 'lib/active_record/turntable/sql_tree_patch.rb', line 169
def self.parse(tokens)
if SQLTree::Token::Identifier === tokens.peek
tokens.next
table_reference = self.new(tokens.current.literal)
if tokens.peek && !tokens.peek.possible_index_hint? &&
(SQLTree::Token::AS === tokens.peek || SQLTree::Token::Identifier === tokens.peek)
tokens.consume(SQLTree::Token::AS) if SQLTree::Token::AS === tokens.peek
table_reference.table_alias = tokens.next.literal
end
if tokens.peek && tokens.peek.possible_index_hint? && tokens.peek(2).index_keyword?
table_reference.index_hint = SQLTree::Node::IndexHint.parse(tokens)
end
return table_reference
elsif SQLTree::Token::SELECT === tokens.peek(2)
table_reference = self.new(SQLTree::Node::SubQuery.parse(tokens))
if SQLTree::Token::AS === tokens.peek || SQLTree::Token::Identifier === tokens.peek
tokens.consume(SQLTree::Token::AS) if SQLTree::Token::AS === tokens.peek
table_reference.table_alias = tokens.next.literal
end
table_reference
else
raise SQLTree::Parser::UnexpectedToken, tokens.current
end
end
|