Method: Fast::SQL.parse
- Defined in:
- lib/fast/sql.rb
.parse(statement, buffer_name: "(sql)") ⇒ Object
Parses SQL statements Using PGQuery
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 |