Sha256: 5d26849bd275ca7aee5d500bfd134b730ccf07d992ba5a49aaa034dc61ddcc8a

Contents?: true

Size: 1.28 KB

Versions: 1

Compression:

Stored size: 1.28 KB

Contents

require "treetop"
require "date"

module Selekt
  extend self

  RESERVED_SQL_KEYWORDS = [
    'select', 'from', 'where', 'group', 'order', 'having', 'union', 'all',
    'limit', 'offset', 'as', 'by', 'with', 'distinct',
    'left', 'right', 'inner', 'full', 'outer', 'join', 'on', 'using', 'natural',
    'case', 'when', 'then', 'else', 'end', 'interval',
    'over', 'partition', 'range', 'rows', 'window'
  ]

  class ParseError < StandardError; end
  class StubError < StandardError; end

  def parser
    @parser ||= begin
      Treetop.load(File.expand_path('./selekt/sql.treetop', File.dirname(__FILE__)))
      Selekt::SQLParser.new
    end
  end

  def parse(sql)
    Selekt::Query.new(sql)    
  end

  def safe_identifier(id)
    id =~ /\A[a-z][a-z0-9_]*\z/i ? id : '"' + id.gsub('"', '""') + '"'
  end

  def quote(val)
    case val
      when NilClass; 'NULL'
      when TrueClass; 'TRUE'
      when FalseClass; 'FALSE'
      when Numeric; val.to_s
      when String; "'" + val.gsub("'", "''") + "'"
      when DateTime, Time; quote(val.strftime('%F %X')) + '::timestamp'
      when Date; quote(val.strftime('%F')) + '::date'
      else raise "Don't know how to quote #{val.inspect}!"
    end
  end
end

require "selekt/version"
require "selekt/sql"
require "selekt/query"
require "selekt/source_stub"

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
selekt-0.0.1 lib/selekt.rb