class DDLParser::Parser

Attributes

parse_error[RW]
parse_tree[RW]
statement_type[RW]

Public Class Methods

new(statement, do_downcase=true) click to toggle source
# File lib/ddl_parser/parser.rb, line 5
def initialize(statement, do_downcase=true)
  @statement = do_downcase ? statement.downcase : statement
  @parse_tree = nil
  @parse_error = nil
  begin
    case @statement.strip
      when /\Acreate\stable.*/i
        @statement_type = :create_table
        @parse_tree = DDLParser::DDL::DB2::Parser.new.create_table.parse(@statement)
      when /\Aalter\stable.*/i
        @statement_type = :alter_table
        @parse_tree = DDLParser::DDL::DB2::Parser.new.alter_table.parse(@statement)
      when /\Acreate.*index.*/i
        @statement_type = :create_index
        @parse_tree = DDLParser::DDL::DB2::Parser.new.create_index.parse(@statement)
      else
        raise 'Unknown DDL statement'
    end
  rescue Parslet::ParseFailed => error
    @parse_error = error
  end
end

Public Instance Methods

errors() click to toggle source
# File lib/ddl_parser/parser.rb, line 32
def errors
  @parse_error.cause.ascii_tree if @parse_error
end
most_likely_error() click to toggle source
# File lib/ddl_parser/parser.rb, line 36
def most_likely_error
  @parse_error.cause.ascii_tree.split("\n").last.gsub('      `- ','') if @parse_error
end
translate() click to toggle source
# File lib/ddl_parser/parser.rb, line 40
def translate
  case statement_type
    when :create_table
      DDLParser::Translator::CreateTable.new(parse_tree)
    when :alter_table
      DDLParser::Translator::AlterTable.new(parse_tree)
    when :create_index
      DDLParser::Translator::CreateIndexHeader.new(parse_tree)
    else
      raise "Unknown statement_type #{statement_type}"
  end
end
valid?() click to toggle source
# File lib/ddl_parser/parser.rb, line 28
def valid?
  @parse_error == nil && @parse_tree && @parse_tree.count > 0
end