Class: Seaquel::AST::Expression

Inherits:
Object
  • Object
show all
Defined in:
lib/seaquel/ast/expression.rb

Overview

Base class for all expression-type AST nodes.

Direct Known Subclasses

BinOp, Binding, Column, Funcall, JoinOp, Literal, Table, Unary

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.binop(op, *aliases) ⇒ Object



6
7
8
9
10
11
12
13
14
# File 'lib/seaquel/ast/expression.rb', line 6

def self.binop op, *aliases
  define_method(op) do |exp|
    BinOp.new(op, self, exp)
  end

  aliases.each do |op_alias|
    alias_method(op_alias, op)
  end
end

.joinop(op, *aliases) ⇒ Object



15
16
17
18
19
20
21
22
23
# File 'lib/seaquel/ast/expression.rb', line 15

def self.joinop op, *aliases
  define_method(op) do |exp|
    JoinOp.new(op, [self, exp])
  end

  aliases.each do |op_alias|
    alias_method(op_alias, op)
  end
end

.unaryop(op, *aliases) ⇒ Object



24
25
26
27
28
29
30
31
32
# File 'lib/seaquel/ast/expression.rb', line 24

def self.unaryop op, *aliases
  define_method(op) do
    Unary.new(op, self)
  end

  aliases.each do |op_alias|
    alias_method(op_alias, op)
  end
end

Instance Method Details

#as(name) ⇒ Object



79
80
81
# File 'lib/seaquel/ast/expression.rb', line 79

def as name
  Alias.new(name, self)
end

#ascObject



83
84
85
# File 'lib/seaquel/ast/expression.rb', line 83

def asc
  Order.new(:asc, self)
end

#descObject



86
87
88
# File 'lib/seaquel/ast/expression.rb', line 86

def desc
  Order.new(:desc, self)
end

#lisp_inspect(type, *args) ⇒ Object



90
91
92
93
# File 'lib/seaquel/ast/expression.rb', line 90

def lisp_inspect type, *args
  "(" + 
    [type.to_s, args.map(&:inspect)].join(' ') + ")"
end