Sha256: 79e2adf1978a7864a5aac7332dbf98ac61f7197bd5318e95e9966345e7b56e46

Contents?: true

Size: 595 Bytes

Versions: 25

Compression:

Stored size: 595 Bytes

Contents

# frozen_string_literal: true

# Used to parse strings containing one or more SQL statements.
class SqlParser
  def self.find_statement_at_cursor(sql, cursor)
    return sql unless sql.include?(';')

    parts_with_ranges = []
    sql.scan(/[^;]*;[ \n]*/) { |part| parts_with_ranges << [part, 0, part.size] }
    parts_with_ranges.inject(0) do |pos, current|
      current[1] += pos
      current[2] += pos
    end
    part_with_range = parts_with_ranges.find do |current|
      cursor >= current[1] && cursor < current[2]
    end || parts_with_ranges[-1]
    part_with_range[0].strip
  end
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
sqlui-0.1.47 app/sql_parser.rb
sqlui-0.1.46 app/sql_parser.rb
sqlui-0.1.45 app/sql_parser.rb
sqlui-0.1.44 app/sql_parser.rb
sqlui-0.1.43 app/sql_parser.rb
sqlui-0.1.42 app/sql_parser.rb
sqlui-0.1.41 app/sql_parser.rb
sqlui-0.1.40 app/sql_parser.rb
sqlui-0.1.39 app/sql_parser.rb
sqlui-0.1.38 app/sql_parser.rb
sqlui-0.1.37 app/sql_parser.rb
sqlui-0.1.36 app/sql_parser.rb
sqlui-0.1.35 app/sql_parser.rb
sqlui-0.1.34 app/sql_parser.rb
sqlui-0.1.33 app/sql_parser.rb
sqlui-0.1.32 app/sql_parser.rb
sqlui-0.1.31 app/sql_parser.rb
sqlui-0.1.30 app/sql_parser.rb
sqlui-0.1.29 app/sql_parser.rb
sqlui-0.1.28 app/sql_parser.rb