Class: Ronin::Code::SQL::Dialect
- Inherits:
-
Object
- Object
- Ronin::Code::SQL::Dialect
show all
- Defined in:
- lib/ronin/code/sql/dialect.rb
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(symbols = {}) ⇒ Dialect
Creates a new Dialect object connected to the specified program.
44
45
46
47
|
# File 'lib/ronin/code/sql/dialect.rb', line 44
def initialize(symbols={})
@symbols = SymbolTable.new(symbols)
@statements = []
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *arguments, &block) ⇒ Object
271
272
273
274
275
276
277
|
# File 'lib/ronin/code/sql/dialect.rb', line 271
def method_missing(name,*arguments,&block)
if (arguments.empty? && block.nil?)
return field(name)
end
raise(NoMethodError,name.id2name)
end
|
Instance Attribute Details
#statements ⇒ Object
Statements used within the dialect
38
39
40
|
# File 'lib/ronin/code/sql/dialect.rb', line 38
def statements
@statements
end
|
#symbols ⇒ Object
Symbol Table for the dialect
35
36
37
|
# File 'lib/ronin/code/sql/dialect.rb', line 35
def symbols
@symbols
end
|
Class Method Details
.clauses ⇒ Object
90
91
92
93
94
95
96
97
98
|
# File 'lib/ronin/code/sql/dialect.rb', line 90
def self.clauses
all_clauses = {}
self.statements.each do |stmt|
all_clauses.merge!(stmt.clauses)
end
return all_clauses
end
|
.dialects ⇒ Object
Returns the Hash of defined SQL dialects.
52
53
54
|
# File 'lib/ronin/code/sql/dialect.rb', line 52
def Dialect.dialects
@@dialects ||= {}
end
|
.get(name) ⇒ Object
Returns the SQL Dialect defined with the specified name. If no such SQL Dialect exists, an UnknownDialect exception will be raised.
.has_clause?(name) ⇒ Boolean
100
101
102
103
104
105
106
|
# File 'lib/ronin/code/sql/dialect.rb', line 100
def self.has_clause?(name)
self.statements.each_value do |stmt|
return true if stmt.has_clause?(name)
end
return false
end
|
.has_dialect?(name) ⇒ Boolean
Returns true if there is a SQL Dialect defined with the specified name, returns false otherwise.
60
61
62
|
# File 'lib/ronin/code/sql/dialect.rb', line 60
def Dialect.has_dialect?(name)
Dialect.dialects.has_key?(name.to_sym)
end
|
.has_statement?(name) ⇒ Boolean
86
87
88
|
# File 'lib/ronin/code/sql/dialect.rb', line 86
def self.has_statement?(name)
self.statements.has_key?(name.to_sym)
end
|
.statements ⇒ Object
Returns the Hash of defined Statements within the Dialect.
82
83
84
|
# File 'lib/ronin/code/sql/dialect.rb', line 82
def self.statements
@@statements ||= {}
end
|
Instance Method Details
#all ⇒ Object
159
160
161
|
# File 'lib/ronin/code/sql/dialect.rb', line 159
def all
Token.new('*')
end
|
#clause(name, *arguments) ⇒ Object
133
134
135
136
137
138
139
140
141
142
143
|
# File 'lib/ronin/code/sql/dialect.rb', line 133
def clause(name,*arguments)
name = name.to_sym
self.class.statements.each do |stmt|
if stmt.has_cluase?(name)
return stmt.clauses[name].new(*arguments)
end
end
raise(UnknownClause,"unknown clause #{name}",caller)
end
|
#each_token(&block) ⇒ Object
167
168
169
170
171
172
173
174
175
|
# File 'lib/ronin/code/sql/dialect.rb', line 167
def each_token(&block)
@statements.each do |stmt|
stmt.emit.each(&block)
block.call(Token.separator)
end
return self
end
|
#enqueue_statement(name, *arguments, &block) ⇒ Object
122
123
124
125
126
127
|
# File 'lib/ronin/code/sql/dialect.rb', line 122
def enqueue_statement(name,*arguments,&block)
stmt = statement(name,*arguments,&block)
@statements << stmt
return stmt
end
|
#field(name) ⇒ Object
152
153
154
155
156
157
|
# File 'lib/ronin/code/sql/dialect.rb', line 152
def field(name)
sym = @symbols.symbol(name)
sym.value ||= Field.new(@symbols,name)
return sym
end
|
#has_clause?(name) ⇒ Boolean
129
130
131
|
# File 'lib/ronin/code/sql/dialect.rb', line 129
def has_clause?(name)
self.class.has_clause?(name)
end
|
#has_statement?(name) ⇒ Boolean
108
109
110
|
# File 'lib/ronin/code/sql/dialect.rb', line 108
def has_statement?(name)
self.class.has_statement?(name)
end
|
#id ⇒ Object
163
164
165
|
# File 'lib/ronin/code/sql/dialect.rb', line 163
def id
field('id')
end
|
#statement(name, *arguments, &block) ⇒ Object
112
113
114
115
116
117
118
119
120
|
# File 'lib/ronin/code/sql/dialect.rb', line 112
def statement(name,*arguments,&block)
name = name.to_sym
unless has_statement?(name)
raise(UnknownStatement,"unknown statement #{name} in #{dialect} dialect",caller)
end
return self.class.statements[name].new(self,*arguments,&block)
end
|
#symbol(name) ⇒ Object
145
146
147
148
149
150
|
# File 'lib/ronin/code/sql/dialect.rb', line 145
def symbol(name)
sym = @symbols.symbol(name)
sym.value ||= name
return sym
end
|