Method: Fast::SQL.parse

Defined in:
lib/fast/sql.rb

.parse(statement, buffer_name: "(sql)") ⇒ Object

Parses SQL statements Using PGQuery

See Also:

  • sql_to_h


110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/fast/sql.rb', line 110

def parse(statement, buffer_name: "(sql)")
  return [] if statement.nil?
  source_buffer = SQL::SourceBuffer.new(buffer_name, source: statement)
  tree = PgQuery.parse(statement).tree
  stmts = tree.stmts.map do |stmt|
    v = clean_structure(stmt.stmt.to_h)
    inner_stmt = statement[stmt.stmt_location, stmt.stmt_len]
    first, *, last = source_buffer.tokens
    from = stmt.stmt_location
    to = from.zero? ? last.end : from + stmt.stmt_len
    expression = Parser::Source::Range.new(source_buffer, from, to)
    source_map = Parser::Source::Map.new(expression)
    sql_tree_to_ast(v, source_buffer: source_buffer, source_map: source_map)
  end.flatten
  stmts.one? ? stmts.first : stmts
end