class TrinoSqlParser

Constants

VERSION

Public Class Methods

new(with_tokens: false) click to toggle source
# File lib/trino_sql_parser.rb, line 38
def initialize(with_tokens: false)
  @support_process = SupportProcess.new(with_tokens: with_tokens)
end

Public Instance Methods

parse(sql) click to toggle source
# File lib/trino_sql_parser.rb, line 42
def parse(sql)
  unless sql.is_a?(String)
    raise ArgumentError, "SQL must be a String but got #{sql.class}"
  end
  request_line = JSON.dump({"sql" => sql})

  success = false
  begin
    @support_process.send_line(request_line)
    response_line = @support_process.receive_line
    raise "Process crashed" unless response_line
    response = JSON.parse(response_line)
    statements = response['statements']
    errors = response['errors']
    success = true
  rescue => e
    raise "Support process failed with an error: #{e}"
  ensure
    @support_process.kill! unless success
  end

  if errors
    raise ParseError.new(errors)
  end

  statements.map do |h|
    h.reject! {|k, v| v == nil }
  end

  statements
end