Class: GitlabZOQL::Visitor

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab-zoql/visitor.rb

Instance Method Summary collapse

Constructor Details

#initializeVisitor

Returns a new instance of Visitor.



5
6
7
# File 'lib/gitlab-zoql/visitor.rb', line 5

def initialize
  @negated = false
end

Instance Method Details

#visit(node) ⇒ Object



9
10
11
# File 'lib/gitlab-zoql/visitor.rb', line 9

def visit(node)
  node.accept(self)
end

#visit_And(o) ⇒ Object



46
47
48
# File 'lib/gitlab-zoql/visitor.rb', line 46

def visit_And(o)
  search_condition('AND', o)
end

#visit_Column(o) ⇒ Object



78
79
80
# File 'lib/gitlab-zoql/visitor.rb', line 78

def visit_Column(o)
  o.name
end

#visit_DateTime(o) ⇒ Object



82
83
84
# File 'lib/gitlab-zoql/visitor.rb', line 82

def visit_DateTime(o)
  "'%s'" % escape(o.value.strftime('%Y-%m-%d %H:%M:%S'))
end

#visit_DirectSelect(o) ⇒ Object



13
14
15
16
17
# File 'lib/gitlab-zoql/visitor.rb', line 13

def visit_DirectSelect(o)
  [
    o.query_expression
  ].compact.collect { |e| visit(e) }.join(' ')
end

#visit_Equals(o) ⇒ Object



66
67
68
69
70
71
72
# File 'lib/gitlab-zoql/visitor.rb', line 66

def visit_Equals(o)
  if @negated
    comparison('!=', o)
  else
    comparison('=', o)
  end
end

#visit_False(_o) ⇒ Object



114
115
116
# File 'lib/gitlab-zoql/visitor.rb', line 114

def visit_False(_o)
  'FALSE'
end

#visit_Float(o) ⇒ Object



90
91
92
# File 'lib/gitlab-zoql/visitor.rb', line 90

def visit_Float(o)
  o.value.to_s
end

#visit_FromClause(o) ⇒ Object



34
35
36
# File 'lib/gitlab-zoql/visitor.rb', line 34

def visit_FromClause(o)
  "FROM #{arrayize(o.tables)}"
end

#visit_Greater(o) ⇒ Object



58
59
60
# File 'lib/gitlab-zoql/visitor.rb', line 58

def visit_Greater(o)
  comparison('>', o)
end

#visit_GreaterOrEquals(o) ⇒ Object



50
51
52
# File 'lib/gitlab-zoql/visitor.rb', line 50

def visit_GreaterOrEquals(o)
  comparison('>=', o)
end

#visit_Identifier(o) ⇒ Object



102
103
104
# File 'lib/gitlab-zoql/visitor.rb', line 102

def visit_Identifier(o)
  o.name
end

#visit_Integer(o) ⇒ Object



94
95
96
# File 'lib/gitlab-zoql/visitor.rb', line 94

def visit_Integer(o)
  o.value.to_s
end

#visit_Less(o) ⇒ Object



62
63
64
# File 'lib/gitlab-zoql/visitor.rb', line 62

def visit_Less(o)
  comparison('<', o)
end

#visit_LessOrEquals(o) ⇒ Object



54
55
56
# File 'lib/gitlab-zoql/visitor.rb', line 54

def visit_LessOrEquals(o)
  comparison('<=', o)
end

#visit_Literal(o) ⇒ Object



98
99
100
# File 'lib/gitlab-zoql/visitor.rb', line 98

def visit_Literal(o)
  quote(o.value)
end

#visit_Not(o) ⇒ Object



106
107
108
# File 'lib/gitlab-zoql/visitor.rb', line 106

def visit_Not(o)
  negate { visit(o.value) }
end

#visit_Null(_o) ⇒ Object



118
119
120
# File 'lib/gitlab-zoql/visitor.rb', line 118

def visit_Null(_o)
  'NULL'
end

#visit_Or(o) ⇒ Object



42
43
44
# File 'lib/gitlab-zoql/visitor.rb', line 42

def visit_Or(o)
  search_condition('OR', o)
end

#visit_Select(o) ⇒ Object



19
20
21
# File 'lib/gitlab-zoql/visitor.rb', line 19

def visit_Select(o)
  "SELECT #{visit_all([o.list, o.table_expression].compact).join(' ')}"
end

#visit_SelectList(o) ⇒ Object



23
24
25
# File 'lib/gitlab-zoql/visitor.rb', line 23

def visit_SelectList(o)
  arrayize(o.columns)
end

#visit_String(o) ⇒ Object



86
87
88
# File 'lib/gitlab-zoql/visitor.rb', line 86

def visit_String(o)
  '%s' % escape(o.value)
end

#visit_Table(o) ⇒ Object



74
75
76
# File 'lib/gitlab-zoql/visitor.rb', line 74

def visit_Table(o)
  o.name
end

#visit_TableExpression(o) ⇒ Object



27
28
29
30
31
32
# File 'lib/gitlab-zoql/visitor.rb', line 27

def visit_TableExpression(o)
  [
    o.from_clause,
    o.where_clause
  ].compact.collect { |e| visit(e) }.join(' ')
end

#visit_True(_o) ⇒ Object



110
111
112
# File 'lib/gitlab-zoql/visitor.rb', line 110

def visit_True(_o)
  'TRUE'
end

#visit_WhereClause(o) ⇒ Object



38
39
40
# File 'lib/gitlab-zoql/visitor.rb', line 38

def visit_WhereClause(o)
  "WHERE #{visit(o.search_condition)}"
end