Sha256: 7e94db2f3facb92a360bada077b966a9b1b3185f582813a86d8f5a8c0c70fae3

Contents?: true

Size: 1.84 KB

Versions: 9

Compression:

Stored size: 1.84 KB

Contents

grammar SQLPrimitives
  include SQLTokens

  rule primitive
    OPEN_PARENS primitive CLOSE_PARENS {
       def eval
        simple_primitive.eval
      end
    }
    /
    simple_primitive
  end

  rule simple_primitive
    datetime / date / boolean / quoted_string / backtick_string / number / string
  end

  rule optional_spaces
    SPACE*
  end

  rule boolean
    TRUE / FALSE
  end

  rule quoted_string
    single_quoted_string / double_quoted_string
  end

  rule single_quoted_string
    SINGLE_QUOTE (NON_QUOTE_CHARS / DOUBLE_QUOTE)* SINGLE_QUOTE {
      def eval
        text_value[1..text_value.length-2]
      end
    }
  end

  rule double_quoted_string
    DOUBLE_QUOTE (NON_QUOTE_CHARS / SINGLE_QUOTE)* DOUBLE_QUOTE {
      def eval
        text_value[1..text_value.length-2]
      end
    }
  end

  rule backtick_string
    BACKTICK string BACKTICK {
      def eval
        string.eval
      end
    }
  end

  rule string
    STRING_CHARS+ {
      def eval
        text_value
      end
    }
  end

  rule number
    float / integer
  end

  rule integer
    MINUS_OR_DIGIT DIGIT* {
      def eval
        text_value.to_i
      end
    }
  end

  rule float
    integer "." integer {
      def eval
        text_value.to_f
      end
    }
  end

  rule date
    one:four_digits DASH two:two_digits DASH three:two_digits {
      def eval
        elements = [one.eval, two.eval, three.eval]
        Date.new(*elements)
      end
    }
  end

  rule four_digits
    two_digits two_digits {
      def eval; text_value.to_i; end
    }
  end

  rule two_digits
    DIGIT DIGIT {
      def eval; text_value.to_i; end
    }
  end

  rule datetime
    quote? date SPACE time quote? {
      def eval
        Time.parse(text_value)
      end
    }
  end

  rule time
    two_digits ":" two_digits ":" two_digits
  end

  rule quote
    SINGLE_QUOTE / DOUBLE_QUOTE
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
hipster_sql_to_hbase-0.2.0 lib/sql_parser/sql_primitives.treetop
hipster_sql_to_hbase-0.1.85 lib/sql_parser/sql_primitives.treetop
hipster_sql_to_hbase-0.1.8 lib/sql_parser/sql_primitives.treetop
hipster_sql_to_hbase-0.1.7 lib/sql_parser/sql_primitives.treetop
hipster_sql_to_hbase-0.1.6 lib/sql_parser/sql_primitives.treetop
hipster_sql_to_hbase-0.1.5 lib/sql_parser/sql_primitives.treetop
hipster_sql_to_hbase-0.1.4 lib/sql_parser/sql_primitives.treetop
hipster_sql_to_hbase-0.1.3 lib/sql_parser/sql_primitives.treetop
hipster_sql_to_hbase-0.1.2 lib/sql_parser/sql_primitives.treetop